From 84dfc3545c7ff05af5d31a89623c23d82219af17 Mon Sep 17 00:00:00 2001 From: mattmillerai <7741082+mattmillerai@users.noreply.github.com> Date: Thu, 21 May 2026 22:21:06 +0000 Subject: [PATCH] [chore] Update Ingest API types from cloud@a47b35e --- packages/ingest-types/src/index.ts | 866 +- packages/ingest-types/src/types.gen.ts | 15100 ++++++++++++----------- packages/ingest-types/src/zod.gen.ts | 4513 +++---- 3 files changed, 9970 insertions(+), 10509 deletions(-) diff --git a/packages/ingest-types/src/index.ts b/packages/ingest-types/src/index.ts index 03a4f5ca9c..35b4c54139 100644 --- a/packages/ingest-types/src/index.ts +++ b/packages/ingest-types/src/index.ts @@ -1,867 +1,3 @@ // This file is auto-generated by @hey-api/openapi-ts -export type { - AcceptInviteResponse, - AcceptWorkspaceInviteData, - AcceptWorkspaceInviteError, - AcceptWorkspaceInviteErrors, - AcceptWorkspaceInviteResponse, - AcceptWorkspaceInviteResponses, - AddAssetTagsData, - AddAssetTagsError, - AddAssetTagsErrors, - AddAssetTagsResponse, - AddAssetTagsResponses, - Asset, - AssetCreated, - AssetCreatedWritable, - AssetDownloadResponse, - AssetInfo, - AssetMetadataResponse, - AssetTagHistogramResponse, - AssetUpdated, - AssetWritable, - BillingBalanceResponse, - BillingEvent, - BillingEventsResponse, - BillingOpStatusResponse, - BillingPlansResponse, - BillingStatus, - BillingStatusResponse, - BindingErrorResponse, - BulkRevokeApiKeysResponse, - BulkRevokeWorkspaceMemberApiKeysData, - BulkRevokeWorkspaceMemberApiKeysError, - BulkRevokeWorkspaceMemberApiKeysErrors, - BulkRevokeWorkspaceMemberApiKeysResponse, - BulkRevokeWorkspaceMemberApiKeysResponses, - CancelJobData, - CancelJobError, - CancelJobErrors, - CancelJobResponse, - CancelJobResponses, - CancelSubscriptionData, - CancelSubscriptionError, - CancelSubscriptionErrors, - CancelSubscriptionRequest, - CancelSubscriptionResponse, - CancelSubscriptionResponse2, - CancelSubscriptionResponses, - CheckAssetByHashData, - CheckAssetByHashError, - CheckAssetByHashErrors, - CheckAssetByHashResponses, - CheckHubUsernameData, - CheckHubUsernameError, - CheckHubUsernameErrors, - CheckHubUsernameResponse, - CheckHubUsernameResponses, - ClientOptions, - CreateAssetDownloadData, - CreateAssetDownloadError, - CreateAssetDownloadErrors, - CreateAssetDownloadResponse, - CreateAssetDownloadResponses, - CreateAssetExportData, - CreateAssetExportError, - CreateAssetExportErrors, - CreateAssetExportResponse, - CreateAssetExportResponses, - CreateAssetFromHashData, - CreateAssetFromHashError, - CreateAssetFromHashErrors, - CreateAssetFromHashResponse, - CreateAssetFromHashResponses, - CreateDeletionRequestData, - CreateDeletionRequestError, - CreateDeletionRequestErrors, - CreateDeletionRequestResponse, - CreateDeletionRequestResponses, - CreateHubAssetUploadUrlData, - CreateHubAssetUploadUrlError, - CreateHubAssetUploadUrlErrors, - CreateHubAssetUploadUrlResponse, - CreateHubAssetUploadUrlResponses, - CreateHubProfileData, - CreateHubProfileError, - CreateHubProfileErrors, - CreateHubProfileRequest, - CreateHubProfileResponse, - CreateHubProfileResponses, - CreateInviteRequest, - CreateSecretData, - CreateSecretError, - CreateSecretErrors, - CreateSecretRequest, - CreateSecretResponse, - CreateSecretResponses, - CreateSessionData, - CreateSessionError, - CreateSessionErrors, - CreateSessionResponse, - CreateSessionResponse2, - CreateSessionResponses, - CreateTopupData, - CreateTopupError, - CreateTopupErrors, - CreateTopupRequest, - CreateTopupResponse, - CreateTopupResponse2, - CreateTopupResponses, - CreateWorkflowData, - CreateWorkflowError, - CreateWorkflowErrors, - CreateWorkflowRequest, - CreateWorkflowResponse, - CreateWorkflowResponses, - CreateWorkflowVersionData, - CreateWorkflowVersionError, - CreateWorkflowVersionErrors, - CreateWorkflowVersionRequest, - CreateWorkflowVersionResponse, - CreateWorkflowVersionResponses, - CreateWorkspaceApiKeyData, - CreateWorkspaceApiKeyError, - CreateWorkspaceApiKeyErrors, - CreateWorkspaceApiKeyRequest, - CreateWorkspaceApiKeyResponse, - CreateWorkspaceApiKeyResponse2, - CreateWorkspaceApiKeyResponses, - CreateWorkspaceData, - CreateWorkspaceError, - CreateWorkspaceErrors, - CreateWorkspaceInviteData, - CreateWorkspaceInviteError, - CreateWorkspaceInviteErrors, - CreateWorkspaceInviteResponse, - CreateWorkspaceInviteResponses, - CreateWorkspaceRequest, - CreateWorkspaceResponse, - CreateWorkspaceResponses, - DeleteAssetData, - DeleteAssetError, - DeleteAssetErrors, - DeleteAssetResponse, - DeleteAssetResponses, - DeleteHubWorkflowData, - DeleteHubWorkflowError, - DeleteHubWorkflowErrors, - DeleteHubWorkflowResponse, - DeleteHubWorkflowResponses, - DeleteMonitoringTasksSubpathData, - DeleteMonitoringTasksSubpathErrors, - DeleteMonitoringTasksSubpathResponses, - DeleteSecretData, - DeleteSecretError, - DeleteSecretErrors, - DeleteSecretResponse, - DeleteSecretResponses, - DeleteSessionData, - DeleteSessionError, - DeleteSessionErrors, - DeleteSessionResponse, - DeleteSessionResponse2, - DeleteSessionResponses, - DeleteUserdataFileData, - DeleteUserdataFileError, - DeleteUserdataFileErrors, - DeleteUserdataFileResponse, - DeleteUserdataFileResponses, - DeleteWorkflowData, - DeleteWorkflowError, - DeleteWorkflowErrors, - DeleteWorkflowResponse, - DeleteWorkflowResponses, - DeleteWorkspaceData, - DeleteWorkspaceError, - DeleteWorkspaceErrors, - DeleteWorkspaceResponse, - DeleteWorkspaceResponses, - DeletionRequest, - DeletionStatus, - DownloadExportData, - DownloadExportError, - DownloadExportErrors, - DownloadExportResponse, - DownloadExportResponses, - ErrorResponse, - ExchangeTokenData, - ExchangeTokenError, - ExchangeTokenErrors, - ExchangeTokenRequest, - ExchangeTokenResponse, - ExchangeTokenResponse2, - ExchangeTokenResponses, - ExecutePromptData, - ExecutePromptError, - ExecutePromptErrors, - ExecutePromptResponse, - ExecutePromptResponses, - ExecutionError, - ExportDownloadUrlResponse, - FeedbackRequest, - FeedbackResponse, - FeedbackResponseWritable, - ForkWorkflowData, - ForkWorkflowError, - ForkWorkflowErrors, - ForkWorkflowRequest, - ForkWorkflowResponse, - ForkWorkflowResponses, - GetAllSettingsData, - GetAllSettingsError, - GetAllSettingsErrors, - GetAllSettingsResponse, - GetAllSettingsResponses, - GetApiViewVideoAliasData, - GetApiViewVideoAliasErrors, - GetApiViewVideoAliasResponses, - GetAssetByIdData, - GetAssetByIdError, - GetAssetByIdErrors, - GetAssetByIdResponse, - GetAssetByIdResponses, - GetAssetTagHistogramData, - GetAssetTagHistogramError, - GetAssetTagHistogramErrors, - GetAssetTagHistogramResponse, - GetAssetTagHistogramResponses, - GetBillingBalanceData, - GetBillingBalanceError, - GetBillingBalanceErrors, - GetBillingBalanceResponse, - GetBillingBalanceResponses, - GetBillingEventsData, - GetBillingEventsError, - GetBillingEventsErrors, - GetBillingEventsResponse, - GetBillingEventsResponses, - GetBillingOpStatusData, - GetBillingOpStatusError, - GetBillingOpStatusErrors, - GetBillingOpStatusResponse, - GetBillingOpStatusResponses, - GetBillingPlansData, - GetBillingPlansError, - GetBillingPlansErrors, - GetBillingPlansResponse, - GetBillingPlansResponses, - GetBillingStatusData, - GetBillingStatusError, - GetBillingStatusErrors, - GetBillingStatusResponse, - GetBillingStatusResponses, - GetCustomNodeProxyData, - GetCustomNodeProxyErrors, - GetCustomNodeProxyResponses, - GetDeletionRequestData, - GetDeletionRequestError, - GetDeletionRequestErrors, - GetDeletionRequestResponse, - GetDeletionRequestResponses, - GetExtensionsData, - GetExtensionsResponse, - GetExtensionsResponses, - GetFeaturesData, - GetFeaturesResponse, - GetFeaturesResponses, - GetFilesData, - GetFilesError, - GetFilesErrors, - GetFilesResponse, - GetFilesResponses, - GetGlobalSubgraphData, - GetGlobalSubgraphError, - GetGlobalSubgraphErrors, - GetGlobalSubgraphResponse, - GetGlobalSubgraphResponses, - GetGlobalSubgraphsData, - GetGlobalSubgraphsError, - GetGlobalSubgraphsErrors, - GetGlobalSubgraphsResponse, - GetGlobalSubgraphsResponses, - GetHealthData, - GetHealthError, - GetHealthErrors, - GetHealthResponse, - GetHealthResponses, - GetHistoryData, - GetHistoryError, - GetHistoryErrors, - GetHistoryForPromptData, - GetHistoryForPromptError, - GetHistoryForPromptErrors, - GetHistoryForPromptResponse, - GetHistoryForPromptResponses, - GetHistoryResponse, - GetHistoryResponses, - GetHubProfileByUsernameData, - GetHubProfileByUsernameError, - GetHubProfileByUsernameErrors, - GetHubProfileByUsernameResponse, - GetHubProfileByUsernameResponses, - GetHubWorkflowData, - GetHubWorkflowError, - GetHubWorkflowErrors, - GetHubWorkflowResponse, - GetHubWorkflowResponses, - GetJobDetailData, - GetJobDetailError, - GetJobDetailErrors, - GetJobDetailResponse, - GetJobDetailResponses, - GetJobStatusData, - GetJobStatusError, - GetJobStatusErrors, - GetJobStatusResponse, - GetJobStatusResponses, - GetJwksData, - GetJwksResponse, - GetJwksResponses, - GetLegacyAssetContentData, - GetLegacyAssetContentErrors, - GetLegacyHistoryByIdData, - GetLegacyHistoryByIdErrors, - GetLegacyHistoryData, - GetLegacyHistoryErrors, - GetLegacyJobByIdData, - GetLegacyJobByIdErrors, - GetLegacyJobOutputsData, - GetLegacyJobOutputsErrors, - GetLegacyModelsByFolderData, - GetLegacyModelsByFolderErrors, - GetLegacyModelsData, - GetLegacyModelsErrors, - GetLegacyObjectInfoByNodeClassData, - GetLegacyObjectInfoByNodeClassErrors, - GetLegacyPromptByIdData, - GetLegacyPromptByIdErrors, - GetLegacyUserdataV2Data, - GetLegacyUserdataV2Errors, - GetLegacyViewMetadataData, - GetLegacyViewMetadataErrors, - GetLogsData, - GetLogsError, - GetLogsErrors, - GetLogsResponse, - GetLogsResponses, - GetMaskLayersData, - GetMaskLayersError, - GetMaskLayersErrors, - GetMaskLayersResponse, - GetMaskLayersResponses, - GetModelFoldersData, - GetModelFoldersError, - GetModelFoldersErrors, - GetModelFoldersResponse, - GetModelFoldersResponses, - GetModelPreviewData, - GetModelPreviewError, - GetModelPreviewErrors, - GetModelPreviewResponse, - GetModelPreviewResponses, - GetModelsInFolderData, - GetModelsInFolderError, - GetModelsInFolderErrors, - GetModelsInFolderResponse, - GetModelsInFolderResponses, - GetMonitoringTasksData, - GetMonitoringTasksErrors, - GetMonitoringTasksResponses, - GetMonitoringTasksSubpathData, - GetMonitoringTasksSubpathErrors, - GetMonitoringTasksSubpathResponses, - GetMyHubProfileData, - GetMyHubProfileError, - GetMyHubProfileErrors, - GetMyHubProfileResponse, - GetMyHubProfileResponses, - GetNodeByIdData, - GetNodeByIdErrors, - GetNodeByIdResponses, - GetNodeInfoData, - GetNodeInfoResponse, - GetNodeInfoResponses, - GetNodeInfoSchemaData, - GetNodeInfoSchemaResponses, - GetNodeReplacementsData, - GetNodeReplacementsError, - GetNodeReplacementsErrors, - GetNodeReplacementsResponse, - GetNodeReplacementsResponses, - GetOpenapiSpecData, - GetOpenapiSpecResponses, - GetPaymentPortalData, - GetPaymentPortalError, - GetPaymentPortalErrors, - GetPaymentPortalResponse, - GetPaymentPortalResponses, - GetPprofData, - GetPprofProfileData, - GetPprofProfileResponses, - GetPprofResponses, - GetPprofTraceData, - GetPprofTraceResponses, - GetPromptInfoData, - GetPromptInfoError, - GetPromptInfoErrors, - GetPromptInfoResponse, - GetPromptInfoResponses, - GetPublishedWorkflowData, - GetPublishedWorkflowError, - GetPublishedWorkflowErrors, - GetPublishedWorkflowResponse, - GetPublishedWorkflowResponses, - GetQueueInfoData, - GetQueueInfoError, - GetQueueInfoErrors, - GetQueueInfoResponse, - GetQueueInfoResponses, - GetRemoteAssetMetadataData, - GetRemoteAssetMetadataError, - GetRemoteAssetMetadataErrors, - GetRemoteAssetMetadataResponse, - GetRemoteAssetMetadataResponses, - GetSecretData, - GetSecretError, - GetSecretErrors, - GetSecretResponse, - GetSecretResponses, - GetSettingByKeyData, - GetSettingByKeyError, - GetSettingByKeyErrors, - GetSettingByKeyResponse, - GetSettingByKeyResponses, - GetStaticExtensionsData, - GetStaticExtensionsErrors, - GetStaticExtensionsResponses, - GetSystemStatsData, - GetSystemStatsError, - GetSystemStatsErrors, - GetSystemStatsResponse, - GetSystemStatsResponses, - GetTaskData, - GetTaskError, - GetTaskErrors, - GetTaskResponse, - GetTaskResponses, - GetTemplateProxyData, - GetTemplateProxyErrors, - GetUserData, - GetUserdataData, - GetUserdataError, - GetUserdataErrors, - GetUserdataFileData, - GetUserdataFileError, - GetUserdataFileErrors, - GetUserdataFilePublishData, - GetUserdataFilePublishError, - GetUserdataFilePublishErrors, - GetUserdataFilePublishResponse, - GetUserdataFilePublishResponses, - GetUserdataFileResponse, - GetUserdataFileResponses, - GetUserdataResponse, - GetUserDataResponseFull, - GetUserDataResponseFullFile, - GetUserdataResponses, - GetUserError, - GetUserErrors, - GetUserResponse, - GetUserResponses, - GetUsersInfoData, - GetUsersInfoError, - GetUsersInfoErrors, - GetUsersInfoResponse, - GetUsersInfoResponses, - GetVhsQueryVideoData, - GetVhsQueryVideoError, - GetVhsQueryVideoErrors, - GetVhsQueryVideoResponse, - GetVhsQueryVideoResponses, - GetVhsViewAudioData, - GetVhsViewAudioErrors, - GetVhsViewAudioResponses, - GetVhsViewVideoData, - GetVhsViewVideoErrors, - GetVhsViewVideoResponses, - GetViewCompatAliasData, - GetViewCompatAliasErrors, - GetViewCompatAliasResponses, - GetWebsocketData, - GetWebsocketErrors, - GetWorkflowContentData, - GetWorkflowContentError, - GetWorkflowContentErrors, - GetWorkflowContentResponse, - GetWorkflowContentResponses, - GetWorkflowData, - GetWorkflowError, - GetWorkflowErrors, - GetWorkflowResponse, - GetWorkflowResponses, - GetWorkflowTemplatesData, - GetWorkflowTemplatesResponse, - GetWorkflowTemplatesResponses, - GetWorkspaceData, - GetWorkspaceError, - GetWorkspaceErrors, - GetWorkspaceResponse, - GetWorkspaceResponses, - GlobalSubgraphData, - GlobalSubgraphInfo, - HistoryDetailEntry, - HistoryDetailResponse, - HistoryEntry, - HistoryManageRequest, - HistoryResponse, - HubAssetUploadUrlRequest, - HubAssetUploadUrlResponse, - HubLabelInfo, - HubLabelListResponse, - HubProfile, - HubProfileSummary, - HubUsernameCheckResponse, - HubWorkflowDetail, - HubWorkflowListResponse, - HubWorkflowStatus, - HubWorkflowSummary, - HubWorkflowTemplateEntry, - ImportPublishedAssetsData, - ImportPublishedAssetsError, - ImportPublishedAssetsErrors, - ImportPublishedAssetsRequest, - ImportPublishedAssetsResponse, - ImportPublishedAssetsResponse2, - ImportPublishedAssetsResponses, - InterruptJobData, - InterruptJobError, - InterruptJobErrors, - InterruptJobResponses, - JobCancelResponse, - JobDetailResponse, - JobEntry, - JobsListResponse, - JobStatusResponse, - JwkKey, - JwksResponse, - LabelRef, - LeaveWorkspaceData, - LeaveWorkspaceError, - LeaveWorkspaceErrors, - LeaveWorkspaceResponse, - LeaveWorkspaceResponses, - ListAssetsData, - ListAssetsError, - ListAssetsErrors, - ListAssetsResponse, - ListAssetsResponse2, - ListAssetsResponses, - ListAssetsResponseWritable, - ListHubLabelsData, - ListHubLabelsError, - ListHubLabelsErrors, - ListHubLabelsResponse, - ListHubLabelsResponses, - ListHubWorkflowIndexData, - ListHubWorkflowIndexError, - ListHubWorkflowIndexErrors, - ListHubWorkflowIndexResponse, - ListHubWorkflowIndexResponses, - ListHubWorkflowsData, - ListHubWorkflowsError, - ListHubWorkflowsErrors, - ListHubWorkflowsResponse, - ListHubWorkflowsResponses, - ListInvitesResponse, - ListJobsData, - ListJobsError, - ListJobsErrors, - ListJobsResponse, - ListJobsResponses, - ListMembersResponse, - ListSecretsData, - ListSecretsError, - ListSecretsErrors, - ListSecretsResponse, - ListSecretsResponses, - ListTagsData, - ListTagsError, - ListTagsErrors, - ListTagsResponse, - ListTagsResponse2, - ListTagsResponses, - ListTasksData, - ListTasksError, - ListTasksErrors, - ListTasksResponse, - ListTasksResponses, - ListWorkflowsData, - ListWorkflowsError, - ListWorkflowsErrors, - ListWorkflowsResponse, - ListWorkflowsResponses, - ListWorkspaceApiKeysData, - ListWorkspaceApiKeysError, - ListWorkspaceApiKeysErrors, - ListWorkspaceApiKeysResponse, - ListWorkspaceApiKeysResponse2, - ListWorkspaceApiKeysResponses, - ListWorkspaceInvitesData, - ListWorkspaceInvitesError, - ListWorkspaceInvitesErrors, - ListWorkspaceInvitesResponse, - ListWorkspaceInvitesResponses, - ListWorkspaceMembersData, - ListWorkspaceMembersError, - ListWorkspaceMembersErrors, - ListWorkspaceMembersResponse, - ListWorkspaceMembersResponses, - ListWorkspacesData, - ListWorkspacesError, - ListWorkspacesErrors, - ListWorkspacesResponse, - ListWorkspacesResponse2, - ListWorkspacesResponses, - LogsResponse, - ManageHistoryData, - ManageHistoryError, - ManageHistoryErrors, - ManageHistoryResponses, - ManageQueueData, - ManageQueueError, - ManageQueueErrors, - ManageQueueResponse, - ManageQueueResponses, - Member, - ModelFile, - ModelFolder, - MoveUserdataFileData, - MoveUserdataFileError, - MoveUserdataFileErrors, - MoveUserdataFileResponse, - MoveUserdataFileResponses, - NodeInfo, - PaginationInfo, - PartnerUsageRequest, - PartnerUsageResponse, - PaymentPortalRequest, - PaymentPortalResponse, - PendingInvite, - Plan, - PlanAvailability, - PlanAvailabilityReason, - PlanSeatSummary, - PostAssetsFromWorkflowData, - PostAssetsFromWorkflowError, - PostAssetsFromWorkflowErrors, - PostAssetsFromWorkflowResponse, - PostAssetsFromWorkflowResponses, - PostCustomNodeProxyData, - PostCustomNodeProxyErrors, - PostCustomNodeProxyResponses, - PostMonitoringTasksSubpathData, - PostMonitoringTasksSubpathErrors, - PostMonitoringTasksSubpathResponses, - PostPprofSymbolData, - PostPprofSymbolResponses, - PostUserdataFileData, - PostUserdataFileError, - PostUserdataFileErrors, - PostUserdataFilePublishData, - PostUserdataFilePublishError, - PostUserdataFilePublishErrors, - PostUserdataFilePublishResponse, - PostUserdataFilePublishResponses, - PostUserdataFileResponse, - PostUserdataFileResponses, - PreviewPlanInfo, - PreviewSubscribeData, - PreviewSubscribeError, - PreviewSubscribeErrors, - PreviewSubscribeRequest, - PreviewSubscribeResponse, - PreviewSubscribeResponse2, - PreviewSubscribeResponses, - PromptErrorResponse, - PromptInfo, - PromptRequest, - PromptResponse, - PublishedWorkflowDetail, - PublishHubWorkflowData, - PublishHubWorkflowError, - PublishHubWorkflowErrors, - PublishHubWorkflowRequest, - PublishHubWorkflowResponse, - PublishHubWorkflowResponses, - PublishWorkflowAssetsRequest, - QueueInfo, - QueueManageRequest, - QueueManageResponse, - RemoveAssetTagsData, - RemoveAssetTagsError, - RemoveAssetTagsErrors, - RemoveAssetTagsResponse, - RemoveAssetTagsResponses, - RemoveWorkspaceMemberData, - RemoveWorkspaceMemberError, - RemoveWorkspaceMemberErrors, - RemoveWorkspaceMemberResponse, - RemoveWorkspaceMemberResponses, - ReportPartnerUsageData, - ReportPartnerUsageError, - ReportPartnerUsageErrors, - ReportPartnerUsageResponse, - ReportPartnerUsageResponses, - ResubscribeData, - ResubscribeError, - ResubscribeErrors, - ResubscribeRequest, - ResubscribeResponse, - ResubscribeResponse2, - ResubscribeResponses, - RevokeWorkspaceApiKeyData, - RevokeWorkspaceApiKeyError, - RevokeWorkspaceApiKeyErrors, - RevokeWorkspaceApiKeyResponse, - RevokeWorkspaceApiKeyResponses, - RevokeWorkspaceInviteData, - RevokeWorkspaceInviteError, - RevokeWorkspaceInviteErrors, - RevokeWorkspaceInviteResponse, - RevokeWorkspaceInviteResponses, - SecretListResponse, - SecretResponse, - SetReviewStatusData, - SetReviewStatusError, - SetReviewStatusErrors, - SetReviewStatusRequest, - SetReviewStatusResponse, - SetReviewStatusResponse2, - SetReviewStatusResponses, - SubmitFeedbackData, - SubmitFeedbackError, - SubmitFeedbackErrors, - SubmitFeedbackResponse, - SubmitFeedbackResponses, - SubscribeData, - SubscribeError, - SubscribeErrors, - SubscribeRequest, - SubscribeResponse, - SubscribeResponse2, - SubscribeResponses, - SubscriptionDuration, - SubscriptionTier, - SyncApiKeyData, - SyncApiKeyError, - SyncApiKeyErrors, - SyncApiKeyRequest, - SyncApiKeyResponse, - SyncApiKeyResponse2, - SyncApiKeyResponses, - SystemStatsResponse, - TagInfo, - TagsModificationResponse, - TaskEntry, - TaskResponse, - TasksListResponse, - UpdateAssetData, - UpdateAssetError, - UpdateAssetErrors, - UpdateAssetResponse, - UpdateAssetResponses, - UpdateAssetTagsData, - UpdateAssetTagsError, - UpdateAssetTagsErrors, - UpdateAssetTagsResponse, - UpdateAssetTagsResponses, - UpdateHubProfileData, - UpdateHubProfileError, - UpdateHubProfileErrors, - UpdateHubProfileRequest, - UpdateHubProfileResponse, - UpdateHubProfileResponses, - UpdateHubWorkflowData, - UpdateHubWorkflowError, - UpdateHubWorkflowErrors, - UpdateHubWorkflowRequest, - UpdateHubWorkflowResponse, - UpdateHubWorkflowResponses, - UpdateMultipleSettingsData, - UpdateMultipleSettingsError, - UpdateMultipleSettingsErrors, - UpdateMultipleSettingsResponse, - UpdateMultipleSettingsResponses, - UpdateSecretData, - UpdateSecretError, - UpdateSecretErrors, - UpdateSecretRequest, - UpdateSecretResponse, - UpdateSecretResponses, - UpdateSettingByKeyData, - UpdateSettingByKeyError, - UpdateSettingByKeyErrors, - UpdateSettingByKeyResponse, - UpdateSettingByKeyResponses, - UpdateSubscriptionCacheData, - UpdateSubscriptionCacheError, - UpdateSubscriptionCacheErrors, - UpdateSubscriptionCacheResponse, - UpdateSubscriptionCacheResponses, - UpdateWorkflowData, - UpdateWorkflowError, - UpdateWorkflowErrors, - UpdateWorkflowRequest, - UpdateWorkflowResponse, - UpdateWorkflowResponses, - UpdateWorkspaceData, - UpdateWorkspaceError, - UpdateWorkspaceErrors, - UpdateWorkspaceRequest, - UpdateWorkspaceResponse, - UpdateWorkspaceResponses, - UploadAssetData, - UploadAssetError, - UploadAssetErrors, - UploadAssetResponse, - UploadAssetResponses, - UploadImageData, - UploadImageError, - UploadImageErrors, - UploadImageResponse, - UploadImageResponses, - UploadMaskData, - UploadMaskError, - UploadMaskErrors, - UploadMaskResponse, - UploadMaskResponses, - UserDataResponseFull, - UserResponse, - ValidationError, - ValidationResult, - VerifyApiKeyRequest, - VerifyApiKeyResponse, - VerifyWorkspaceApiKeyData, - VerifyWorkspaceApiKeyError, - VerifyWorkspaceApiKeyErrors, - VerifyWorkspaceApiKeyResponse, - VerifyWorkspaceApiKeyResponses, - ViewFileData, - ViewFileError, - ViewFileErrors, - ViewFileResponse, - ViewFileResponses, - WorkflowApiAssetsRequest, - WorkflowApiAssetsResponse, - WorkflowForkedFrom, - WorkflowListResponse, - WorkflowPublishInfo, - WorkflowResponse, - WorkflowVersionContentResponse, - WorkflowVersionResponse, - Workspace, - WorkspaceApiKeyInfo, - WorkspaceSummary, - WorkspaceWithRole -} from './types.gen' +export type { AcceptInviteResponse, AcceptWorkspaceInviteData, AcceptWorkspaceInviteError, AcceptWorkspaceInviteErrors, AcceptWorkspaceInviteResponse, AcceptWorkspaceInviteResponses, AddAssetTagsData, AddAssetTagsError, AddAssetTagsErrors, AddAssetTagsResponse, AddAssetTagsResponses, Asset, AssetCreated, AssetCreatedWritable, AssetDownloadResponse, AssetInfo, AssetMetadataResponse, AssetTagHistogramResponse, AssetUpdated, AssetWritable, BillingBalanceResponse, BillingEvent, BillingEventsResponse, BillingOpStatusResponse, BillingPlansResponse, BillingStatus, BillingStatusResponse, BindingErrorResponse, BulkRevokeApiKeysResponse, BulkRevokeWorkspaceMemberApiKeysData, BulkRevokeWorkspaceMemberApiKeysError, BulkRevokeWorkspaceMemberApiKeysErrors, BulkRevokeWorkspaceMemberApiKeysResponse, BulkRevokeWorkspaceMemberApiKeysResponses, CancelJobData, CancelJobError, CancelJobErrors, CancelJobResponse, CancelJobResponses, CancelSubscriptionData, CancelSubscriptionError, CancelSubscriptionErrors, CancelSubscriptionRequest, CancelSubscriptionResponse, CancelSubscriptionResponse2, CancelSubscriptionResponses, CheckAssetByHashData, CheckAssetByHashError, CheckAssetByHashErrors, CheckAssetByHashResponses, CheckHubUsernameData, CheckHubUsernameError, CheckHubUsernameErrors, CheckHubUsernameResponse, CheckHubUsernameResponses, ClientOptions, CreateAssetDownloadData, CreateAssetDownloadError, CreateAssetDownloadErrors, CreateAssetDownloadResponse, CreateAssetDownloadResponses, CreateAssetExportData, CreateAssetExportError, CreateAssetExportErrors, CreateAssetExportResponse, CreateAssetExportResponses, CreateAssetFromHashData, CreateAssetFromHashError, CreateAssetFromHashErrors, CreateAssetFromHashResponse, CreateAssetFromHashResponses, CreateDeletionRequestData, CreateDeletionRequestError, CreateDeletionRequestErrors, CreateDeletionRequestResponse, CreateDeletionRequestResponses, CreateHubAssetUploadUrlData, CreateHubAssetUploadUrlError, CreateHubAssetUploadUrlErrors, CreateHubAssetUploadUrlResponse, CreateHubAssetUploadUrlResponses, CreateHubProfileData, CreateHubProfileError, CreateHubProfileErrors, CreateHubProfileRequest, CreateHubProfileResponse, CreateHubProfileResponses, CreateInviteRequest, CreateSecretData, CreateSecretError, CreateSecretErrors, CreateSecretRequest, CreateSecretResponse, CreateSecretResponses, CreateSessionData, CreateSessionError, CreateSessionErrors, CreateSessionResponse, CreateSessionResponse2, CreateSessionResponses, CreateTopupData, CreateTopupError, CreateTopupErrors, CreateTopupRequest, CreateTopupResponse, CreateTopupResponse2, CreateTopupResponses, CreateWorkflowData, CreateWorkflowError, CreateWorkflowErrors, CreateWorkflowRequest, CreateWorkflowResponse, CreateWorkflowResponses, CreateWorkflowVersionData, CreateWorkflowVersionError, CreateWorkflowVersionErrors, CreateWorkflowVersionRequest, CreateWorkflowVersionResponse, CreateWorkflowVersionResponses, CreateWorkspaceApiKeyData, CreateWorkspaceApiKeyError, CreateWorkspaceApiKeyErrors, CreateWorkspaceApiKeyRequest, CreateWorkspaceApiKeyResponse, CreateWorkspaceApiKeyResponse2, CreateWorkspaceApiKeyResponses, CreateWorkspaceData, CreateWorkspaceError, CreateWorkspaceErrors, CreateWorkspaceInviteData, CreateWorkspaceInviteError, CreateWorkspaceInviteErrors, CreateWorkspaceInviteResponse, CreateWorkspaceInviteResponses, CreateWorkspaceRequest, CreateWorkspaceResponse, CreateWorkspaceResponses, DeleteAssetData, DeleteAssetError, DeleteAssetErrors, DeleteAssetResponse, DeleteAssetResponses, DeleteHubWorkflowData, DeleteHubWorkflowError, DeleteHubWorkflowErrors, DeleteHubWorkflowResponse, DeleteHubWorkflowResponses, DeleteMonitoringTasksSubpathData, DeleteMonitoringTasksSubpathErrors, DeleteMonitoringTasksSubpathResponses, DeleteSecretData, DeleteSecretError, DeleteSecretErrors, DeleteSecretResponse, DeleteSecretResponses, DeleteSessionData, DeleteSessionError, DeleteSessionErrors, DeleteSessionResponse, DeleteSessionResponse2, DeleteSessionResponses, DeleteUserdataFileData, DeleteUserdataFileError, DeleteUserdataFileErrors, DeleteUserdataFileResponse, DeleteUserdataFileResponses, DeleteWorkflowData, DeleteWorkflowError, DeleteWorkflowErrors, DeleteWorkflowResponse, DeleteWorkflowResponses, DeleteWorkspaceData, DeleteWorkspaceError, DeleteWorkspaceErrors, DeleteWorkspaceResponse, DeleteWorkspaceResponses, DeletionRequest, DeletionStatus, DownloadExportData, DownloadExportError, DownloadExportErrors, DownloadExportResponse, DownloadExportResponses, ErrorResponse, ExchangeTokenData, ExchangeTokenError, ExchangeTokenErrors, ExchangeTokenRequest, ExchangeTokenResponse, ExchangeTokenResponse2, ExchangeTokenResponses, ExecutePromptData, ExecutePromptError, ExecutePromptErrors, ExecutePromptResponse, ExecutePromptResponses, ExecutionError, ExportDownloadUrlResponse, FeedbackRequest, FeedbackResponse, FeedbackResponseWritable, ForkWorkflowData, ForkWorkflowError, ForkWorkflowErrors, ForkWorkflowRequest, ForkWorkflowResponse, ForkWorkflowResponses, GetAllSettingsData, GetAllSettingsError, GetAllSettingsErrors, GetAllSettingsResponse, GetAllSettingsResponses, GetApiViewVideoAliasData, GetApiViewVideoAliasErrors, GetApiViewVideoAliasResponses, GetAssetByIdData, GetAssetByIdError, GetAssetByIdErrors, GetAssetByIdResponse, GetAssetByIdResponses, GetAssetTagHistogramData, GetAssetTagHistogramError, GetAssetTagHistogramErrors, GetAssetTagHistogramResponse, GetAssetTagHistogramResponses, GetBillingBalanceData, GetBillingBalanceError, GetBillingBalanceErrors, GetBillingBalanceResponse, GetBillingBalanceResponses, GetBillingEventsData, GetBillingEventsError, GetBillingEventsErrors, GetBillingEventsResponse, GetBillingEventsResponses, GetBillingOpStatusData, GetBillingOpStatusError, GetBillingOpStatusErrors, GetBillingOpStatusResponse, GetBillingOpStatusResponses, GetBillingPlansData, GetBillingPlansError, GetBillingPlansErrors, GetBillingPlansResponse, GetBillingPlansResponses, GetBillingStatusData, GetBillingStatusError, GetBillingStatusErrors, GetBillingStatusResponse, GetBillingStatusResponses, GetCustomNodeProxyData, GetCustomNodeProxyErrors, GetCustomNodeProxyResponses, GetDeletionRequestData, GetDeletionRequestError, GetDeletionRequestErrors, GetDeletionRequestResponse, GetDeletionRequestResponses, GetExtensionsData, GetExtensionsResponse, GetExtensionsResponses, GetFeaturesData, GetFeaturesResponse, GetFeaturesResponses, GetFilesData, GetFilesError, GetFilesErrors, GetFilesResponse, GetFilesResponses, GetGlobalSubgraphData, GetGlobalSubgraphError, GetGlobalSubgraphErrors, GetGlobalSubgraphResponse, GetGlobalSubgraphResponses, GetGlobalSubgraphsData, GetGlobalSubgraphsError, GetGlobalSubgraphsErrors, GetGlobalSubgraphsResponse, GetGlobalSubgraphsResponses, GetHealthData, GetHealthError, GetHealthErrors, GetHealthResponse, GetHealthResponses, GetHistoryData, GetHistoryError, GetHistoryErrors, GetHistoryForPromptData, GetHistoryForPromptError, GetHistoryForPromptErrors, GetHistoryForPromptResponse, GetHistoryForPromptResponses, GetHistoryResponse, GetHistoryResponses, GetHubProfileByUsernameData, GetHubProfileByUsernameError, GetHubProfileByUsernameErrors, GetHubProfileByUsernameResponse, GetHubProfileByUsernameResponses, GetHubWorkflowData, GetHubWorkflowError, GetHubWorkflowErrors, GetHubWorkflowResponse, GetHubWorkflowResponses, GetJobDetailData, GetJobDetailError, GetJobDetailErrors, GetJobDetailResponse, GetJobDetailResponses, GetJobStatusData, GetJobStatusError, GetJobStatusErrors, GetJobStatusResponse, GetJobStatusResponses, GetJwksData, GetJwksResponse, GetJwksResponses, GetLegacyAssetContentData, GetLegacyAssetContentErrors, GetLegacyHistoryByIdData, GetLegacyHistoryByIdErrors, GetLegacyHistoryData, GetLegacyHistoryErrors, GetLegacyJobByIdData, GetLegacyJobByIdErrors, GetLegacyJobOutputsData, GetLegacyJobOutputsErrors, GetLegacyModelsByFolderData, GetLegacyModelsByFolderErrors, GetLegacyModelsData, GetLegacyModelsErrors, GetLegacyObjectInfoByNodeClassData, GetLegacyObjectInfoByNodeClassErrors, GetLegacyPromptByIdData, GetLegacyPromptByIdErrors, GetLegacyUserdataV2Data, GetLegacyUserdataV2Errors, GetLegacyViewMetadataData, GetLegacyViewMetadataErrors, GetLogsData, GetLogsError, GetLogsErrors, GetLogsResponse, GetLogsResponses, GetMaskLayersData, GetMaskLayersError, GetMaskLayersErrors, GetMaskLayersResponse, GetMaskLayersResponses, GetModelFoldersData, GetModelFoldersError, GetModelFoldersErrors, GetModelFoldersResponse, GetModelFoldersResponses, GetModelPreviewData, GetModelPreviewError, GetModelPreviewErrors, GetModelPreviewResponse, GetModelPreviewResponses, GetModelsInFolderData, GetModelsInFolderError, GetModelsInFolderErrors, GetModelsInFolderResponse, GetModelsInFolderResponses, GetMonitoringTasksData, GetMonitoringTasksErrors, GetMonitoringTasksResponses, GetMonitoringTasksSubpathData, GetMonitoringTasksSubpathErrors, GetMonitoringTasksSubpathResponses, GetMyHubProfileData, GetMyHubProfileError, GetMyHubProfileErrors, GetMyHubProfileResponse, GetMyHubProfileResponses, GetNodeByIdData, GetNodeByIdErrors, GetNodeByIdResponses, GetNodeInfoData, GetNodeInfoResponse, GetNodeInfoResponses, GetNodeInfoSchemaData, GetNodeInfoSchemaResponses, GetNodeReplacementsData, GetNodeReplacementsError, GetNodeReplacementsErrors, GetNodeReplacementsResponse, GetNodeReplacementsResponses, GetOAuthAuthorizationServerData, GetOAuthAuthorizationServerError, GetOAuthAuthorizationServerErrors, GetOAuthAuthorizationServerResponse, GetOAuthAuthorizationServerResponses, GetOAuthAuthorizeData, GetOAuthAuthorizeError, GetOAuthAuthorizeErrors, GetOAuthAuthorizeResponse, GetOAuthAuthorizeResponses, GetOAuthProtectedResourceData, GetOAuthProtectedResourceError, GetOAuthProtectedResourceErrors, GetOAuthProtectedResourceResponse, GetOAuthProtectedResourceResponses, GetPaymentPortalData, GetPaymentPortalError, GetPaymentPortalErrors, GetPaymentPortalResponse, GetPaymentPortalResponses, GetPprofData, GetPprofProfileData, GetPprofProfileResponses, GetPprofResponses, GetPprofTraceData, GetPprofTraceResponses, GetPromptInfoData, GetPromptInfoError, GetPromptInfoErrors, GetPromptInfoResponse, GetPromptInfoResponses, GetPublishedWorkflowData, GetPublishedWorkflowError, GetPublishedWorkflowErrors, GetPublishedWorkflowResponse, GetPublishedWorkflowResponses, GetQueueInfoData, GetQueueInfoError, GetQueueInfoErrors, GetQueueInfoResponse, GetQueueInfoResponses, GetRemoteAssetMetadataData, GetRemoteAssetMetadataError, GetRemoteAssetMetadataErrors, GetRemoteAssetMetadataResponse, GetRemoteAssetMetadataResponses, GetSecretData, GetSecretError, GetSecretErrors, GetSecretResponse, GetSecretResponses, GetSettingByIdData, GetSettingByIdError, GetSettingByIdErrors, GetSettingByIdResponse, GetSettingByIdResponses, GetStaticExtensionsData, GetStaticExtensionsErrors, GetStaticExtensionsResponses, GetSystemStatsData, GetSystemStatsError, GetSystemStatsErrors, GetSystemStatsResponse, GetSystemStatsResponses, GetTaskData, GetTaskError, GetTaskErrors, GetTaskResponse, GetTaskResponses, GetTemplateProxyData, GetTemplateProxyErrors, GetTemplateProxyResponses, GetUserData, GetUserdataData, GetUserdataError, GetUserdataErrors, GetUserdataFileData, GetUserdataFileError, GetUserdataFileErrors, GetUserdataFilePublishData, GetUserdataFilePublishError, GetUserdataFilePublishErrors, GetUserdataFilePublishResponse, GetUserdataFilePublishResponses, GetUserdataFileResponse, GetUserdataFileResponses, GetUserdataResponse, GetUserDataResponseFull, GetUserDataResponseFullFile, GetUserdataResponses, GetUserError, GetUserErrors, GetUserResponse, GetUserResponses, GetUsersInfoData, GetUsersInfoError, GetUsersInfoErrors, GetUsersInfoResponse, GetUsersInfoResponses, GetVhsQueryVideoData, GetVhsQueryVideoError, GetVhsQueryVideoErrors, GetVhsQueryVideoResponse, GetVhsQueryVideoResponses, GetVhsViewAudioData, GetVhsViewAudioErrors, GetVhsViewAudioResponses, GetVhsViewVideoData, GetVhsViewVideoErrors, GetVhsViewVideoResponses, GetViewCompatAliasData, GetViewCompatAliasErrors, GetViewCompatAliasResponses, GetWebsocketData, GetWebsocketErrors, GetWorkflowContentData, GetWorkflowContentError, GetWorkflowContentErrors, GetWorkflowContentResponse, GetWorkflowContentResponses, GetWorkflowData, GetWorkflowError, GetWorkflowErrors, GetWorkflowResponse, GetWorkflowResponses, GetWorkflowTemplatesData, GetWorkflowTemplatesResponse, GetWorkflowTemplatesResponses, GetWorkspaceData, GetWorkspaceError, GetWorkspaceErrors, GetWorkspaceResponse, GetWorkspaceResponses, GlobalSubgraphData, GlobalSubgraphInfo, HistoryDetailEntry, HistoryDetailResponse, HistoryEntry, HistoryManageRequest, HistoryResponse, HubAssetUploadUrlRequest, HubAssetUploadUrlResponse, HubLabelInfo, HubLabelListResponse, HubProfile, HubProfileSummary, HubUsernameCheckResponse, HubWorkflowDetail, HubWorkflowListResponse, HubWorkflowStatus, HubWorkflowSummary, HubWorkflowTemplateEntry, ImportPublishedAssetsData, ImportPublishedAssetsError, ImportPublishedAssetsErrors, ImportPublishedAssetsRequest, ImportPublishedAssetsResponse, ImportPublishedAssetsResponse2, ImportPublishedAssetsResponses, InterruptJobData, InterruptJobError, InterruptJobErrors, InterruptJobResponses, JobCancelResponse, JobDetailResponse, JobEntry, JobsListResponse, JobStatusResponse, JwkKey, JwksResponse, LabelRef, LeaveWorkspaceData, LeaveWorkspaceError, LeaveWorkspaceErrors, LeaveWorkspaceResponse, LeaveWorkspaceResponses, ListAssetsData, ListAssetsError, ListAssetsErrors, ListAssetsResponse, ListAssetsResponse2, ListAssetsResponses, ListAssetsResponseWritable, ListHubLabelsData, ListHubLabelsError, ListHubLabelsErrors, ListHubLabelsResponse, ListHubLabelsResponses, ListHubWorkflowIndexData, ListHubWorkflowIndexError, ListHubWorkflowIndexErrors, ListHubWorkflowIndexResponse, ListHubWorkflowIndexResponses, ListHubWorkflowsData, ListHubWorkflowsError, ListHubWorkflowsErrors, ListHubWorkflowsResponse, ListHubWorkflowsResponses, ListInvitesResponse, ListJobsData, ListJobsError, ListJobsErrors, ListJobsResponse, ListJobsResponses, ListMembersResponse, ListSecretsData, ListSecretsError, ListSecretsErrors, ListSecretsResponse, ListSecretsResponses, ListTagsData, ListTagsError, ListTagsErrors, ListTagsResponse, ListTagsResponse2, ListTagsResponses, ListTasksData, ListTasksError, ListTasksErrors, ListTasksResponse, ListTasksResponses, ListWorkflowsData, ListWorkflowsError, ListWorkflowsErrors, ListWorkflowsResponse, ListWorkflowsResponses, ListWorkspaceApiKeysData, ListWorkspaceApiKeysError, ListWorkspaceApiKeysErrors, ListWorkspaceApiKeysResponse, ListWorkspaceApiKeysResponse2, ListWorkspaceApiKeysResponses, ListWorkspaceInvitesData, ListWorkspaceInvitesError, ListWorkspaceInvitesErrors, ListWorkspaceInvitesResponse, ListWorkspaceInvitesResponses, ListWorkspaceMembersData, ListWorkspaceMembersError, ListWorkspaceMembersErrors, ListWorkspaceMembersResponse, ListWorkspaceMembersResponses, ListWorkspacesData, ListWorkspacesError, ListWorkspacesErrors, ListWorkspacesResponse, ListWorkspacesResponse2, ListWorkspacesResponses, LogsResponse, ManageHistoryData, ManageHistoryError, ManageHistoryErrors, ManageHistoryResponses, ManageQueueData, ManageQueueError, ManageQueueErrors, ManageQueueResponse, ManageQueueResponses, Member, ModelFile, ModelFolder, MoveUserdataFileData, MoveUserdataFileError, MoveUserdataFileErrors, MoveUserdataFileResponse, MoveUserdataFileResponses, NodeInfo, OAuthAuthorizationServerMetadata, OAuthAuthorizeRedirectResponse, OAuthConsentChallenge, OAuthConsentChallengeWorkspace, OAuthProtectedResourceMetadata, OAuthRegisterBadRequestResponse, OAuthRegisterError, OAuthRegisterRequest, OAuthRegisterResponse, OAuthTokenError, OAuthTokenResponse, PaginationInfo, PartnerUsageRequest, PartnerUsageResponse, PaymentPortalRequest, PaymentPortalResponse, PendingInvite, Plan, PlanAvailability, PlanAvailabilityReason, PlanSeatSummary, PostAssetsFromWorkflowData, PostAssetsFromWorkflowError, PostAssetsFromWorkflowErrors, PostAssetsFromWorkflowResponse, PostAssetsFromWorkflowResponses, PostCustomNodeProxyData, PostCustomNodeProxyErrors, PostCustomNodeProxyResponses, PostMonitoringTasksSubpathData, PostMonitoringTasksSubpathErrors, PostMonitoringTasksSubpathResponses, PostOAuthAuthorizeData, PostOAuthAuthorizeError, PostOAuthAuthorizeErrors, PostOAuthAuthorizeResponse, PostOAuthAuthorizeResponses, PostOAuthRegisterData, PostOAuthRegisterError, PostOAuthRegisterErrors, PostOAuthRegisterResponse, PostOAuthRegisterResponses, PostOAuthTokenData, PostOAuthTokenError, PostOAuthTokenErrors, PostOAuthTokenResponse, PostOAuthTokenResponses, PostPprofSymbolData, PostPprofSymbolResponses, PostUserdataFileData, PostUserdataFileError, PostUserdataFileErrors, PostUserdataFilePublishData, PostUserdataFilePublishError, PostUserdataFilePublishErrors, PostUserdataFilePublishResponse, PostUserdataFilePublishResponses, PostUserdataFileResponse, PostUserdataFileResponses, PreviewPlanInfo, PreviewSubscribeData, PreviewSubscribeError, PreviewSubscribeErrors, PreviewSubscribeRequest, PreviewSubscribeResponse, PreviewSubscribeResponse2, PreviewSubscribeResponses, PromptErrorResponse, PromptInfo, PromptRequest, PromptResponse, PublishedWorkflowDetail, PublishHubWorkflowData, PublishHubWorkflowError, PublishHubWorkflowErrors, PublishHubWorkflowRequest, PublishHubWorkflowResponse, PublishHubWorkflowResponses, PublishWorkflowAssetsRequest, QueueInfo, QueueManageRequest, QueueManageResponse, RemoveAssetTagsData, RemoveAssetTagsError, RemoveAssetTagsErrors, RemoveAssetTagsResponse, RemoveAssetTagsResponses, RemoveWorkspaceMemberData, RemoveWorkspaceMemberError, RemoveWorkspaceMemberErrors, RemoveWorkspaceMemberResponse, RemoveWorkspaceMemberResponses, ReportPartnerUsageData, ReportPartnerUsageError, ReportPartnerUsageErrors, ReportPartnerUsageResponse, ReportPartnerUsageResponses, ResubscribeData, ResubscribeError, ResubscribeErrors, ResubscribeRequest, ResubscribeResponse, ResubscribeResponse2, ResubscribeResponses, RevokeWorkspaceApiKeyData, RevokeWorkspaceApiKeyError, RevokeWorkspaceApiKeyErrors, RevokeWorkspaceApiKeyResponse, RevokeWorkspaceApiKeyResponses, RevokeWorkspaceInviteData, RevokeWorkspaceInviteError, RevokeWorkspaceInviteErrors, RevokeWorkspaceInviteResponse, RevokeWorkspaceInviteResponses, SecretListResponse, SecretResponse, SetReviewStatusData, SetReviewStatusError, SetReviewStatusErrors, SetReviewStatusRequest, SetReviewStatusResponse, SetReviewStatusResponse2, SetReviewStatusResponses, SubmitFeedbackData, SubmitFeedbackError, SubmitFeedbackErrors, SubmitFeedbackResponse, SubmitFeedbackResponses, SubscribeData, SubscribeError, SubscribeErrors, SubscribeRequest, SubscribeResponse, SubscribeResponse2, SubscribeResponses, SubscriptionDuration, SubscriptionTier, SyncApiKeyData, SyncApiKeyError, SyncApiKeyErrors, SyncApiKeyRequest, SyncApiKeyResponse, SyncApiKeyResponse2, SyncApiKeyResponses, SystemStatsResponse, TagInfo, TagsModificationResponse, TaskEntry, TaskResponse, TasksListResponse, UpdateAssetData, UpdateAssetError, UpdateAssetErrors, UpdateAssetResponse, UpdateAssetResponses, UpdateAssetTagsData, UpdateAssetTagsError, UpdateAssetTagsErrors, UpdateAssetTagsResponse, UpdateAssetTagsResponses, UpdateHubProfileData, UpdateHubProfileError, UpdateHubProfileErrors, UpdateHubProfileRequest, UpdateHubProfileResponse, UpdateHubProfileResponses, UpdateHubWorkflowData, UpdateHubWorkflowError, UpdateHubWorkflowErrors, UpdateHubWorkflowRequest, UpdateHubWorkflowResponse, UpdateHubWorkflowResponses, UpdateMultipleSettingsData, UpdateMultipleSettingsError, UpdateMultipleSettingsErrors, UpdateMultipleSettingsResponse, UpdateMultipleSettingsResponses, UpdateSecretData, UpdateSecretError, UpdateSecretErrors, UpdateSecretRequest, UpdateSecretResponse, UpdateSecretResponses, UpdateSettingByIdData, UpdateSettingByIdError, UpdateSettingByIdErrors, UpdateSettingByIdResponse, UpdateSettingByIdResponses, UpdateSubscriptionCacheData, UpdateSubscriptionCacheError, UpdateSubscriptionCacheErrors, UpdateSubscriptionCacheResponse, UpdateSubscriptionCacheResponses, UpdateWorkflowData, UpdateWorkflowError, UpdateWorkflowErrors, UpdateWorkflowRequest, UpdateWorkflowResponse, UpdateWorkflowResponses, UpdateWorkspaceData, UpdateWorkspaceError, UpdateWorkspaceErrors, UpdateWorkspaceRequest, UpdateWorkspaceResponse, UpdateWorkspaceResponses, UploadAssetData, UploadAssetError, UploadAssetErrors, UploadAssetResponse, UploadAssetResponses, UploadImageData, UploadImageError, UploadImageErrors, UploadImageResponse, UploadImageResponses, UploadMaskData, UploadMaskError, UploadMaskErrors, UploadMaskResponse, UploadMaskResponses, UserDataResponseFull, UserResponse, ValidationError, ValidationResult, VerifyApiKeyRequest, VerifyApiKeyResponse, VerifyWorkspaceApiKeyData, VerifyWorkspaceApiKeyError, VerifyWorkspaceApiKeyErrors, VerifyWorkspaceApiKeyResponse, VerifyWorkspaceApiKeyResponses, ViewFileData, ViewFileError, ViewFileErrors, ViewFileResponse, ViewFileResponses, WorkflowApiAssetsRequest, WorkflowApiAssetsResponse, WorkflowForkedFrom, WorkflowListResponse, WorkflowPublishInfo, WorkflowResponse, WorkflowVersionContentResponse, WorkflowVersionResponse, Workspace, WorkspaceApiKeyInfo, WorkspaceSummary, WorkspaceWithRole } from './types.gen'; diff --git a/packages/ingest-types/src/types.gen.ts b/packages/ingest-types/src/types.gen.ts index c0cf784658..491cb4b8a6 100644 --- a/packages/ingest-types/src/types.gen.ts +++ b/packages/ingest-types/src/types.gen.ts @@ -1,63 +1,63 @@ // This file is auto-generated by @hey-api/openapi-ts export type ClientOptions = { - baseUrl: `${string}://${string}` | (string & {}) -} + baseUrl: `${string}://${string}` | (string & {}); +}; /** * Response indicating whether a Hub username is available. */ export type HubUsernameCheckResponse = { - /** - * The username that was checked. - */ - username: string - /** - * Whether the username is available for the caller's workspace. - */ - available: boolean - /** - * Up to 5 available alternative usernames (only present when unavailable). - */ - suggestions?: Array - /** - * If the username format is invalid, describes the format requirement. - */ - validation_error?: string -} + /** + * The username that was checked. + */ + username: string; + /** + * Whether the username is available for the caller's workspace. + */ + available: boolean; + /** + * Up to 5 available alternative usernames (only present when unavailable). + */ + suggestions?: Array; + /** + * If the username format is invalid, describes the format requirement. + */ + validation_error?: string; +}; /** * Response containing a signed upload URL and the target asset path. */ export type HubAssetUploadUrlResponse = { - /** - * Presigned R2 URL for uploading the file via PUT. - */ - upload_url: string - /** - * The public URL where the file will be accessible after upload. - */ - public_url: string - /** - * Signed token to pass in the publish request. Has a server-determined TTL. - */ - token: string -} + /** + * Presigned R2 URL for uploading the file via PUT. + */ + upload_url: string; + /** + * The public URL where the file will be accessible after upload. + */ + public_url: string; + /** + * Signed token to pass in the publish request. Has a server-determined TTL. + */ + token: string; +}; /** * Request body for requesting a signed upload URL for a Hub asset. */ export type HubAssetUploadUrlRequest = { - /** - * Original filename for display purposes. Not used in the storage key. - */ - filename: string - /** - * MIME type of the file (e.g. "image/jpeg", "video/mp4"). Validated against a whitelist; the canonical file extension is derived from this value. - * - */ - content_type: string -} + /** + * Original filename for display purposes. Not used in the storage key. + */ + filename: string; + /** + * MIME type of the file (e.g. "image/jpeg", "video/mp4"). Validated against a whitelist; the canonical file extension is derived from this value. + * + */ + content_type: string; +}; /** * Partial update for a published hub workflow (admin moderation). All fields are optional. Semantics match UpdateHubProfileRequest / avatar_token: @@ -72,1709 +72,1940 @@ export type HubAssetUploadUrlRequest = { * */ export type UpdateHubWorkflowRequest = { - /** - * Display name. Not clearable. Null/omit leaves unchanged; empty string is invalid. - */ - name?: string | null - /** - * Workflow description. Send "" to clear. Null/omit leaves unchanged. - */ - description?: string | null - /** - * Full replacement of tag slugs. Must exist in hub_labels. Send [] to clear. Null/omit leaves unchanged. - */ - tags?: Array | null - /** - * Full replacement of model slugs. Must exist in hub_labels. Send [] to clear. Null/omit leaves unchanged. - */ - models?: Array | null - /** - * Full replacement of custom_node slugs. Must exist in hub_labels. Send [] to clear. Null/omit leaves unchanged. - */ - custom_nodes?: Array | null - /** - * Tutorial URL. Send "" to clear. Null/omit leaves unchanged. - */ - tutorial_url?: string | null - /** - * Thumbnail kind. Null/omit leaves unchanged; not clearable via this endpoint. If set to image_comparison, both the thumbnail and comparison thumbnail must resolve to a value on the stored record after this update is applied (either already present and not being cleared, or supplied as a token in this request). - * - */ - thumbnail_type?: 'image' | 'video' | 'image_comparison' - /** - * Token from POST /api/hub/assets/upload-url for a newly uploaded thumbnail. Null/omit leaves the existing thumbnail unchanged. Send "" to clear. (PATCH does not accept an existing public URL here — to keep the current thumbnail, simply omit the field.) - * - */ - thumbnail_token?: string | null - /** - * Token from POST /api/hub/assets/upload-url for a newly uploaded comparison thumbnail. Null/omit leaves unchanged. Send "" to clear. (PATCH does not accept an existing public URL here — to keep the current comparison thumbnail, simply omit the field.) - * - */ - thumbnail_comparison_token?: string | null - /** - * Full replacement of sample images. Each element is either a token from /api/hub/assets/upload-url or an existing public URL. Send [] to clear. Null/omit leaves unchanged. - * - */ - sample_image_tokens_or_urls?: Array | null - /** - * Admin-only full replacement of the hub_workflow_detail.metadata JSON object. Null/omit leaves unchanged. Send {} to clear all keys. Accepts arbitrary JSON (size, vram, open_source, media_type, logos, etc.). - * - */ - metadata?: { - [key: string]: unknown - } | null -} + /** + * Display name. Not clearable. Null/omit leaves unchanged; empty string is invalid. + */ + name?: string | null; + /** + * Workflow description. Send "" to clear. Null/omit leaves unchanged. + */ + description?: string | null; + /** + * Full replacement of tag slugs. Must exist in hub_labels. Send [] to clear. Null/omit leaves unchanged. + */ + tags?: Array | null; + /** + * Full replacement of model slugs. Must exist in hub_labels. Send [] to clear. Null/omit leaves unchanged. + */ + models?: Array | null; + /** + * Full replacement of custom_node slugs. Must exist in hub_labels. Send [] to clear. Null/omit leaves unchanged. + */ + custom_nodes?: Array | null; + /** + * Tutorial URL. Send "" to clear. Null/omit leaves unchanged. + */ + tutorial_url?: string | null; + /** + * Thumbnail kind. Null/omit leaves unchanged; not clearable via this endpoint. If set to image_comparison, both the thumbnail and comparison thumbnail must resolve to a value on the stored record after this update is applied (either already present and not being cleared, or supplied as a token in this request). + * + */ + thumbnail_type?: 'image' | 'video' | 'image_comparison'; + /** + * Token from POST /api/hub/assets/upload-url for a newly uploaded thumbnail. Null/omit leaves the existing thumbnail unchanged. Send "" to clear. (PATCH does not accept an existing public URL here — to keep the current thumbnail, simply omit the field.) + * + */ + thumbnail_token?: string | null; + /** + * Token from POST /api/hub/assets/upload-url for a newly uploaded comparison thumbnail. Null/omit leaves unchanged. Send "" to clear. (PATCH does not accept an existing public URL here — to keep the current comparison thumbnail, simply omit the field.) + * + */ + thumbnail_comparison_token?: string | null; + /** + * Full replacement of sample images. Each element is either a token from /api/hub/assets/upload-url or an existing public URL. Send [] to clear. Null/omit leaves unchanged. + * + */ + sample_image_tokens_or_urls?: Array | null; + /** + * Admin-only full replacement of the hub_workflow_detail.metadata JSON object. Null/omit leaves unchanged. Send {} to clear all keys. Accepts arbitrary JSON (size, vram, open_source, media_type, logos, etc.). + * + */ + metadata?: { + [key: string]: unknown; + } | null; +}; /** * Request body for publishing or updating a workflow on the Hub. */ export type PublishHubWorkflowRequest = { - /** - * Username of the hub profile to publish under. The authenticated user must belong to the workspace that owns this profile. - */ - username: string - /** - * Display name for the published workflow on the hub. - */ - name: string - /** - * Userdata path of the workflow file (e.g. "workflows/my-flow.json"). - */ - workflow_filename: string - /** - * IDs of assets (inputs and models) to snapshot. - */ - asset_ids: Array - /** - * Workflow description for the hub listing. - */ - description?: string - /** - * Searchable tag slugs. Must exist in hub_labels. - */ - tags?: Array - /** - * Model slugs. Must exist in hub_labels. - */ - models?: Array - /** - * Custom node slugs. Must exist in hub_labels. - */ - custom_nodes?: Array - /** - * URL to a tutorial for this workflow. - */ - tutorial_url?: string - /** - * Arbitrary metadata (size, vram, open_source, etc.). Reserved keys (extended_description, meta_description, how_to_use, suggested_use_cases, faq_items, content_template) are backend-managed and will be stripped if supplied. - */ - metadata?: { - [key: string]: unknown - } - thumbnail_type?: 'image' | 'video' | 'image_comparison' - /** - * Token (from /api/hub/assets/upload-url) for a new upload, or an existing public URL from the previous published version. Omit to have no thumbnail. - * - */ - thumbnail_token_or_url?: string - /** - * Token or existing public URL from the previous published version. Omit to have no comparison image. - * - */ - thumbnail_comparison_token_or_url?: string - /** - * Array of tokens or existing public URLs from the previous published version. Full replacement (PUT semantics). Omit or pass [] to have no sample images. - * - */ - sample_image_tokens_or_urls?: Array -} + /** + * Username of the hub profile to publish under. The authenticated user must belong to the workspace that owns this profile. + */ + username: string; + /** + * Display name for the published workflow on the hub. + */ + name: string; + /** + * Userdata path of the workflow file (e.g. "workflows/my-flow.json"). + */ + workflow_filename: string; + /** + * IDs of assets (inputs and models) to snapshot. + */ + asset_ids: Array; + /** + * Workflow description for the hub listing. + */ + description?: string; + /** + * Searchable tag slugs. Must exist in hub_labels. + */ + tags?: Array; + /** + * Model slugs. Must exist in hub_labels. + */ + models?: Array; + /** + * Custom node slugs. Must exist in hub_labels. + */ + custom_nodes?: Array; + /** + * URL to a tutorial for this workflow. + */ + tutorial_url?: string; + /** + * Arbitrary metadata (size, vram, open_source, etc.). Reserved keys (extended_description, meta_description, how_to_use, suggested_use_cases, faq_items, content_template) are backend-managed and will be stripped if supplied. + */ + metadata?: { + [key: string]: unknown; + }; + thumbnail_type?: 'image' | 'video' | 'image_comparison'; + /** + * Token (from /api/hub/assets/upload-url) for a new upload, or an existing public URL from the previous published version. Omit to have no thumbnail. + * + */ + thumbnail_token_or_url?: string; + /** + * Token or existing public URL from the previous published version. Omit to have no comparison image. + * + */ + thumbnail_comparison_token_or_url?: string; + /** + * Array of tokens or existing public URLs from the previous published version. Full replacement (PUT semantics). Omit or pass [] to have no sample images. + * + */ + sample_image_tokens_or_urls?: Array; +}; /** * Paginated list of Hub workflows matching search criteria. */ export type HubWorkflowListResponse = { - /** - * Array of HubWorkflowSummary (default) or HubWorkflowDetail (when detail=true). - */ - workflows: Array - /** - * Cursor for the next page, empty if no more results. - */ - next_cursor?: string -} + /** + * Array of HubWorkflowSummary (default) or HubWorkflowDetail (when detail=true). + */ + workflows: Array; + /** + * Cursor for the next page, empty if no more results. + */ + next_cursor?: string; +}; /** * Lightweight asset reference used in workflow publishing payloads. */ export type AssetInfo = { - /** - * Asset identifier. - */ - id: string - name: string - /** - * Signed URL for previewing the asset. - */ - preview_url: string - storage_url: string - /** - * Whether this asset is a model. - */ - model: boolean - /** - * Whether this is a public (platform-provided) asset. - */ - public: boolean - /** - * Whether the caller already owns this asset. - */ - in_library: boolean -} + /** + * Asset identifier. + */ + id: string; + name: string; + /** + * Signed URL for previewing the asset. + */ + preview_url: string; + storage_url: string; + /** + * Whether this asset is a model. + */ + model: boolean; + /** + * Whether this is a public (platform-provided) asset. + */ + public: boolean; + /** + * Whether the caller already owns this asset. + */ + in_library: boolean; +}; /** * Full Hub workflow detail including versions, assets, and statistics. */ export type HubWorkflowDetail = { - share_id: string - workflow_id: string - name: string - status: HubWorkflowStatus - description?: string - tags?: Array - thumbnail_type?: 'image' | 'video' | 'image_comparison' - thumbnail_url?: string - thumbnail_comparison_url?: string - models?: Array - custom_nodes?: Array - tutorial_url?: string - metadata?: { - [key: string]: unknown - } - sample_image_urls?: Array - publish_time?: string | null - workflow_json: { - [key: string]: unknown - } - /** - * Published assets. Each asset's id is the published asset ID (not the original private asset ID). - */ - assets: Array - profile: HubProfileSummary -} + share_id: string; + workflow_id: string; + name: string; + status: HubWorkflowStatus; + description?: string; + tags?: Array; + thumbnail_type?: 'image' | 'video' | 'image_comparison'; + thumbnail_url?: string; + thumbnail_comparison_url?: string; + models?: Array; + custom_nodes?: Array; + tutorial_url?: string; + metadata?: { + [key: string]: unknown; + }; + sample_image_urls?: Array; + publish_time?: string | null; + workflow_json: { + [key: string]: unknown; + }; + /** + * Published assets. Each asset's id is the published asset ID (not the original private asset ID). + */ + assets: Array; + profile: HubProfileSummary; +}; /** * Abbreviated Hub profile used in workflow listings. */ export type HubProfileSummary = { - username: string - display_name?: string - /** - * Public URL of the profile avatar image. - */ - avatar_url?: string -} + username: string; + display_name?: string; + /** + * Public URL of the profile avatar image. + */ + avatar_url?: string; +}; /** * Reference to a Hub label by ID. */ export type LabelRef = { - /** - * Slug identifier (e.g. "video-generation", "flux"). - */ - name: string - /** - * Human-readable display name (e.g. "Video Generation", "Flux"). - */ - display_name: string -} + /** + * Slug identifier (e.g. "video-generation", "flux"). + */ + name: string; + /** + * Human-readable display name (e.g. "Video Generation", "Flux"). + */ + display_name: string; +}; /** * Public workflow status. NULL in the database is represented as pending in API responses. */ -export type HubWorkflowStatus = - | 'pending' - | 'approved' - | 'rejected' - | 'deprecated' +export type HubWorkflowStatus = 'pending' | 'approved' | 'rejected' | 'deprecated'; /** * Abbreviated Hub workflow metadata used in search and listing results. */ export type HubWorkflowSummary = { - share_id: string - name: string - status: HubWorkflowStatus - description?: string - tags?: Array - models?: Array - custom_nodes?: Array - thumbnail_type?: 'image' | 'video' | 'image_comparison' - thumbnail_url?: string - thumbnail_comparison_url?: string - publish_time?: string | null - profile: HubProfileSummary - metadata?: { - [key: string]: unknown - } - tutorial_url?: string - sample_image_urls?: Array -} + share_id: string; + name: string; + status: HubWorkflowStatus; + description?: string; + tags?: Array; + models?: Array; + custom_nodes?: Array; + thumbnail_type?: 'image' | 'video' | 'image_comparison'; + thumbnail_url?: string; + thumbnail_comparison_url?: string; + publish_time?: string | null; + profile: HubProfileSummary; + metadata?: { + [key: string]: unknown; + }; + tutorial_url?: string; + sample_image_urls?: Array; +}; /** * Metadata for a single Hub label. */ export type HubLabelInfo = { - /** - * Slug identifier. - */ - name: string - /** - * Human-readable display name. - */ - display_name: string - /** - * Optional description of the label. - */ - description?: string - /** - * Label category. - */ - type: 'tag' | 'model' | 'custom_node' -} + /** + * Slug identifier. + */ + name: string; + /** + * Human-readable display name. + */ + display_name: string; + /** + * Optional description of the label. + */ + description?: string; + /** + * Label category. + */ + type: 'tag' | 'model' | 'custom_node'; +}; /** * List of available Hub labels for categorizing workflows. */ export type HubLabelListResponse = { - /** - * Available labels filtered by type (or all if no type specified). - */ - labels: Array -} + /** + * Available labels filtered by type (or all if no type specified). + */ + labels: Array; +}; /** * Entry in the curated workflow template gallery shown on the home page. */ export type HubWorkflowTemplateEntry = { - /** - * Slug identifier for the template - */ - name: string - title: string - status: HubWorkflowStatus - description?: string - tags?: Array - models?: Array - requiresCustomNodes?: Array - thumbnailVariant?: string - mediaType?: string - mediaSubtype?: string - /** - * Workflow asset size in bytes. - */ - size?: number - /** - * Approximate VRAM requirement in bytes. - */ - vram?: number - /** - * Usage count reported upstream. - */ - usage?: number - /** - * Search ranking score reported upstream. - */ - searchRank?: number - /** - * Whether the template belongs to a module marked as essential. - */ - isEssential?: boolean - openSource?: boolean - profile?: HubProfileSummary - tutorialUrl?: string - logos?: Array<{ - [key: string]: unknown - }> - /** - * Publication date in YYYY-MM-DD format - */ - date?: string - io?: { - inputs?: Array<{ - [key: string]: unknown - }> - outputs?: Array<{ - [key: string]: unknown - }> - } - includeOnDistributions?: Array - /** - * Public URL of the primary thumbnail - */ - thumbnailUrl?: string - /** - * Public URL of the comparison thumbnail - */ - thumbnailComparisonUrl?: string - /** - * Share ID for linking to the hub workflow detail - */ - shareId?: string - /** - * AI-generated extended description of the workflow - */ - extendedDescription?: string - /** - * AI-generated SEO meta description (under 160 chars) - */ - metaDescription?: string - /** - * AI-generated step-by-step usage instructions - */ - howToUse?: Array - /** - * AI-generated suggested use cases - */ - suggestedUseCases?: Array - /** - * AI-generated FAQ items - */ - faqItems?: Array<{ - question: string - answer: string - }> - /** - * Content template used for generation (tutorial, showcase, comparison, breakthrough) - */ - contentTemplate?: string -} + /** + * Slug identifier for the template + */ + name: string; + title: string; + status: HubWorkflowStatus; + description?: string; + tags?: Array; + models?: Array; + requiresCustomNodes?: Array; + thumbnailVariant?: string; + mediaType?: string; + mediaSubtype?: string; + /** + * Workflow asset size in bytes. + */ + size?: number; + /** + * Approximate VRAM requirement in bytes. + */ + vram?: number; + /** + * Usage count reported upstream. + */ + usage?: number; + /** + * Search ranking score reported upstream. + */ + searchRank?: number; + /** + * Whether the template belongs to a module marked as essential. + */ + isEssential?: boolean; + openSource?: boolean; + profile?: HubProfileSummary; + tutorialUrl?: string; + logos?: Array<{ + [key: string]: unknown; + }>; + /** + * Publication date in YYYY-MM-DD format + */ + date?: string; + io?: { + inputs?: Array<{ + [key: string]: unknown; + }>; + outputs?: Array<{ + [key: string]: unknown; + }>; + }; + includeOnDistributions?: Array; + /** + * Public URL of the primary thumbnail + */ + thumbnailUrl?: string; + /** + * Public URL of the comparison thumbnail + */ + thumbnailComparisonUrl?: string; + /** + * Share ID for linking to the hub workflow detail + */ + shareId?: string; + /** + * AI-generated extended description of the workflow + */ + extendedDescription?: string; + /** + * AI-generated SEO meta description (under 160 chars) + */ + metaDescription?: string; + /** + * AI-generated step-by-step usage instructions + */ + howToUse?: Array; + /** + * AI-generated suggested use cases + */ + suggestedUseCases?: Array; + /** + * AI-generated FAQ items + */ + faqItems?: Array<{ + question: string; + answer: string; + }>; + /** + * Content template used for generation (tutorial, showcase, comparison, breakthrough) + */ + contentTemplate?: string; +}; /** * Request body for updating an existing Hub profile. */ export type UpdateHubProfileRequest = { - display_name?: string - description?: string - /** - * Token (from /api/hub/assets/upload-url) for a new avatar image. Omit or send null to leave unchanged; send empty string "" to remove. - * - */ - avatar_token?: string | null - /** - * List of website URLs. - */ - website_urls?: Array -} + display_name?: string; + description?: string; + /** + * Token (from /api/hub/assets/upload-url) for a new avatar image. Omit or send null to leave unchanged; send empty string "" to remove. + * + */ + avatar_token?: string | null; + /** + * List of website URLs. + */ + website_urls?: Array; +}; /** * Request body for creating a new Hub profile. */ export type CreateHubProfileRequest = { - /** - * ID of the workspace to create the hub profile for. The authenticated user must belong to this workspace. - */ - workspace_id: string - /** - * Unique URL-safe slug for the hub profile. Immutable after creation. - */ - username: string - display_name?: string - description?: string - /** - * Token (from /api/hub/assets/upload-url) for an avatar image. Omit to have no avatar. - * - */ - avatar_token?: string - /** - * List of website URLs. - */ - website_urls?: Array -} + /** + * ID of the workspace to create the hub profile for. The authenticated user must belong to this workspace. + */ + workspace_id: string; + /** + * Unique URL-safe slug for the hub profile. Immutable after creation. + */ + username: string; + display_name?: string; + description?: string; + /** + * Token (from /api/hub/assets/upload-url) for an avatar image. Omit to have no avatar. + * + */ + avatar_token?: string; + /** + * List of website URLs. + */ + website_urls?: Array; +}; /** * Full public profile for a Hub creator. */ export type HubProfile = { - username: string - display_name?: string - description?: string - /** - * Public URL of the profile avatar image. - */ - avatar_url?: string - /** - * List of website URLs. - */ - website_urls?: Array -} + username: string; + display_name?: string; + description?: string; + /** + * Public URL of the profile avatar image. + */ + avatar_url?: string; + /** + * List of website URLs. + */ + website_urls?: Array; +}; /** * Response after importing published workflow assets. */ export type ImportPublishedAssetsResponse = { - assets: Array -} + assets: Array; +}; /** * Request body for importing assets from a published workflow. */ export type ImportPublishedAssetsRequest = { - /** - * IDs of published assets (inputs and models) to import. - */ - published_asset_ids: Array - /** - * Optional. Share ID of the published workflow these assets belong to. - * When provided (non-null, non-empty): all published_asset_ids must - * belong to this share's workflow version; returns - * 400/CodeInvalidAssets if the share is not found or any asset does - * not belong to it. - * When omitted, null, or empty string: no share-scoped validation is - * performed and the assets are validated only against global rules - * (legacy behaviour, preserved for clients that have not yet adopted - * share_id). - * - */ - share_id?: string | null -} + /** + * IDs of published assets (inputs and models) to import. + */ + published_asset_ids: Array; + /** + * Optional. Share ID of the published workflow these assets belong to. + * When provided (non-null, non-empty): all published_asset_ids must + * belong to this share's workflow version; returns + * 400/CodeInvalidAssets if the share is not found or any asset does + * not belong to it. + * When omitted, null, or empty string: no share-scoped validation is + * performed and the assets are validated only against global rules + * (legacy behaviour, preserved for clients that have not yet adopted + * share_id). + * + */ + share_id?: string | null; +}; /** * Full detail of a publicly published workflow on the Hub. */ export type PublishedWorkflowDetail = { - share_id: string - workflow_id: string - /** - * Human-readable workflow name. - */ - name: string - listed: boolean - publish_time?: string | null - /** - * The workflow JSON content at publish time. - */ - workflow_json: { - [key: string]: unknown - } - /** - * Published assets with their library status for the caller. - */ - assets: Array -} + share_id: string; + workflow_id: string; + /** + * Human-readable workflow name. + */ + name: string; + listed: boolean; + publish_time?: string | null; + /** + * The workflow JSON content at publish time. + */ + workflow_json: { + [key: string]: unknown; + }; + /** + * Published assets with their library status for the caller. + */ + assets: Array; +}; /** * Response containing assets associated with a workflow. */ export type WorkflowApiAssetsResponse = { - assets: Array -} + assets: Array; +}; /** * Request body for querying assets associated with a workflow. */ export type WorkflowApiAssetsRequest = { - workflow_api_json: { - [key: string]: unknown - } -} + workflow_api_json: { + [key: string]: unknown; + }; +}; /** * Request body for publishing workflow assets to the Hub. */ export type PublishWorkflowAssetsRequest = { - /** - * IDs of assets (inputs and models) to snapshot. - */ - asset_ids: Array -} + /** + * IDs of assets (inputs and models) to snapshot. + */ + asset_ids: Array; +}; /** * Publishing metadata for a workflow shared to the Hub. */ export type WorkflowPublishInfo = { - workflow_id: string - share_id: string - publish_time?: string | null - listed: boolean - /** - * Published assets (inputs and models). - */ - assets: Array -} + workflow_id: string; + share_id: string; + publish_time?: string | null; + listed: boolean; + /** + * Published assets (inputs and models). + */ + assets: Array; +}; /** * Request body for forking an existing workflow into the user's account. */ export type ForkWorkflowRequest = { - /** - * Version number to fork from - */ - source_version: number - /** - * Name for the forked workflow - */ - name?: string -} + /** + * Version number to fork from + */ + source_version: number; + /** + * Name for the forked workflow + */ + name?: string; +}; /** * Full workflow version including the serialized workflow JSON. */ export type WorkflowVersionContentResponse = { - id: string - version: number - workflow_json: { - [key: string]: unknown - } - created_by: string - created_at: string - dependency_asset_ids?: Array -} + id: string; + version: number; + workflow_json: { + [key: string]: unknown; + }; + created_by: string; + created_at: string; + dependency_asset_ids?: Array; +}; /** * Metadata for a single workflow version. */ export type WorkflowVersionResponse = { - id: string - version: number - latest_version: number - created_by: string - created_at: string -} + id: string; + version: number; + latest_version: number; + created_by: string; + created_at: string; +}; /** * Request body for creating a new version of a saved workflow. */ export type CreateWorkflowVersionRequest = { - /** - * The version number this change is based on (for optimistic concurrency) - */ - base_version: number - /** - * The updated ComfyUI workflow JSON - */ - workflow_json: { - [key: string]: unknown - } -} + /** + * The version number this change is based on (for optimistic concurrency) + */ + base_version: number; + /** + * The updated ComfyUI workflow JSON + */ + workflow_json: { + [key: string]: unknown; + }; +}; /** * Paginated list of saved workflows. */ export type WorkflowListResponse = { - data: Array - pagination: PaginationInfo -} + data: Array; + pagination: PaginationInfo; +}; /** * Offset/limit-based pagination metadata included in list responses. */ export type PaginationInfo = { - /** - * Current offset (0-based) - */ - offset: number - /** - * Items per page - */ - limit: number - /** - * Total number of items matching filters - */ - total: number - /** - * Whether more items are available beyond this page - */ - has_more: boolean -} + /** + * Current offset (0-based) + */ + offset: number; + /** + * Items per page + */ + limit: number; + /** + * Total number of items matching filters + */ + total: number; + /** + * Whether more items are available beyond this page + */ + has_more: boolean; +}; /** * Reference to the parent workflow from which this workflow was forked. */ export type WorkflowForkedFrom = { - workflow_id?: string - workflow_version_id?: string -} + workflow_id?: string; + workflow_version_id?: string; +}; /** * Full workflow entity including metadata and version history. */ export type WorkflowResponse = { - id: string - name?: string - description?: string - default_view?: 'workflow' | 'app' - latest_version: number - forked_from?: WorkflowForkedFrom - created_by: string - created_at: string - updated_at: string -} + id: string; + name?: string; + description?: string; + default_view?: 'workflow' | 'app'; + latest_version: number; + forked_from?: WorkflowForkedFrom; + created_by: string; + created_at: string; + updated_at: string; +}; /** * Request body for updating an existing saved workflow. */ export type UpdateWorkflowRequest = { - /** - * New display name - */ - name?: string - /** - * New description - */ - description?: string - /** - * New default view mode - */ - default_view?: 'workflow' | 'app' -} + /** + * New display name + */ + name?: string; + /** + * New description + */ + description?: string; + /** + * New default view mode + */ + default_view?: 'workflow' | 'app'; +}; /** * Request body for creating a new saved workflow. */ export type CreateWorkflowRequest = { - /** - * Display name for the workflow - */ - name?: string - /** - * Description of the workflow - */ - description?: string - /** - * Default view mode - */ - default_view?: 'workflow' | 'app' - /** - * The ComfyUI workflow JSON - */ - workflow_json: { - [key: string]: unknown - } - /** - * ID of the source workflow if forked - */ - forked_from_workflow_id?: string - /** - * ID of the source workflow version if forked - */ - forked_from_workflow_version_id?: string -} + /** + * Display name for the workflow + */ + name?: string; + /** + * Description of the workflow + */ + description?: string; + /** + * Default view mode + */ + default_view?: 'workflow' | 'app'; + /** + * The ComfyUI workflow JSON + */ + workflow_json: { + [key: string]: unknown; + }; + /** + * ID of the source workflow if forked + */ + forked_from_workflow_id?: string; + /** + * ID of the source workflow version if forked + */ + forked_from_workflow_version_id?: string; +}; /** * Response after recording partner usage data. */ export type PartnerUsageResponse = { - /** - * Result status (e.g., "ok") - */ - status: string -} + /** + * Result status (e.g., "ok") + */ + status: string; +}; /** * Request body for reporting partner resource usage (admin endpoint). */ export type PartnerUsageRequest = { - /** - * The workspace ID to bill usage against - */ - workspace_id: string - /** - * The user who triggered the usage (for attribution) - */ - user_id?: string - /** - * Unique transaction ID for idempotency - */ - transaction_id: string - /** - * Type of usage event (e.g., "api_node_usage") - */ - event_type: string - /** - * When the usage occurred. Defaults to current time if omitted. - */ - timestamp?: string - /** - * Event-specific properties for billing - */ - properties?: { - [key: string]: unknown - } -} + /** + * The workspace ID to bill usage against + */ + workspace_id: string; + /** + * The user who triggered the usage (for attribution) + */ + user_id?: string; + /** + * Unique transaction ID for idempotency + */ + transaction_id: string; + /** + * Type of usage event (e.g., "api_node_usage") + */ + event_type: string; + /** + * When the usage occurred. Defaults to current time if omitted. + */ + timestamp?: string; + /** + * Event-specific properties for billing + */ + properties?: { + [key: string]: unknown; + }; +}; /** * Status of an asynchronous billing operation. */ export type BillingOpStatusResponse = { - /** - * Unique identifier for the billing operation - */ - id: string - /** - * Current status of the operation - */ - status: 'pending' | 'succeeded' | 'failed' - /** - * Error message if status is failed - */ - error_message?: string - /** - * When the operation was initiated - */ - started_at: string - /** - * When the operation completed (success or failure) - */ - completed_at?: string -} + /** + * Unique identifier for the billing operation + */ + id: string; + /** + * Current status of the operation + */ + status: 'pending' | 'succeeded' | 'failed'; + /** + * Error message if status is failed + */ + error_message?: string; + /** + * When the operation was initiated + */ + started_at: string; + /** + * When the operation completed (success or failure) + */ + completed_at?: string; +}; /** * Response after successfully purchasing a credit top-up. */ export type CreateTopupResponse = { - /** - * Billing operation ID to poll for status via GET /api/billing/ops/{id} - */ - billing_op_id: string - /** - * Unique identifier for the top-up request (same as billing_op_id, deprecated) - */ - topup_id: string - /** - * Current status of the top-up - */ - status: 'pending' | 'completed' | 'failed' - /** - * Amount being charged in cents - */ - amount_cents: number -} + /** + * Billing operation ID to poll for status via GET /api/billing/ops/{id} + */ + billing_op_id: string; + /** + * Unique identifier for the top-up request (same as billing_op_id, deprecated) + */ + topup_id: string; + /** + * Current status of the top-up + */ + status: 'pending' | 'completed' | 'failed'; + /** + * Amount being charged in cents + */ + amount_cents: number; +}; /** * Request body for purchasing a one-time credit top-up. */ export type CreateTopupRequest = { - /** - * Amount to charge and grant as credits (in cents). Minimum $5.00. - */ - amount_cents: number - /** - * Client-provided key to prevent duplicate operations. - * If a billing op with this key already exists, returns the existing op instead of creating a new one. - * - */ - idempotency_key?: string -} + /** + * Amount to charge and grant as credits (in cents). Minimum $5.00. + */ + amount_cents: number; + /** + * Client-provided key to prevent duplicate operations. + * If a billing op with this key already exists, returns the existing op instead of creating a new one. + * + */ + idempotency_key?: string; +}; /** * Response containing a redirect URL to the payment portal. */ export type PaymentPortalResponse = { - /** - * Stripe Billing Portal URL - */ - url: string -} + /** + * Stripe Billing Portal URL + */ + url: string; +}; /** * Request body for generating a payment portal session URL. */ export type PaymentPortalRequest = { - /** - * URL to redirect after the user exits the portal - */ - return_url?: string -} + /** + * URL to redirect after the user exits the portal + */ + return_url?: string; +}; /** * Response after successfully resubscribing to a billing plan. */ export type ResubscribeResponse = { - /** - * Billing operation ID to poll for status via GET /api/billing/ops/{id} - */ - billing_op_id: string - /** - * The subscription status after resubscribing - */ - status: 'active' - /** - * Human-readable confirmation message - */ - message?: string -} + /** + * Billing operation ID to poll for status via GET /api/billing/ops/{id} + */ + billing_op_id: string; + /** + * The subscription status after resubscribing + */ + status: 'active'; + /** + * Human-readable confirmation message + */ + message?: string; +}; /** * Request body for reactivating a previously cancelled subscription. */ export type ResubscribeRequest = { - /** - * Client-provided key to prevent duplicate operations. - * If a billing op with this key already exists, returns the existing op instead of creating a new one. - * - */ - idempotency_key?: string -} + /** + * Client-provided key to prevent duplicate operations. + * If a billing op with this key already exists, returns the existing op instead of creating a new one. + * + */ + idempotency_key?: string; +}; /** * Response after successfully cancelling a subscription. */ export type CancelSubscriptionResponse = { - /** - * Billing operation ID to poll for status via GET /api/billing/ops/{id} - */ - billing_op_id: string - /** - * The date when the subscription will end (end of current billing period) - */ - cancel_at: string -} + /** + * Billing operation ID to poll for status via GET /api/billing/ops/{id} + */ + billing_op_id: string; + /** + * The date when the subscription will end (end of current billing period) + */ + cancel_at: string; +}; /** * Request body for cancelling the current subscription. */ export type CancelSubscriptionRequest = { - /** - * Client-provided key to prevent duplicate operations. - * If a billing op with this key already exists, returns the existing op instead of creating a new one. - * - */ - idempotency_key?: string -} + /** + * Client-provided key to prevent duplicate operations. + * If a billing op with this key already exists, returns the existing op instead of creating a new one. + * + */ + idempotency_key?: string; +}; /** * Response after successfully subscribing to a billing plan. */ export type SubscribeResponse = { - /** - * Billing operation ID to poll for status via GET /api/billing/ops/{id} - */ - billing_op_id: string - /** - * Status of the subscription operation: - * - subscribed: Subscription is active immediately - * - needs_payment_method: User must add payment method via payment_method_url - * - pending_payment: Upgrade initiated, waiting for payment to complete - * - */ - status: 'subscribed' | 'needs_payment_method' | 'pending_payment' - /** - * When the subscription became/becomes active (present when status=subscribed or pending_payment) - */ - effective_at?: string - /** - * URL to redirect user to add payment method (present when status=needs_payment_method) - */ - payment_method_url?: string -} + /** + * Billing operation ID to poll for status via GET /api/billing/ops/{id} + */ + billing_op_id: string; + /** + * Status of the subscription operation: + * - subscribed: Subscription is active immediately + * - needs_payment_method: User must add payment method via payment_method_url + * - pending_payment: Upgrade initiated, waiting for payment to complete + * + */ + status: 'subscribed' | 'needs_payment_method' | 'pending_payment'; + /** + * When the subscription became/becomes active (present when status=subscribed or pending_payment) + */ + effective_at?: string; + /** + * URL to redirect user to add payment method (present when status=needs_payment_method) + */ + payment_method_url?: string; +}; /** * Request body for subscribing a workspace to a billing plan. */ export type SubscribeRequest = { - /** - * Target plan slug to subscribe to - */ - plan_slug: string - /** - * Client-provided key to prevent duplicate operations. - * If a billing op with this key already exists, returns the existing op instead of creating a new one. - * - */ - idempotency_key?: string - /** - * URL to redirect after payment method is added successfully. - * Required if workspace has no payment method on file. - * - */ - return_url?: string - /** - * URL to redirect if user cancels the payment method flow. - * If not provided, return_url is used for both success and cancel. - * - */ - cancel_url?: string -} + /** + * Target plan slug to subscribe to + */ + plan_slug: string; + /** + * Client-provided key to prevent duplicate operations. + * If a billing op with this key already exists, returns the existing op instead of creating a new one. + * + */ + idempotency_key?: string; + /** + * URL to redirect after payment method is added successfully. + * Required if workspace has no payment method on file. + * + */ + return_url?: string; + /** + * URL to redirect if user cancels the payment method flow. + * If not provided, return_url is used for both success and cancel. + * + */ + cancel_url?: string; +}; /** * Plan information for preview display */ export type PreviewPlanInfo = { - /** - * Plan slug - */ - slug: string - tier: SubscriptionTier - duration: SubscriptionDuration - /** - * Per-seat price in cents - */ - price_cents: number - /** - * Per-seat credits in cents - */ - credits_cents: number - seat_summary: PlanSeatSummary - /** - * Current billing period start (only for current_plan) - */ - period_start?: string - /** - * Current billing period end (only for current_plan) - */ - period_end?: string -} + /** + * Plan slug + */ + slug: string; + tier: SubscriptionTier; + duration: SubscriptionDuration; + /** + * Per-seat price in cents + */ + price_cents: number; + /** + * Per-seat credits in cents + */ + credits_cents: number; + seat_summary: PlanSeatSummary; + /** + * Current billing period start (only for current_plan) + */ + period_start?: string; + /** + * Current billing period end (only for current_plan) + */ + period_end?: string; +}; /** * Summary of seat costs based on current workspace members */ export type PlanSeatSummary = { - /** - * Total number of seats (owner + members) that would be charged - */ - seat_count: number - /** - * Total cost for all seats in cents - */ - total_cost_cents: number - /** - * Total credits granted for all seats in cents - */ - total_credits_cents: number -} + /** + * Total number of seats (owner + members) that would be charged + */ + seat_count: number; + /** + * Total cost for all seats in cents + */ + total_cost_cents: number; + /** + * Total credits granted for all seats in cents + */ + total_credits_cents: number; +}; /** * Billing period (uppercase to match comfy-api) */ -export type SubscriptionDuration = 'MONTHLY' | 'ANNUAL' +export type SubscriptionDuration = 'MONTHLY' | 'ANNUAL'; /** * Subscription tier (uppercase to match comfy-api) */ -export type SubscriptionTier = - | 'FREE' - | 'STANDARD' - | 'CREATOR' - | 'PRO' - | 'FOUNDERS_EDITION' +export type SubscriptionTier = 'FREE' | 'STANDARD' | 'CREATOR' | 'PRO' | 'FOUNDERS_EDITION'; /** * Itemized cost preview for a pending subscription change. */ export type PreviewSubscribeResponse = { - /** - * Whether this subscription change is allowed - */ - allowed: boolean - /** - * Reason why the change is not allowed (only present if allowed=false) - */ - reason?: string - /** - * Type of subscription transition - */ - transition_type: - | 'new_subscription' - | 'upgrade' - | 'downgrade' - | 'duration_change' - /** - * When the change takes effect - */ - effective_at: string - /** - * Whether the change takes effect immediately (true) or at period end (false) - */ - is_immediate: boolean - /** - * Amount to charge today in cents (0 for downgrades) - */ - cost_today_cents: number - /** - * Amount that will be charged at next billing period in cents - */ - cost_next_period_cents: number - /** - * Credits granted today in cents (prorated for mid-period upgrades) - */ - credits_today_cents: number - /** - * Credits that will be granted at next billing period in cents - */ - credits_next_period_cents: number - current_plan?: PreviewPlanInfo - new_plan: PreviewPlanInfo -} + /** + * Whether this subscription change is allowed + */ + allowed: boolean; + /** + * Reason why the change is not allowed (only present if allowed=false) + */ + reason?: string; + /** + * Type of subscription transition + */ + transition_type: 'new_subscription' | 'upgrade' | 'downgrade' | 'duration_change'; + /** + * When the change takes effect + */ + effective_at: string; + /** + * Whether the change takes effect immediately (true) or at period end (false) + */ + is_immediate: boolean; + /** + * Amount to charge today in cents (0 for downgrades) + */ + cost_today_cents: number; + /** + * Amount that will be charged at next billing period in cents + */ + cost_next_period_cents: number; + /** + * Credits granted today in cents (prorated for mid-period upgrades) + */ + credits_today_cents: number; + /** + * Credits that will be granted at next billing period in cents + */ + credits_next_period_cents: number; + current_plan?: PreviewPlanInfo; + new_plan: PreviewPlanInfo; +}; /** * Request body for previewing the cost of a plan subscription change. */ export type PreviewSubscribeRequest = { - /** - * Target plan slug to preview subscribing to - */ - plan_slug: string -} + /** + * Target plan slug to preview subscribing to + */ + plan_slug: string; +}; /** * List of available billing plans for subscription. */ export type BillingPlansResponse = { - /** - * Current plan slug if subscribed - */ - current_plan_slug?: string - plans: Array -} + /** + * Current plan slug if subscribed + */ + current_plan_slug?: string; + plans: Array; +}; /** * Reason why a plan is unavailable */ -export type PlanAvailabilityReason = - | 'same_plan' - | 'incompatible_transition' - | 'requires_team' - | 'requires_personal' - | 'exceeds_max_seats' +export type PlanAvailabilityReason = 'same_plan' | 'incompatible_transition' | 'requires_team' | 'requires_personal' | 'exceeds_max_seats'; /** * Availability and eligibility information for a billing plan. */ export type PlanAvailability = { - /** - * Whether the workspace can subscribe to this plan - */ - available: boolean - reason?: PlanAvailabilityReason -} + /** + * Whether the workspace can subscribe to this plan + */ + available: boolean; + reason?: PlanAvailabilityReason; +}; /** * Billing plan details including pricing, limits, and features. */ export type Plan = { - /** - * Plan identifier (e.g., "pro-monthly", "team-standard-annual") - */ - slug: string - tier: SubscriptionTier - duration: SubscriptionDuration - /** - * Per-member price in cents (base + one seat) - */ - price_cents: number - /** - * Per-member credits in cents (base + one seat) - */ - credits_cents: number - /** - * Maximum number of seats allowed for this plan - */ - max_seats: number - availability: PlanAvailability - seat_summary: PlanSeatSummary -} + /** + * Plan identifier (e.g., "pro-monthly", "team-standard-annual") + */ + slug: string; + tier: SubscriptionTier; + duration: SubscriptionDuration; + /** + * Per-member price in cents (base + one seat) + */ + price_cents: number; + /** + * Per-member credits in cents (base + one seat) + */ + credits_cents: number; + /** + * Maximum number of seats allowed for this plan + */ + max_seats: number; + availability: PlanAvailability; + seat_summary: PlanSeatSummary; +}; /** * List of user secrets with metadata only. */ export type SecretListResponse = { - data: Array -} + data: Array; +}; /** * User secret metadata (the secret value itself is never returned after creation). */ export type SecretResponse = { - /** - * Unique identifier for the secret - */ - id: string - /** - * User-provided label for the secret - */ - name: string - /** - * Provider identifier (e.g., huggingface, civitai) - */ - provider?: string - /** - * When the secret was last used for decryption - */ - last_used_at?: string - /** - * When the secret was created - */ - created_at: string - /** - * When the secret was last updated - */ - updated_at: string -} + /** + * Unique identifier for the secret + */ + id: string; + /** + * User-provided label for the secret + */ + name: string; + /** + * Provider identifier (e.g., huggingface, civitai) + */ + provider?: string; + /** + * When the secret was last used for decryption + */ + last_used_at?: string; + /** + * When the secret was created + */ + created_at: string; + /** + * When the secret was last updated + */ + updated_at: string; +}; /** * Request body for updating an existing user secret. */ export type UpdateSecretRequest = { - /** - * New name for the secret - */ - name?: string - /** - * New secret value (API key, token, etc.) - */ - secret_value?: string -} + /** + * New name for the secret + */ + name?: string; + /** + * New secret value (API key, token, etc.) + */ + secret_value?: string; +}; /** * Request body for creating a new user secret. */ export type CreateSecretRequest = { - /** - * User-provided label for the secret - */ - name: string - /** - * Optional provider identifier (e.g., huggingface, civitai) - */ - provider?: string - /** - * The plaintext secret to encrypt and store - */ - secret_value: string -} + /** + * User-provided label for the secret + */ + name: string; + /** + * Optional provider identifier (e.g., huggingface, civitai) + */ + provider?: string; + /** + * The plaintext secret to encrypt and store + */ + secret_value: string; +}; /** * Paginated list of billing events for a workspace. */ export type BillingEventsResponse = { - /** - * Total number of events - */ - total: number - events: Array - /** - * Current page number (1-indexed) - */ - page: number - /** - * Items per page - */ - limit: number - /** - * Total number of pages - */ - totalPages: number -} + /** + * Total number of events + */ + total: number; + events: Array; + /** + * Current page number (1-indexed) + */ + page: number; + /** + * Items per page + */ + limit: number; + /** + * Total number of pages + */ + totalPages: number; +}; /** * A single billing event such as a charge, credit, or adjustment. */ export type BillingEvent = { - /** - * Type of billing event (e.g., subscription.created, payment.succeeded) - */ - event_type: string - /** - * Unique event identifier - */ - event_id: string - /** - * Event-specific parameters - */ - params?: { - [key: string]: unknown - } - /** - * When the event occurred - */ - createdAt: string -} + /** + * Type of billing event (e.g., subscription.created, payment.succeeded) + */ + event_type: string; + /** + * Unique event identifier + */ + event_id: string; + /** + * Event-specific parameters + */ + params?: { + [key: string]: unknown; + }; + /** + * When the event occurred + */ + createdAt: string; +}; /** * Current credit balance and usage details for a workspace. */ export type BillingBalanceResponse = { - /** - * The total remaining balance in microamount (1/1,000,000 of the currency unit) - */ - amount_micros: number - /** - * The remaining balance from prepaid commits in microamount - */ - prepaid_balance_micros?: number - /** - * The remaining balance from cloud credits in microamount - */ - cloud_credit_balance_micros?: number - /** - * The total amount of pending/unbilled charges from draft invoices in microamount - */ - pending_charges_micros?: number - /** - * The effective balance (total balance minus pending charges). Can be negative if pending charges exceed the balance. - */ - effective_balance_micros?: number - /** - * Currency code - */ - currency: string -} + /** + * The total remaining balance in microamount (1/1,000,000 of the currency unit) + */ + amount_micros: number; + /** + * The remaining balance from prepaid commits in microamount + */ + prepaid_balance_micros?: number; + /** + * The remaining balance from cloud credits in microamount + */ + cloud_credit_balance_micros?: number; + /** + * The total amount of pending/unbilled charges from draft invoices in microamount + */ + pending_charges_micros?: number; + /** + * The effective balance (total balance minus pending charges). Can be negative if pending charges exceed the balance. + */ + effective_balance_micros?: number; + /** + * Currency code + */ + currency: string; +}; /** * Current billing and subscription status for a workspace. */ export type BillingStatusResponse = { - /** - * Whether the workspace has an active subscription - */ - is_active: boolean - /** - * Subscription activity status (scheduled subscriptions are not returned) - */ - subscription_status?: 'active' | 'ended' | 'canceled' - subscription_tier?: SubscriptionTier - subscription_duration?: SubscriptionDuration - /** - * Plan identifier (e.g., standard-monthly, team-pro-annual) - */ - plan_slug?: string - billing_status?: BillingStatus - /** - * Whether the workspace has available credits - */ - has_funds: boolean - /** - * When the subscription will become inactive (if canceled) - */ - cancel_at?: string - /** - * When the current billing period ends and the next one begins - */ - renewal_date?: string -} + /** + * Whether the workspace has an active subscription + */ + is_active: boolean; + /** + * Subscription activity status (scheduled subscriptions are not returned) + */ + subscription_status?: 'active' | 'ended' | 'canceled'; + subscription_tier?: SubscriptionTier; + subscription_duration?: SubscriptionDuration; + /** + * Plan identifier (e.g., standard-monthly, team-pro-annual) + */ + plan_slug?: string; + billing_status?: BillingStatus; + /** + * Whether the workspace has available credits + */ + has_funds: boolean; + /** + * When the subscription will become inactive (if canceled) + */ + cancel_at?: string; + /** + * When the current billing period ends and the next one begins + */ + renewal_date?: string; +}; /** * Payment lifecycle status */ -export type BillingStatus = - | 'awaiting_payment_method' - | 'pending_payment' - | 'paid' - | 'payment_failed' - | 'inactive' +export type BillingStatus = 'awaiting_payment_method' | 'pending_payment' | 'paid' | 'payment_failed' | 'inactive'; /** * A single JSON Web Key entry within a JWKS response. */ export type JwkKey = { - kty: string - crv: string - kid: string - use: string - alg: string - /** - * Base64url-encoded X coordinate - */ - x: string - /** - * Base64url-encoded Y coordinate - */ - y: string -} + kty: string; + crv: string; + kid: string; + use: string; + alg: string; + /** + * Base64url-encoded X coordinate + */ + x: string; + /** + * Base64url-encoded Y coordinate + */ + y: string; +}; + +/** + * RFC 6749 §5.2 error response. + */ +export type OAuthTokenError = { + /** + * RFC 6749 §5.2 error code: invalid_request, invalid_client, invalid_grant, unauthorized_client, unsupported_grant_type, invalid_scope. + */ + error: string; + /** + * Human-readable, no leak of internal storage state. + */ + error_description?: string; +}; + +/** + * RFC 6749 §5.1 successful token response. + */ +export type OAuthTokenResponse = { + /** + * Resource-bound Cloud JWT (audience matches the protected resource). + */ + access_token: string; + token_type: 'Bearer'; + /** + * Access token lifetime in seconds. + */ + expires_in: number; + /** + * Opaque refresh token. Rotates on every successful refresh; presenting an already-rotated token revokes the entire family. + */ + refresh_token: string; + /** + * Space-delimited scopes granted with this token. + */ + scope: string; +}; + +/** + * One workspace option presented in the OAuth consent challenge. Promoted to a named schema so the generated Go type is referenceable in handlers and tests rather than re-declared as an anonymous struct at every callsite. + * + */ +export type OAuthConsentChallengeWorkspace = { + id: string; + name: string; + type: 'personal' | 'team'; + role: 'owner' | 'member'; +}; + +/** + * Redirect target produced after a JSON consent submission. The frontend must navigate the browser to this URL so custom-scheme client callbacks work without relying on fetch-visible 302 headers. + */ +export type OAuthAuthorizeRedirectResponse = { + /** + * OAuth client redirect URI with either code+state for allow, or error+state for deny. + */ + redirect_url: string; +}; + +/** + * Server-side state describing the OAuth consent decision the user is being asked to make. Returned by GET /oauth/authorize when a valid Cloud session exists; the frontend renders the consent UI from this payload and POSTs the decision back. Browser never sees the original OAuth params on resume. + * + */ +export type OAuthConsentChallenge = { + /** + * Opaque server-side identifier for the authorization-request row. Carried back unchanged in the consent submission. + */ + oauth_request_id: string; + /** + * Per-row CSRF token bound to this authorization request (not to the session). Must be echoed back on POST. + */ + csrf_token: string; + /** + * Human-readable name of the OAuth client requesting authorization, from oauth_clients.display_name. + */ + client_display_name: string; + /** + * Human-readable name of the protected resource, from oauth_resources.display_name. + */ + resource_display_name: string; + /** + * Scopes the client is requesting for this resource. The frontend should present these for the user to approve. + */ + scopes: Array; + /** + * Workspaces the user can select from. Membership is re-checked on POST. + */ + workspaces: Array; +}; + +/** + * OAuth 2.1 protected-resource metadata (RFC 9728). + */ +export type OAuthProtectedResourceMetadata = { + resource: string; + authorization_servers: Array; + scopes_supported: Array; + bearer_methods_supported?: Array; +}; + +/** + * RFC 7591 §3.2.2 error response. + */ +export type OAuthRegisterError = { + error: 'invalid_redirect_uri' | 'invalid_client_metadata'; + error_description?: string | null; +}; + +/** + * Union of the two 400 shapes /oauth/register can emit. `OAuthRegisterError` is the handler-shaped RFC 7591 §3.2.2 error; `BindingErrorResponse` is the strict-server binding-layer error fired when the request body fails OpenAPI-schema validation before the handler runs. + * + */ +export type OAuthRegisterBadRequestResponse = OAuthRegisterError | BindingErrorResponse; + +/** + * Error shape returned when request binding or validation fails before the handler runs. + */ +export type BindingErrorResponse = { + message: string; +}; + +/** + * RFC 7591 §3.2.1 successful registration response. + */ +export type OAuthRegisterResponse = { + /** + * Server-generated client_id. Always carries the `mcp-dyn-` prefix. + */ + client_id: string; + /** + * Unix timestamp (seconds) when the client was registered. + */ + client_id_issued_at: number; + client_name?: string; + redirect_uris: Array; + grant_types: Array; + response_types: Array; + token_endpoint_auth_method: 'none'; + application_type: 'native' | 'web'; +}; + +/** + * RFC 7591 §2 client metadata document. Only the fields the server honors are listed; presence of `scope` or `resource_grants` in the request is rejected (`invalid_client_metadata`) because those are server-owned for dynamic clients. `additionalProperties: false` mirrors the runtime middleware that rejects any unknown metadata key. + * + */ +export type OAuthRegisterRequest = { + /** + * 1–5 redirect URIs. Validated against `application_type` policy. + */ + redirect_uris: Array; + /** + * Human-readable name shown in the consent UI. Reserved-name list rejects impersonation of major MCP clients. + */ + client_name?: string; + /** + * RFC 7591 §2 application_type. **REQUIRED** — clients MUST declare intent; the server does not default this field. `native` for desktop / CLI / MCP-spec-strict clients (loopback redirects); `web` for hosted clients (HTTPS only, host must be allowlisted). A missing or explicitly empty `application_type` rejects with `invalid_client_metadata`. The realistic MCP-client population is overwhelmingly native/loopback — requiring explicit declaration avoids silently bouncing those clients off the web HTTPS policy. + * + */ + application_type: 'native' | 'web'; + /** + * Public clients only this phase — must be `none` if present. The server forces `none` regardless. + */ + token_endpoint_auth_method?: 'none'; + /** + * Optional. Defaults to `["authorization_code","refresh_token"]`. + */ + grant_types?: Array<'authorization_code' | 'refresh_token'>; + /** + * Optional. Defaults to `["code"]`. + */ + response_types?: Array<'code'>; + /** + * **REJECTED IF PRESENT.** Dynamic clients do not pick scopes — the server assigns scopes from the active MCP resource's published list. Sending `scope` in the registration body is treated as a privilege-escalation attempt and returns `invalid_client_metadata`. The field is documented here so clients see a well-defined error rather than silent drop. + * + */ + scope?: string | null; + /** + * **REJECTED IF PRESENT.** Same reason as `scope`. The set of resources and scopes a dynamic client may request is server-policy, not request-driven. + * + */ + resource_grants?: { + [key: string]: Array; + } | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + client_uri?: string | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + logo_uri?: string | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + tos_uri?: string | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + policy_uri?: string | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + software_id?: string | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + software_version?: string | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + contacts?: Array | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + jwks?: { + [key: string]: unknown; + } | null; + /** + * **REJECTED IF PRESENT.** Unsupported RFC 7591 metadata for this public MCP-client phase. + */ + jwks_uri?: string | null; +}; + +/** + * OAuth 2.1 authorization-server metadata (RFC 8414). + */ +export type OAuthAuthorizationServerMetadata = { + issuer: string; + authorization_endpoint: string; + token_endpoint: string; + jwks_uri: string; + /** + * RFC 7591 §3.1 Dynamic Client Registration endpoint. Advertised so MCP-spec-compliant clients can auto-discover and self-register without operator involvement. Present only when DCR is enabled. + * + */ + registration_endpoint?: string; + response_types_supported: Array; + grant_types_supported: Array; + code_challenge_methods_supported: Array; + token_endpoint_auth_methods_supported: Array; + scopes_supported?: Array; +}; /** * JSON Web Key Set containing the public keys used to verify Cloud JWTs. */ export type JwksResponse = { - keys: Array -} + keys: Array; +}; /** * Response after synchronizing an API key into the local database. */ export type SyncApiKeyResponse = { - /** - * `revoked` — matching row found, was active, now revoked. - * `already_revoked` — matching row found, already revoked. - * `no_op` — no row matches the supplied hash. - * - */ - result: 'revoked' | 'already_revoked' | 'no_op' -} + /** + * `revoked` — matching row found, was active, now revoked. + * `already_revoked` — matching row found, already revoked. + * `no_op` — no row matches the supplied hash. + * + */ + result: 'revoked' | 'already_revoked' | 'no_op'; +}; /** * Request body for synchronizing an API key from the external registry. */ export type SyncApiKeyRequest = { - /** - * Lifecycle event type. Only `delete` is supported in Phase 1. - */ - event: 'delete' - /** - * SHA-256 hex digest of the plaintext API key (64 hex characters). - * Case-insensitive: the server lowercases the value before lookup, so - * producers may emit lowercase or uppercase hex. The lowercase form - * is recommended for consistency with the rest of the codebase, which - * computes hashes via `hex.EncodeToString`. - * - */ - key_hash: string - /** - * Firebase UID of the key's owner according to comfy-api. Required on - * the request so cloud can detect drift between the two systems, but - * **advisory only**: `key_hash` is the sole authoritative identifier - * for the revocation. A mismatch against cloud's stored `user_id` is - * logged and emits `admin.api_key_sync.delete.customer_mismatch`, but - * does not change the outcome — the matching row is still revoked so - * a subsequent sync call can repair drift. - * - */ - customer_id: string -} + /** + * Lifecycle event type. Only `delete` is supported in Phase 1. + */ + event: 'delete'; + /** + * SHA-256 hex digest of the plaintext API key (64 hex characters). + * Case-insensitive: the server lowercases the value before lookup, so + * producers may emit lowercase or uppercase hex. The lowercase form + * is recommended for consistency with the rest of the codebase, which + * computes hashes via `hex.EncodeToString`. + * + */ + key_hash: string; + /** + * Firebase UID of the key's owner according to comfy-api. Required on + * the request so cloud can detect drift between the two systems, but + * **advisory only**: `key_hash` is the sole authoritative identifier + * for the revocation. A mismatch against cloud's stored `user_id` is + * logged and emits `admin.api_key_sync.delete.customer_mismatch`, but + * does not change the outcome — the matching row is still revoked so + * a subsequent sync call can repair drift. + * + */ + customer_id: string; +}; /** * Response confirming the validity and scope of a workspace API key. */ export type VerifyApiKeyResponse = { - /** - * Firebase UID of the key creator - */ - user_id: string - /** - * User's email address - */ - email: string - /** - * User's display name - */ - name: string - /** - * Whether the user is an admin - */ - is_admin: boolean - /** - * Workspace ID for billing attribution - */ - workspace_id: string - /** - * Type of workspace - */ - workspace_type: 'personal' | 'team' - /** - * User's role in the workspace - */ - role: 'owner' | 'member' - /** - * Whether the workspace has available funds for usage - */ - has_funds: boolean - /** - * Whether the workspace has an active subscription - */ - is_active: boolean - /** - * Permissions granted by this key. Always includes the role permission - * (`owner:*` or `member:*`). May also include `partner-node:use`, - * which is a **staging-only shim** used to gate partner-node access - * for non-admin users during testing. No production code path checks - * this permission today; it is emitted for parity with the Cloud JWT - * claim set so JWT and API-key callers see the same permissions. - * - */ - permissions: Array -} + /** + * Firebase UID of the key creator + */ + user_id: string; + /** + * User's email address + */ + email: string; + /** + * User's display name + */ + name: string; + /** + * Whether the user is an admin + */ + is_admin: boolean; + /** + * Workspace ID for billing attribution + */ + workspace_id: string; + /** + * Type of workspace + */ + workspace_type: 'personal' | 'team'; + /** + * User's role in the workspace + */ + role: 'owner' | 'member'; + /** + * Whether the workspace has available funds for usage + */ + has_funds: boolean; + /** + * Whether the workspace has an active subscription + */ + is_active: boolean; + /** + * Permissions granted by this key. Always includes the role permission + * (`owner:*` or `member:*`). May also include `partner-node:use`, + * which is a **staging-only shim** used to gate partner-node access + * for non-admin users during testing. No production code path checks + * this permission today; it is emitted for parity with the Cloud JWT + * claim set so JWT and API-key callers see the same permissions. + * + */ + permissions: Array; +}; /** * Request body for verifying a workspace API key (admin endpoint). */ export type VerifyApiKeyRequest = { - /** - * The full plaintext API key to verify - */ - api_key: string -} + /** + * The full plaintext API key to verify + */ + api_key: string; +}; /** * Response after bulk-revoking API keys for a workspace member. */ export type BulkRevokeApiKeysResponse = { - /** - * Number of API keys that were revoked - */ - revoked_count: number -} + /** + * Number of API keys that were revoked + */ + revoked_count: number; +}; /** * List of API keys associated with the current workspace. */ export type ListWorkspaceApiKeysResponse = { - api_keys: Array -} + api_keys: Array; +}; /** * Metadata for a workspace-scoped API key (secret is never returned). */ export type WorkspaceApiKeyInfo = { - /** - * API key ID - */ - id: string - /** - * Workspace this key belongs to - */ - workspace_id: string - /** - * User who created this key - */ - user_id: string - /** - * User-provided label - */ - name: string - /** - * First 8 chars after prefix for display - */ - key_prefix: string - /** - * When the key expires (if set) - */ - expires_at?: string - /** - * Last time the key was used - */ - last_used_at?: string - /** - * When the key was revoked (if revoked) - */ - revoked_at?: string - /** - * When the key was created - */ - created_at: string -} + /** + * API key ID + */ + id: string; + /** + * Workspace this key belongs to + */ + workspace_id: string; + /** + * User who created this key + */ + user_id: string; + /** + * User-provided label + */ + name: string; + /** + * User-provided description of the key's purpose. Limit is byte-based (UTF-8 encoding); 5000 bytes equals 5000 ASCII characters or fewer multi-byte characters. + */ + description: string; + /** + * First 8 chars after prefix for display + */ + key_prefix: string; + /** + * When the key expires (if set) + */ + expires_at?: string; + /** + * Last time the key was used + */ + last_used_at?: string; + /** + * When the key was revoked (if revoked) + */ + revoked_at?: string; + /** + * When the key was created + */ + created_at: string; +}; /** * Response containing the newly created workspace API key. */ export type CreateWorkspaceApiKeyResponse = { - /** - * API key ID - */ - id: string - /** - * User-provided label - */ - name: string - /** - * The full plaintext API key (only shown once) - */ - key: string - /** - * First 8 chars after prefix for display - */ - key_prefix: string - /** - * When the key expires (if set) - */ - expires_at?: string - /** - * When the key was created - */ - created_at: string -} + /** + * API key ID + */ + id: string; + /** + * User-provided label + */ + name: string; + /** + * User-provided description of the key's purpose. Limit is byte-based (UTF-8 encoding); 5000 bytes equals 5000 ASCII characters or fewer multi-byte characters. + */ + description: string; + /** + * The full plaintext API key (only shown once) + */ + key: string; + /** + * First 8 chars after prefix for display + */ + key_prefix: string; + /** + * When the key expires (if set) + */ + expires_at?: string; + /** + * When the key was created + */ + created_at: string; +}; /** * Request body for creating a new workspace-scoped API key. */ export type CreateWorkspaceApiKeyRequest = { - /** - * User-provided label for the key - */ - name: string - /** - * Optional expiration timestamp - */ - expires_at?: string -} + /** + * User-provided label for the key + */ + name: string; + /** + * User-provided description of the key's purpose. Limit is byte-based (UTF-8 encoding); 5000 bytes equals 5000 ASCII characters or fewer multi-byte characters. + */ + description?: string; + /** + * Optional expiration timestamp + */ + expires_at?: string; +}; /** * Response returned after successfully accepting a workspace invitation. */ export type AcceptInviteResponse = { - /** - * ID of the workspace joined - */ - workspace_id: string - /** - * Name of the workspace joined - */ - workspace_name: string -} + /** + * ID of the workspace joined + */ + workspace_id: string; + /** + * Name of the workspace joined + */ + workspace_name: string; +}; /** * Request body for inviting a user to a workspace. */ export type CreateInviteRequest = { - /** - * Email address to invite - */ - email: string -} + /** + * Email address to invite + */ + email: string; +}; /** * List of pending invitations for the current workspace. */ export type ListInvitesResponse = { - invites: Array -} + invites: Array; +}; /** * An outstanding workspace invitation that has not yet been accepted. */ export type PendingInvite = { - /** - * Invite ID - */ - id: string - /** - * Email address of the invited user - */ - email: string - /** - * Invite token for constructing invite links. Empty for expired invites. - */ - token?: string - /** - * When the invite was created - */ - invited_at: string - /** - * When the invite expires - */ - expires_at: string -} + /** + * Invite ID + */ + id: string; + /** + * Email address of the invited user + */ + email: string; + /** + * Invite token for constructing invite links. Empty for expired invites. + */ + token?: string; + /** + * When the invite was created + */ + invited_at: string; + /** + * When the invite expires + */ + expires_at: string; +}; /** * List of members in the current workspace. */ export type ListMembersResponse = { - members: Array - pagination: PaginationInfo -} + members: Array; + pagination: PaginationInfo; +}; /** * Workspace member with profile and role information. */ export type Member = { - /** - * User ID - */ - id: string - /** - * User's display name - */ - name: string - /** - * User's email address - */ - email: string - /** - * User's role in the workspace - */ - role: 'owner' | 'member' - /** - * When the user joined the workspace - */ - joined_at: string -} + /** + * User ID + */ + id: string; + /** + * User's display name + */ + name: string; + /** + * User's email address + */ + email: string; + /** + * User's role in the workspace + */ + role: 'owner' | 'member'; + /** + * When the user joined the workspace + */ + joined_at: string; +}; /** * Request body for updating an existing workspace's settings. */ export type UpdateWorkspaceRequest = { - /** - * New display name for the workspace - */ - name?: string -} + /** + * New display name for the workspace + */ + name?: string; +}; /** * Request body for creating a new workspace. */ export type CreateWorkspaceRequest = { - /** - * Display name for the workspace - */ - name: string -} + /** + * Display name for the workspace + */ + name: string; +}; /** * Workspace entity annotated with the requesting user's role. */ export type WorkspaceWithRole = { - id: string - name: string - type: 'personal' | 'team' - role: 'owner' | 'member' - /** - * When the workspace was created - */ - created_at: string - /** - * When the user joined the workspace (same as created_at for the workspace creator) - */ - joined_at: string - subscription_tier?: SubscriptionTier -} + id: string; + name: string; + type: 'personal' | 'team'; + role: 'owner' | 'member'; + /** + * When the workspace was created + */ + created_at: string; + /** + * When the user joined the workspace (same as created_at for the workspace creator) + */ + joined_at: string; + subscription_tier?: SubscriptionTier; +}; /** * Paginated list of workspaces the authenticated user belongs to. */ export type ListWorkspacesResponse = { - workspaces: Array -} + workspaces: Array; +}; /** * Full workspace entity with configuration and ownership details. */ export type Workspace = { - id: string - name: string - type: 'personal' | 'team' - created_at: string -} + id: string; + name: string; + type: 'personal' | 'team'; + created_at: string; +}; /** * Abbreviated workspace metadata used in list responses. */ export type WorkspaceSummary = { - id: string - name: string - type: 'personal' | 'team' -} + id: string; + name: string; + type: 'personal' | 'team'; +}; /** * Response containing the issued Cloud JWT and its expiry. */ export type ExchangeTokenResponse = { - /** - * Cloud JWT token - */ - token: string - /** - * Token expiration time (RFC 3339) - */ - expires_at: string - workspace: WorkspaceSummary - /** - * User's role in the workspace - */ - role: 'owner' | 'member' - /** - * Permission strings for the role - */ - permissions: Array -} + /** + * Cloud JWT token + */ + token: string; + /** + * Token expiration time (RFC 3339) + */ + expires_at: string; + workspace: WorkspaceSummary; + /** + * User's role in the workspace + */ + role: 'owner' | 'member'; + /** + * Permission strings for the role + */ + permissions: Array; +}; /** * Optional request body for the token exchange endpoint. The Firebase JWT @@ -1783,977 +2014,997 @@ export type ExchangeTokenResponse = { * */ export type ExchangeTokenRequest = { - /** - * Workspace ID to get token for. Defaults to personal workspace if omitted. - */ - workspace_id?: string -} + /** + * Workspace ID to get token for. Defaults to personal workspace if omitted. + */ + workspace_id?: string; +}; /** * Full task details including payload and result */ export type TaskResponse = { - /** - * Unique task identifier - */ - id: string - /** - * Caller-provided key for idempotent task creation - */ - idempotency_key: string - /** - * Task type name (e.g., model_upload) - */ - task_name: string - /** - * Task input data - */ - payload: { - [key: string]: unknown - } - /** - * Current task status - */ - status: 'created' | 'running' | 'completed' | 'failed' - /** - * Task output data (null if not completed) - */ - result?: { - [key: string]: unknown - } - /** - * Error message on failure (null if not failed) - */ - error_message?: string - /** - * Task creation timestamp - */ - create_time: string - /** - * Task last update timestamp - */ - update_time: string - /** - * When task execution started (null if not started) - */ - started_at?: string - /** - * When task completed or failed (null if not finished) - */ - completed_at?: string -} + /** + * Unique task identifier + */ + id: string; + /** + * Caller-provided key for idempotent task creation + */ + idempotency_key: string; + /** + * Task type name (e.g., model_upload) + */ + task_name: string; + /** + * Task input data + */ + payload: { + [key: string]: unknown; + }; + /** + * Current task status + */ + status: 'created' | 'running' | 'completed' | 'failed'; + /** + * Task output data (null if not completed) + */ + result?: { + [key: string]: unknown; + }; + /** + * Error message on failure (null if not failed) + */ + error_message?: string; + /** + * Task creation timestamp + */ + create_time: string; + /** + * Task last update timestamp + */ + update_time: string; + /** + * When task execution started (null if not started) + */ + started_at?: string; + /** + * When task completed or failed (null if not finished) + */ + completed_at?: string; +}; /** * Task data for list views */ export type TaskEntry = { - /** - * Unique task identifier - */ - id: string - /** - * Task type name (e.g., model_upload) - */ - task_name: string - /** - * Current task status - */ - status: 'created' | 'running' | 'completed' | 'failed' - /** - * Task creation timestamp - */ - create_time: string - /** - * When task execution started (null if not started) - */ - started_at?: string - /** - * When task completed or failed (null if not finished) - */ - completed_at?: string -} + /** + * Unique task identifier + */ + id: string; + /** + * Task type name (e.g., model_upload) + */ + task_name: string; + /** + * Current task status + */ + status: 'created' | 'running' | 'completed' | 'failed'; + /** + * Task creation timestamp + */ + create_time: string; + /** + * When task execution started (null if not started) + */ + started_at?: string; + /** + * When task completed or failed (null if not finished) + */ + completed_at?: string; +}; /** * Paginated list of background tasks for the authenticated user. */ export type TasksListResponse = { - /** - * Array of tasks ordered by create_time - */ - tasks: Array - pagination: PaginationInfo -} + /** + * Array of tasks ordered by create_time + */ + tasks: Array; + pagination: PaginationInfo; +}; /** * Details of a pending or completed user data deletion request. */ export type DeletionRequest = { - /** - * Unique identifier for the deletion request - */ - id: string - /** - * The Firebase ID of the user being deleted - */ - firebase_id: string - /** - * The time the deletion request was created - */ - create_time: string - /** - * Array of deletion status objects - */ - deletion_status: Array -} + /** + * Unique identifier for the deletion request + */ + id: string; + /** + * The Firebase ID of the user being deleted + */ + firebase_id: string; + /** + * The time the deletion request was created + */ + create_time: string; + /** + * Array of deletion status objects + */ + deletion_status: Array; +}; /** * Current status of a user data deletion request. */ export type DeletionStatus = { - /** - * The name of the deletion status - */ - status_name: string - /** - * Additional details about the deletion status - */ - status_details: string -} + /** + * The name of the deletion status + */ + status_name: string; + /** + * Additional details about the deletion status + */ + status_details: string; +}; /** * Detailed execution error information from ComfyUI */ export type ExecutionError = { - /** - * ID of the node that failed - */ - node_id: string - /** - * Type name of the node (e.g., "KSampler") - */ - node_type: string - /** - * Human-readable error message - */ - exception_message: string - /** - * Python exception type (e.g., "RuntimeError") - */ - exception_type: string - /** - * Array of traceback lines (empty array if not available) - */ - traceback: Array - /** - * Input values at time of failure (empty object if not available) - */ - current_inputs: { - [key: string]: unknown - } - /** - * Output values at time of failure (empty object if not available) - */ - current_outputs: { - [key: string]: unknown - } -} + /** + * ID of the node that failed + */ + node_id: string; + /** + * Type name of the node (e.g., "KSampler") + */ + node_type: string; + /** + * Human-readable error message + */ + exception_message: string; + /** + * Python exception type (e.g., "RuntimeError") + */ + exception_type: string; + /** + * Array of traceback lines (empty array if not available) + */ + traceback: Array; + /** + * Input values at time of failure (empty object if not available) + */ + current_inputs: { + [key: string]: unknown; + }; + /** + * Output values at time of failure (empty object if not available) + */ + current_outputs: { + [key: string]: unknown; + }; +}; /** * Full job details including workflow and outputs */ export type JobDetailResponse = { - /** - * Unique job identifier - */ - id: string - /** - * User-friendly job status - */ - status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'cancelled' - /** - * Full ComfyUI workflow (10-100KB, omitted if not available). - * - * Sensitive credentials are redacted before the response is returned: - * `extra_data.api_key_comfy_org`, when present, is replaced with the - * literal string `"[REDACTED]"`. The field is preserved (not removed) - * so existence checks still pass, but the value is not usable. - * - */ - workflow?: { - [key: string]: unknown - } - /** - * Detailed execution error from ComfyUI (only for failed jobs with structured error data) - */ - execution_error?: ExecutionError - /** - * Job creation timestamp (Unix timestamp in milliseconds) - */ - create_time: number - /** - * Last update timestamp (Unix timestamp in milliseconds) - */ - update_time: number - /** - * Full outputs object from ComfyUI (only for terminal states) - */ - outputs?: { - [key: string]: unknown - } - /** - * Primary preview output (only for terminal states) - */ - preview_output?: { - [key: string]: unknown - } - /** - * Total number of output files (omitted for non-terminal states) - */ - outputs_count?: number - /** - * UUID identifying the workflow graph definition - */ - workflow_id?: string - /** - * ComfyUI execution status and timeline (only for terminal states) - */ - execution_status?: { - [key: string]: unknown - } - /** - * Node-level execution metadata (only for terminal states) - */ - execution_meta?: { - [key: string]: unknown - } -} + /** + * Unique job identifier + */ + id: string; + /** + * User-friendly job status + */ + status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'cancelled'; + /** + * Full ComfyUI workflow (10-100KB, omitted if not available). + * + * Sensitive credentials are redacted before the response is returned: + * `extra_data.api_key_comfy_org`, when present, is replaced with the + * literal string `"[REDACTED]"`. The field is preserved (not removed) + * so existence checks still pass, but the value is not usable. + * + */ + workflow?: { + [key: string]: unknown; + }; + /** + * Detailed execution error from ComfyUI (only for failed jobs with structured error data) + */ + execution_error?: ExecutionError; + /** + * Job creation timestamp (Unix timestamp in milliseconds) + */ + create_time: number; + /** + * Last update timestamp (Unix timestamp in milliseconds) + */ + update_time: number; + /** + * Full outputs object from ComfyUI (only for terminal states) + */ + outputs?: { + [key: string]: unknown; + }; + /** + * Primary preview output (only for terminal states) + */ + preview_output?: { + [key: string]: unknown; + }; + /** + * Total number of output files (omitted for non-terminal states) + */ + outputs_count?: number; + /** + * UUID identifying the workflow graph definition + */ + workflow_id?: string; + /** + * ComfyUI execution status and timeline (only for terminal states) + */ + execution_status?: { + [key: string]: unknown; + }; + /** + * Node-level execution metadata (only for terminal states) + */ + execution_meta?: { + [key: string]: unknown; + }; +}; /** * Response for POST /api/jobs/{job_id}/cancel. Returned on both fresh cancels and idempotent no-ops. */ export type JobCancelResponse = { - /** - * True when a cancel event was successfully dispatched by this call. - * False when the job was already in a terminal or cancelling state, - * in which case the call is a no-op (still 200 — idempotent). - * - */ - cancelled: boolean -} + /** + * True when a cancel event was successfully dispatched by this call. + * False when the job was already in a terminal or cancelling state, + * in which case the call is a no-op (still 200 — idempotent). + * + */ + cancelled: boolean; +}; /** * Lightweight job data for list views (workflow and full outputs excluded) */ export type JobEntry = { - /** - * Unique job identifier - */ - id: string - /** - * User-friendly job status - */ - status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'cancelled' - /** - * Detailed execution error from ComfyUI (only for failed jobs with structured error data) - */ - execution_error?: ExecutionError - /** - * Job creation timestamp (Unix timestamp in milliseconds) - */ - create_time: number - /** - * Primary preview output (only present for terminal states) - */ - preview_output?: { - [key: string]: unknown - } - /** - * Total number of output files (omitted for non-terminal states) - */ - outputs_count?: number - /** - * UUID identifying the workflow graph definition - */ - workflow_id?: string - /** - * Workflow execution start timestamp (Unix milliseconds, only present for terminal states) - */ - execution_start_time?: number - /** - * Workflow execution completion timestamp (Unix milliseconds, only present for terminal states) - */ - execution_end_time?: number -} + /** + * Unique job identifier + */ + id: string; + /** + * User-friendly job status + */ + status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'cancelled'; + /** + * Detailed execution error from ComfyUI (only for failed jobs with structured error data) + */ + execution_error?: ExecutionError; + /** + * Job creation timestamp (Unix timestamp in milliseconds) + */ + create_time: number; + /** + * Primary preview output (only present for terminal states) + */ + preview_output?: { + [key: string]: unknown; + }; + /** + * Total number of output files (omitted for non-terminal states) + */ + outputs_count?: number; + /** + * UUID identifying the workflow graph definition + */ + workflow_id?: string; + /** + * Workflow execution start timestamp (Unix milliseconds, only present for terminal states) + */ + execution_start_time?: number; + /** + * Workflow execution completion timestamp (Unix milliseconds, only present for terminal states) + */ + execution_end_time?: number; +}; /** * Paginated list of jobs for the authenticated user. */ export type JobsListResponse = { - /** - * Array of jobs ordered by specified sort field - */ - jobs: Array - pagination: PaginationInfo -} + /** + * Array of jobs ordered by specified sort field + */ + jobs: Array; + pagination: PaginationInfo; +}; /** * Response after adding, updating, or removing tags on an asset. */ export type TagsModificationResponse = { - /** - * Tags that were successfully added (for add operation) - */ - added?: Array - /** - * Tags that were successfully removed (for remove operation) - */ - removed?: Array - /** - * Tags that were already present (for add operation) - */ - already_present?: Array - /** - * Tags that were not present (for remove operation) - */ - not_present?: Array - /** - * All tags on the asset after the operation - */ - total_tags: Array -} + /** + * Tags that were successfully added (for add operation) + */ + added?: Array; + /** + * Tags that were successfully removed (for remove operation) + */ + removed?: Array; + /** + * Tags that were already present (for add operation) + */ + already_present?: Array; + /** + * Tags that were not present (for remove operation) + */ + not_present?: Array; + /** + * All tags on the asset after the operation + */ + total_tags: Array; +}; /** * Details of a single validation error encountered during asset operations. */ export type ValidationError = { - /** - * Machine-readable error code - */ - code: string - /** - * Human-readable error message - */ - message: string - /** - * Field that failed validation - */ - field: string -} + /** + * Machine-readable error code + */ + code: string; + /** + * Human-readable error message + */ + message: string; + /** + * Field that failed validation + */ + field: string; +}; /** * Result of validating a set of asset operations. */ export type ValidationResult = { - /** - * Overall validation status (true if all checks passed) - */ - is_valid: boolean - /** - * Blocking validation errors that prevent download - */ - errors?: Array - /** - * Non-blocking validation warnings (informational only) - */ - warnings?: Array -} + /** + * Overall validation status (true if all checks passed) + */ + is_valid: boolean; + /** + * Blocking validation errors that prevent download + */ + errors?: Array; + /** + * Non-blocking validation warnings (informational only) + */ + warnings?: Array; +}; /** * Acknowledgement of an async asset download task; clients poll GET /api/tasks/{task_id} for status. */ export type AssetDownloadResponse = { - /** - * Task ID for tracking download progress via GET /api/tasks/{task_id} - */ - task_id: string - /** - * Current task status - */ - status: 'created' | 'running' | 'completed' | 'failed' - /** - * Human-readable message - */ - message?: string -} + /** + * Task ID for tracking download progress via GET /api/tasks/{task_id} + */ + task_id: string; + /** + * Current task status + */ + status: 'created' | 'running' | 'completed' | 'failed'; + /** + * Human-readable message + */ + message?: string; +}; /** * Metadata for a remotely hosted asset resolved by URL. */ export type AssetMetadataResponse = { - /** - * Size of the asset in bytes (-1 if unknown) - */ - content_length: number - /** - * MIME type of the asset - */ - content_type?: string - /** - * Suggested filename for the asset from source - */ - filename?: string - /** - * Display name or title for the asset from source - */ - name?: string - /** - * Tags for categorization from source - */ - tags?: Array - /** - * Preview image as base64-encoded data URL - */ - preview_image?: string - /** - * Validation results for the file - */ - validation?: ValidationResult -} + /** + * Size of the asset in bytes (-1 if unknown) + */ + content_length: number; + /** + * MIME type of the asset + */ + content_type?: string; + /** + * Suggested filename for the asset from source + */ + filename?: string; + /** + * Display name or title for the asset from source + */ + name?: string; + /** + * Tags for categorization from source + */ + tags?: Array; + /** + * Preview image as base64-encoded data URL + */ + preview_image?: string; + /** + * Validation results for the file + */ + validation?: ValidationResult; +}; /** * Histogram of tag counts used for refining asset search results. */ export type AssetTagHistogramResponse = { - /** - * Map of tag names to their occurrence counts on matching assets - */ - tag_counts: { - [key: string]: number - } -} + /** + * Map of tag names to their occurrence counts on matching assets + */ + tag_counts: { + [key: string]: number; + }; +}; /** * Paginated list of available asset tags. */ export type ListTagsResponse = { - /** - * List of tags - */ - tags: Array - /** - * Total number of tags - */ - total: number - /** - * Whether more tags are available - */ - has_more: boolean -} + /** + * List of tags + */ + tags: Array; + /** + * Total number of tags + */ + total: number; + /** + * Whether more tags are available + */ + has_more: boolean; +}; /** * Metadata for a single tag that can be applied to assets. */ export type TagInfo = { - /** - * Tag name - */ - name: string - /** - * Number of assets using this tag - */ - count: number -} + /** + * Tag name + */ + name: string; + /** + * Number of assets using this tag + */ + count: number; +}; /** * Paginated list of assets belonging to the authenticated user. */ export type ListAssetsResponse = { - /** - * List of assets matching the query - */ - assets: Array - /** - * Total number of assets matching the filters - */ - total: number - /** - * Whether more assets are available beyond this page - */ - has_more: boolean -} + /** + * List of assets matching the query + */ + assets: Array; + /** + * Total number of assets matching the filters + */ + total: number; + /** + * Whether more assets are available beyond this page + */ + has_more: boolean; + /** + * Opaque cursor to pass as the `after` query parameter to fetch the + * next page. Omitted from the response when there are no more results. + * + */ + next_cursor?: string; +}; /** * Represents a user-owned asset (image, video, or other generated output). */ export type Asset = { - /** - * Unique identifier for the asset - */ - id: string - /** - * Name of the asset file - */ - name: string - /** - * Blake3 hash of the asset content - */ - asset_hash?: string - /** - * Size of the asset in bytes - */ - size: number - /** - * MIME type of the asset - */ - mime_type?: string - /** - * Tags associated with the asset - */ - tags?: Array - /** - * Custom user metadata for the asset - */ - user_metadata?: { - [key: string]: unknown - } - /** - * System-managed metadata from download sources (HuggingFace, CivitAI, etc.) - read-only, not user-modifiable - */ - readonly metadata?: { - [key: string]: unknown - } - /** - * URL for asset preview/thumbnail - */ - preview_url?: string - /** - * ID of the preview asset if available - */ - preview_id?: string | null - /** - * Deprecated: use job_id instead. ID of the prompt that created this asset, if available - * - * @deprecated - */ - prompt_id?: string | null - /** - * ID of the job that created this asset, if available - */ - job_id?: string | null - /** - * Timestamp when the asset was created - */ - created_at: string - /** - * Timestamp when the asset was last updated - */ - updated_at: string - /** - * Timestamp when the asset was last accessed - */ - last_access_time?: string - /** - * Whether this asset is immutable (cannot be modified or deleted) - */ - is_immutable?: boolean -} + /** + * Unique identifier for the asset + */ + id: string; + /** + * Name of the asset file + */ + name: string; + /** + * Display name of the asset. Mirrors name for backwards compatibility. + */ + display_name?: string | null; + /** + * Blake3 hash of the asset content + */ + asset_hash?: string; + /** + * Size of the asset in bytes + */ + size: number; + /** + * MIME type of the asset + */ + mime_type?: string; + /** + * Tags associated with the asset + */ + tags?: Array; + /** + * Custom user metadata for the asset + */ + user_metadata?: { + [key: string]: unknown; + }; + /** + * System-managed metadata from download sources (HuggingFace, CivitAI, etc.) - read-only, not user-modifiable + */ + readonly metadata?: { + [key: string]: unknown; + }; + /** + * URL for asset preview/thumbnail + */ + preview_url?: string; + /** + * ID of the preview asset if available + */ + preview_id?: string | null; + /** + * Deprecated: use job_id instead. ID of the prompt that created this asset, if available + * + * @deprecated + */ + prompt_id?: string | null; + /** + * ID of the job that created this asset, if available + */ + job_id?: string | null; + /** + * Timestamp when the asset was created + */ + created_at: string; + /** + * Timestamp when the asset was last updated + */ + updated_at: string; + /** + * Timestamp when the asset was last accessed + */ + last_access_time?: string; + /** + * Whether this asset is immutable (cannot be modified or deleted) + */ + is_immutable?: boolean; +}; /** * Response returned when an existing asset is successfully updated. */ export type AssetUpdated = { - /** - * Asset ID - */ - id: string - /** - * Updated name of the asset - */ - name?: string - /** - * Blake3 hash of the asset content - */ - asset_hash?: string - /** - * Tags associated with the asset - */ - tags?: Array - /** - * Updated MIME type of the asset - */ - mime_type?: string - /** - * Updated custom metadata - */ - user_metadata?: { - [key: string]: unknown - } - /** - * Timestamp of the update - */ - updated_at: string -} + /** + * Asset ID + */ + id: string; + /** + * Updated name of the asset + */ + name?: string; + /** + * Display name of the asset. Mirrors name for backwards compatibility. + */ + display_name?: string | null; + /** + * Blake3 hash of the asset content + */ + asset_hash?: string; + /** + * Tags associated with the asset + */ + tags?: Array; + /** + * Updated MIME type of the asset + */ + mime_type?: string; + /** + * Updated custom metadata + */ + user_metadata?: { + [key: string]: unknown; + }; + /** + * Timestamp of the update + */ + updated_at: string; +}; /** * Response returned when a new asset is successfully created. */ export type AssetCreated = Asset & { - /** - * Whether this was a new asset creation (true) or returned existing (false) - */ - created_new: boolean -} + /** + * Whether this was a new asset creation (true) or returned existing (false) + */ + created_new: boolean; +}; /** * Response after updating the review status of a Hub workflow. */ export type SetReviewStatusResponse = { - /** - * The share IDs that were submitted for review - */ - share_ids: Array - /** - * The applied review status - */ - status: 'approved' | 'rejected' -} + /** + * The share IDs that were submitted for review + */ + share_ids: Array; + /** + * The applied review status + */ + status: 'approved' | 'rejected'; +}; /** * Request body for setting the review status of a Hub workflow. */ export type SetReviewStatusRequest = { - /** - * The share IDs of the hub workflows to review - */ - share_ids: Array - /** - * The review decision for the workflows - */ - status: 'approved' | 'rejected' -} + /** + * The share IDs of the hub workflows to review + */ + share_ids: Array; + /** + * The review decision for the workflows + */ + status: 'approved' | 'rejected'; +}; /** * Response after deleting a session cookie */ export type DeleteSessionResponse = { - /** - * Whether the session was deleted successfully - */ - success: boolean -} + /** + * Whether the session was deleted successfully + */ + success: boolean; +}; /** * Response after creating a session cookie */ export type CreateSessionResponse = { - /** - * Whether the session was created successfully - */ - success: boolean - /** - * Session expiration time in seconds (5 days) - */ - expiresIn?: number -} + /** + * Whether the session was created successfully + */ + success: boolean; + /** + * Session expiration time in seconds (5 days) + */ + expiresIn?: number; +}; /** * User information response */ export type UserResponse = { - /** - * Firebase UID of the authenticated user - */ - id: string - /** - * User status (always "active" for authenticated users) - */ - status: string -} + /** + * Firebase UID of the authenticated user + */ + id: string; + /** + * User status (always "active" for authenticated users) + */ + status: string; +}; /** * System statistics response */ export type SystemStatsResponse = { - system: { - /** - * Operating system - */ - os: string - /** - * Python version - */ - python_version: string - /** - * Whether using embedded Python - */ - embedded_python: boolean - /** - * ComfyUI version - */ - comfyui_version: string - /** - * ComfyUI frontend version (commit hash or tag) - */ - comfyui_frontend_version?: string - /** - * Workflow templates version - */ - workflow_templates_version?: string - /** - * Cloud ingest service version (commit hash) - */ - cloud_version?: string - /** - * PyTorch version - */ - pytorch_version: string - /** - * Command line arguments - */ - argv: Array - /** - * Total RAM in bytes - */ - ram_total: number - /** - * Free RAM in bytes - */ - ram_free: number - } - devices: Array<{ - /** - * Device name - */ - name: string - /** - * Device type - */ - type: string - /** - * Total VRAM in bytes - */ - vram_total?: number - /** - * Free VRAM in bytes - */ - vram_free?: number - }> -} + system: { + /** + * Operating system + */ + os: string; + /** + * Python version + */ + python_version: string; + /** + * Whether using embedded Python + */ + embedded_python: boolean; + /** + * ComfyUI version + */ + comfyui_version: string; + /** + * ComfyUI frontend version (commit hash or tag) + */ + comfyui_frontend_version?: string; + /** + * Workflow templates version + */ + workflow_templates_version?: string; + /** + * Cloud ingest service version (commit hash) + */ + cloud_version?: string; + /** + * PyTorch version + */ + pytorch_version: string; + /** + * Command line arguments + */ + argv: Array; + /** + * Total RAM in bytes + */ + ram_total: number; + /** + * Free RAM in bytes + */ + ram_free: number; + }; + devices: Array<{ + /** + * Device name + */ + name: string; + /** + * Device type + */ + type: string; + /** + * Total VRAM in bytes + */ + vram_total?: number; + /** + * Free VRAM in bytes + */ + vram_free?: number; + }>; +}; /** * System logs response */ export type LogsResponse = Array<{ - /** - * When the log entry was created - */ - timestamp?: string - /** - * Log level - */ - level?: 'debug' | 'info' | 'warn' | 'error' - /** - * Log message - */ - message?: string - /** - * Source of the log entry - */ - source?: string - /** - * Additional log metadata - */ - metadata?: { - [key: string]: unknown - } -}> + /** + * When the log entry was created + */ + timestamp?: string; + /** + * Log level + */ + level?: 'debug' | 'info' | 'warn' | 'error'; + /** + * Log message + */ + message?: string; + /** + * Source of the log entry + */ + source?: string; + /** + * Additional log metadata + */ + metadata?: { + [key: string]: unknown; + }; +}>; /** * Response after submitting feedback */ export type FeedbackResponse = { - [key: string]: unknown -} + [key: string]: unknown; +}; /** * Request to submit user feedback */ export type FeedbackRequest = { - /** - * Type of feedback being submitted - */ - type: 'missing_nodes' | 'general' | 'missing_models' - /** - * The feedback content or message - */ - content?: string - /** - * User's rating of ComfyUI Cloud experience (1-5 stars) - */ - rating?: number - /** - * Additional metadata about the feedback - */ - metadata?: { - [key: string]: unknown - } -} + /** + * Type of feedback being submitted + */ + type: 'missing_nodes' | 'general' | 'missing_models'; + /** + * The feedback content or message + */ + content?: string; + /** + * User's rating of ComfyUI Cloud experience (1-5 stars) + */ + rating?: number; + /** + * Additional metadata about the feedback + */ + metadata?: { + [key: string]: unknown; + }; +}; /** * Represents a model file with metadata */ export type ModelFile = { - /** - * The filename of the model - */ - name: string - /** - * Index of the path where this model is located - */ - pathIndex: number -} + /** + * The filename of the model + */ + name: string; + /** + * Index of the path where this model is located + */ + pathIndex: number; +}; /** * Represents a folder containing models */ export type ModelFolder = { - /** - * The name of the model folder - */ - name: string - /** - * List of paths where models of this type are stored - */ - folders: Array -} + /** + * The name of the model folder + */ + name: string; + /** + * List of paths where models of this type are stored + */ + folders: Array; +}; /** * Error response for ComfyUI prompt execution. */ export type PromptErrorResponse = { - [key: string]: unknown -} + [key: string]: unknown; +}; /** * Individual file entry within a full user data response. */ export type GetUserDataResponseFullFile = { - /** - * File name or path relative to the user directory. - */ - path?: string - /** - * File size in bytes. - */ - size?: number - /** - * UNIX timestamp of the last modification in milliseconds. - */ - modified?: number -} + /** + * File name or path relative to the user directory. + */ + path?: string; + /** + * File size in bytes. + */ + size?: number; + /** + * UNIX timestamp of the last modification in milliseconds. + */ + modified?: number; +}; /** * List of user data file entries (each with path, size, and modification time) returned when full_info=true. */ -export type GetUserDataResponseFull = Array +export type GetUserDataResponseFull = Array; /** * User data listing entry with file metadata (path, size, modification time). */ export type UserDataResponseFull = { - path?: string - size?: number - /** - * UNIX timestamp of the last modification in milliseconds. - */ - modified?: number -} + path?: string; + size?: number; + /** + * UNIX timestamp of the last modification in milliseconds. + */ + modified?: number; +}; /** * Request to manage history operations */ export type HistoryManageRequest = { - /** - * Array of job IDs to delete from history - */ - delete?: Array - /** - * If true, clear all history for the authenticated user - */ - clear?: boolean -} + /** + * Array of job IDs to delete from history + */ + delete?: Array; + /** + * If true, clear all history for the authenticated user + */ + clear?: boolean; +}; /** * Job status information */ export type JobStatusResponse = { - /** - * The job ID - */ - id: string - /** - * Current job status - */ - status: - | 'waiting_to_dispatch' - | 'pending' - | 'in_progress' - | 'completed' - | 'error' - | 'cancelled' - /** - * When the job was created - */ - created_at: string - /** - * When the job was last updated - */ - updated_at: string - /** - * When the job status was last changed - */ - last_state_update?: string - /** - * The inference instance assigned to this job (if any) - */ - assigned_inference?: string | null - /** - * Error message if the job failed - */ - error_message?: string | null -} + /** + * The job ID + */ + id: string; + /** + * Current job status + */ + status: 'waiting_to_dispatch' | 'pending' | 'in_progress' | 'completed' | 'error' | 'cancelled'; + /** + * When the job was created + */ + created_at: string; + /** + * When the job was last updated + */ + updated_at: string; + /** + * When the job status was last changed + */ + last_state_update?: string; + /** + * The inference instance assigned to this job (if any) + */ + assigned_inference?: string | null; + /** + * Error message if the job failed + */ + error_message?: string | null; +}; /** * Response after a queue management action (delete or clear). */ export type QueueManageResponse = { - /** - * Array of job IDs that were successfully cancelled - */ - deleted?: Array - /** - * Whether the queue was cleared - */ - cleared?: boolean -} + /** + * Array of job IDs that were successfully cancelled + */ + deleted?: Array; + /** + * Whether the queue was cleared + */ + cleared?: boolean; +}; /** * Request to manage queue operations */ export type QueueManageRequest = { - /** - * Array of PENDING job IDs to cancel - */ - delete?: Array - /** - * If true, clear all pending jobs from the queue - */ - clear?: boolean -} + /** + * Array of PENDING job IDs to cancel + */ + delete?: Array; + /** + * If true, clear all pending jobs from the queue + */ + clear?: boolean; +}; /** * Queue information with pending and running jobs */ export type QueueInfo = { - /** - * Array of currently running job items - */ - queue_running?: Array<[unknown, unknown, unknown, unknown, unknown]> - /** - * Array of pending job items (ordered by creation time, oldest first) - */ - queue_pending?: Array<[unknown, unknown, unknown, unknown, unknown]> -} + /** + * Array of currently running job items + */ + queue_running?: Array<[ + unknown, + unknown, + unknown, + unknown, + unknown + ]>; + /** + * Array of pending job items (ordered by creation time, oldest first) + */ + queue_pending?: Array<[ + unknown, + unknown, + unknown, + unknown, + unknown + ]>; +}; /** * Detailed execution history response for a specific prompt. @@ -2761,116 +3012,116 @@ export type QueueInfo = { * */ export type HistoryDetailResponse = { - [key: string]: HistoryDetailEntry -} + [key: string]: HistoryDetailEntry; +}; /** * History entry with full prompt data */ export type HistoryDetailEntry = { - /** - * Full prompt execution data - */ - prompt?: { /** - * Execution priority - */ - priority?: number - /** - * The prompt ID - */ - prompt_id?: string - /** - * The workflow nodes + * Full prompt execution data */ prompt?: { - [key: string]: unknown - } + /** + * Execution priority + */ + priority?: number; + /** + * The prompt ID + */ + prompt_id?: string; + /** + * The workflow nodes + */ + prompt?: { + [key: string]: unknown; + }; + /** + * Additional execution data + */ + extra_data?: { + [key: string]: unknown; + }; + /** + * Output nodes to execute + */ + outputs_to_execute?: Array; + }; /** - * Additional execution data + * Output data from execution (generated images, files, etc.) */ - extra_data?: { - [key: string]: unknown - } + outputs?: { + [key: string]: unknown; + }; /** - * Output nodes to execute + * Execution status and timeline information */ - outputs_to_execute?: Array - } - /** - * Output data from execution (generated images, files, etc.) - */ - outputs?: { - [key: string]: unknown - } - /** - * Execution status and timeline information - */ - status?: { - [key: string]: unknown - } - /** - * Metadata about the execution and nodes - */ - meta?: { - [key: string]: unknown - } -} + status?: { + [key: string]: unknown; + }; + /** + * Metadata about the execution and nodes + */ + meta?: { + [key: string]: unknown; + }; +}; /** * History entry with prompt_id and execution data */ export type HistoryEntry = { - /** - * Unique identifier for this prompt execution - */ - prompt_id: string - /** - * Job creation timestamp (Unix timestamp in milliseconds) - */ - create_time?: number - /** - * UUID identifying the workflow graph definition - */ - workflow_id?: string - /** - * Filtered prompt execution data (lightweight format) - */ - prompt?: { /** - * Execution priority + * Unique identifier for this prompt execution */ - priority?: number + prompt_id: string; /** - * The prompt ID + * Job creation timestamp (Unix timestamp in milliseconds) */ - prompt_id?: string + create_time?: number; /** - * Additional execution data (workflow removed from extra_pnginfo) + * UUID identifying the workflow graph definition */ - extra_data?: { - [key: string]: unknown - } - } - /** - * Output data from execution (generated images, files, etc.) - */ - outputs?: { - [key: string]: unknown - } - /** - * Execution status and timeline information - */ - status?: { - [key: string]: unknown - } - /** - * Metadata about the execution and nodes - */ - meta?: { - [key: string]: unknown - } -} + workflow_id?: string; + /** + * Filtered prompt execution data (lightweight format) + */ + prompt?: { + /** + * Execution priority + */ + priority?: number; + /** + * The prompt ID + */ + prompt_id?: string; + /** + * Additional execution data (workflow removed from extra_pnginfo) + */ + extra_data?: { + [key: string]: unknown; + }; + }; + /** + * Output data from execution (generated images, files, etc.) + */ + outputs?: { + [key: string]: unknown; + }; + /** + * Execution status and timeline information + */ + status?: { + [key: string]: unknown; + }; + /** + * Metadata about the execution and nodes + */ + meta?: { + [key: string]: unknown; + }; +}; /** * Execution history response with history array. @@ -2879,6473 +3130,6502 @@ export type HistoryEntry = { * */ export type HistoryResponse = { - /** - * Array of history entries ordered by creation time (newest first) - */ - history: Array -} + /** + * Array of history entries ordered by creation time (newest first) + */ + history: Array; +}; /** * Full data for a global subgraph blueprint */ export type GlobalSubgraphData = { - /** - * Source type of the subgraph - "templates" for workflow templates or "custom_node" for custom node subgraphs - */ - source: string - /** - * Display name of the subgraph blueprint - */ - name: string - /** - * Additional information about the subgraph - */ - info: { /** - * The node pack/module that provides this subgraph + * Source type of the subgraph - "templates" for workflow templates or "custom_node" for custom node subgraphs */ - node_pack: string - } - /** - * The full subgraph JSON data as a string - */ - data: string -} + source: string; + /** + * Display name of the subgraph blueprint + */ + name: string; + /** + * Additional information about the subgraph + */ + info: { + /** + * The node pack/module that provides this subgraph + */ + node_pack: string; + }; + /** + * The full subgraph JSON data as a string + */ + data: string; +}; /** * Metadata for a global subgraph blueprint (without full data) */ export type GlobalSubgraphInfo = { - /** - * Source type of the subgraph - "templates" for workflow templates or "custom_node" for custom node subgraphs - */ - source: string - /** - * Display name of the subgraph blueprint - */ - name: string - /** - * Additional information about the subgraph - */ - info: { /** - * The node pack/module that provides this subgraph + * Source type of the subgraph - "templates" for workflow templates or "custom_node" for custom node subgraphs */ - node_pack: string - } - /** - * The full subgraph JSON data (may be empty in list view) - */ - data?: string -} + source: string; + /** + * Display name of the subgraph blueprint + */ + name: string; + /** + * Additional information about the subgraph + */ + info: { + /** + * The node pack/module that provides this subgraph + */ + node_pack: string; + }; + /** + * The full subgraph JSON data (may be empty in list view) + */ + data?: string; +}; /** * Metadata describing a single ComfyUI node type and its inputs/outputs. */ export type NodeInfo = { - /** - * Input specifications for the node - */ - input?: { - [key: string]: unknown - } - /** - * Order of inputs for display - */ - input_order?: { - [key: string]: Array - } - /** - * Output types of the node - */ - output?: Array - /** - * Whether each output is a list - */ - output_is_list?: Array - /** - * Names of the outputs - */ - output_name?: Array - /** - * Internal name of the node - */ - name?: string - /** - * Display name of the node - */ - display_name?: string - /** - * Description of the node - */ - description?: string - /** - * Python module implementing the node - */ - python_module?: string - /** - * Category of the node - */ - category?: string - /** - * Whether this is an output node - */ - output_node?: boolean - /** - * Tooltips for outputs - */ - output_tooltips?: Array - /** - * Whether the node is deprecated - */ - deprecated?: boolean - /** - * Whether the node is experimental - */ - experimental?: boolean - /** - * Whether this is an API node - */ - api_node?: boolean -} + /** + * Input specifications for the node + */ + input?: { + [key: string]: unknown; + }; + /** + * Order of inputs for display + */ + input_order?: { + [key: string]: Array; + }; + /** + * Output types of the node + */ + output?: Array; + /** + * Whether each output is a list + */ + output_is_list?: Array; + /** + * Names of the outputs + */ + output_name?: Array; + /** + * Internal name of the node + */ + name?: string; + /** + * Display name of the node + */ + display_name?: string; + /** + * Description of the node + */ + description?: string; + /** + * Python module implementing the node + */ + python_module?: string; + /** + * Category of the node + */ + category?: string; + /** + * Whether this is an output node + */ + output_node?: boolean; + /** + * Tooltips for outputs + */ + output_tooltips?: Array; + /** + * Whether the node is deprecated + */ + deprecated?: boolean; + /** + * Whether the node is experimental + */ + experimental?: boolean; + /** + * Whether this is an API node + */ + api_node?: boolean; +}; /** * Metadata about the currently running and queued prompts. */ export type PromptInfo = { - exec_info?: { - /** - * Number of items remaining in the queue - */ - queue_remaining?: number - } -} + exec_info?: { + /** + * Number of items remaining in the queue + */ + queue_remaining?: number; + }; +}; /** * Response containing a signed download URL for an exported asset archive. */ export type ExportDownloadUrlResponse = { - /** - * Signed URL for downloading the export ZIP file - */ - url: string - /** - * When the signed URL expires - */ - expires_at?: string -} - -/** - * Error shape returned when request binding or validation fails before the handler runs. - */ -export type BindingErrorResponse = { - message: string -} + /** + * Signed URL for downloading the export ZIP file + */ + url: string; + /** + * When the signed URL expires + */ + expires_at?: string; +}; /** * Standard error response with a machine-readable code and human-readable message. */ export type ErrorResponse = { - code: string - message: string -} + code: string; + message: string; +}; /** * Response returned after successfully queuing a workflow prompt. */ export type PromptResponse = { - /** - * Unique identifier for the prompt execution - */ - prompt_id?: string - /** - * Priority number in the queue - */ - number?: number - /** - * Any errors in the nodes of the prompt - */ - node_errors?: { - [key: string]: unknown - } -} + /** + * Unique identifier for the prompt execution + */ + prompt_id?: string; + /** + * Priority number in the queue + */ + number?: number; + /** + * Any errors in the nodes of the prompt + */ + node_errors?: { + [key: string]: unknown; + }; +}; /** * Request body for submitting a ComfyUI workflow prompt for execution. */ export type PromptRequest = { - /** - * The workflow graph to execute - */ - prompt: { - [key: string]: unknown - } - /** - * Priority number for the queue (lower numbers have higher priority) - */ - number?: number - /** - * If true, adds the prompt to the front of the queue - */ - front?: boolean - /** - * Extra data to be associated with the prompt - */ - extra_data?: { - [key: string]: unknown - } - /** - * List of node names to execute - */ - partial_execution_targets?: Array - /** - * UUID identifying the cloud workflow entity to associate with this job - */ - workflow_id?: string - /** - * UUID identifying the workflow version to associate with this job - */ - workflow_version_id?: string -} + /** + * The workflow graph to execute + */ + prompt: { + [key: string]: unknown; + }; + /** + * Priority number for the queue (lower numbers have higher priority) + */ + number?: number; + /** + * If true, adds the prompt to the front of the queue + */ + front?: boolean; + /** + * Extra data to be associated with the prompt + */ + extra_data?: { + [key: string]: unknown; + }; + /** + * List of node names to execute + */ + partial_execution_targets?: Array; + /** + * UUID identifying the cloud workflow entity to associate with this job + */ + workflow_id?: string; + /** + * UUID identifying the workflow version to associate with this job + */ + workflow_version_id?: string; +}; /** * Paginated list of assets belonging to the authenticated user. */ export type ListAssetsResponseWritable = { - /** - * List of assets matching the query - */ - assets: Array - /** - * Total number of assets matching the filters - */ - total: number - /** - * Whether more assets are available beyond this page - */ - has_more: boolean -} + /** + * List of assets matching the query + */ + assets: Array; + /** + * Total number of assets matching the filters + */ + total: number; + /** + * Whether more assets are available beyond this page + */ + has_more: boolean; + /** + * Opaque cursor to pass as the `after` query parameter to fetch the + * next page. Omitted from the response when there are no more results. + * + */ + next_cursor?: string; +}; /** * Represents a user-owned asset (image, video, or other generated output). */ export type AssetWritable = { - /** - * Unique identifier for the asset - */ - id: string - /** - * Name of the asset file - */ - name: string - /** - * Blake3 hash of the asset content - */ - asset_hash?: string - /** - * Size of the asset in bytes - */ - size: number - /** - * MIME type of the asset - */ - mime_type?: string - /** - * Tags associated with the asset - */ - tags?: Array - /** - * Custom user metadata for the asset - */ - user_metadata?: { - [key: string]: unknown - } - /** - * URL for asset preview/thumbnail - */ - preview_url?: string - /** - * ID of the preview asset if available - */ - preview_id?: string | null - /** - * Deprecated: use job_id instead. ID of the prompt that created this asset, if available - * - * @deprecated - */ - prompt_id?: string | null - /** - * ID of the job that created this asset, if available - */ - job_id?: string | null - /** - * Timestamp when the asset was created - */ - created_at: string - /** - * Timestamp when the asset was last updated - */ - updated_at: string - /** - * Timestamp when the asset was last accessed - */ - last_access_time?: string - /** - * Whether this asset is immutable (cannot be modified or deleted) - */ - is_immutable?: boolean -} + /** + * Unique identifier for the asset + */ + id: string; + /** + * Name of the asset file + */ + name: string; + /** + * Display name of the asset. Mirrors name for backwards compatibility. + */ + display_name?: string | null; + /** + * Blake3 hash of the asset content + */ + asset_hash?: string; + /** + * Size of the asset in bytes + */ + size: number; + /** + * MIME type of the asset + */ + mime_type?: string; + /** + * Tags associated with the asset + */ + tags?: Array; + /** + * Custom user metadata for the asset + */ + user_metadata?: { + [key: string]: unknown; + }; + /** + * URL for asset preview/thumbnail + */ + preview_url?: string; + /** + * ID of the preview asset if available + */ + preview_id?: string | null; + /** + * Deprecated: use job_id instead. ID of the prompt that created this asset, if available + * + * @deprecated + */ + prompt_id?: string | null; + /** + * ID of the job that created this asset, if available + */ + job_id?: string | null; + /** + * Timestamp when the asset was created + */ + created_at: string; + /** + * Timestamp when the asset was last updated + */ + updated_at: string; + /** + * Timestamp when the asset was last accessed + */ + last_access_time?: string; + /** + * Whether this asset is immutable (cannot be modified or deleted) + */ + is_immutable?: boolean; +}; /** * Response returned when a new asset is successfully created. */ export type AssetCreatedWritable = AssetWritable & { - /** - * Whether this was a new asset creation (true) or returned existing (false) - */ - created_new: boolean -} + /** + * Whether this was a new asset creation (true) or returned existing (false) + */ + created_new: boolean; +}; /** * Response after submitting feedback */ export type FeedbackResponseWritable = { - [key: string]: unknown -} + [key: string]: unknown; +}; export type GetPromptInfoData = { - body?: never - path?: never - query?: never - url: '/api/prompt' -} + body?: never; + path?: never; + query?: never; + url: '/api/prompt'; +}; export type GetPromptInfoErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetPromptInfoError = GetPromptInfoErrors[keyof GetPromptInfoErrors] +export type GetPromptInfoError = GetPromptInfoErrors[keyof GetPromptInfoErrors]; export type GetPromptInfoResponses = { - /** - * Success - */ - 200: PromptInfo -} + /** + * Success + */ + 200: PromptInfo; +}; -export type GetPromptInfoResponse = - GetPromptInfoResponses[keyof GetPromptInfoResponses] +export type GetPromptInfoResponse = GetPromptInfoResponses[keyof GetPromptInfoResponses]; export type ExecutePromptData = { - body: PromptRequest - path?: never - query?: never - url: '/api/prompt' -} + body: PromptRequest; + path?: never; + query?: never; + url: '/api/prompt'; +}; export type ExecutePromptErrors = { - /** - * Invalid prompt - */ - 400: PromptErrorResponse - /** - * Payment required - Insufficient credits - */ - 402: PromptErrorResponse - /** - * Payment required - User has not paid - */ - 429: PromptErrorResponse - /** - * Internal server error - */ - 500: PromptErrorResponse - /** - * Service unavailable - */ - 503: PromptErrorResponse -} + /** + * Invalid prompt + */ + 400: PromptErrorResponse; + /** + * Payment required - Insufficient credits + */ + 402: PromptErrorResponse; + /** + * Payment required - User has not paid + */ + 429: PromptErrorResponse; + /** + * Internal server error + */ + 500: PromptErrorResponse; + /** + * Service unavailable + */ + 503: PromptErrorResponse; +}; -export type ExecutePromptError = ExecutePromptErrors[keyof ExecutePromptErrors] +export type ExecutePromptError = ExecutePromptErrors[keyof ExecutePromptErrors]; export type ExecutePromptResponses = { - /** - * Success - Prompt accepted - */ - 200: PromptResponse -} + /** + * Success - Prompt accepted + */ + 200: PromptResponse; +}; -export type ExecutePromptResponse = - ExecutePromptResponses[keyof ExecutePromptResponses] +export type ExecutePromptResponse = ExecutePromptResponses[keyof ExecutePromptResponses]; export type GetNodeInfoData = { - body?: never - path?: never - query?: never - url: '/api/object_info' -} + body?: never; + path?: never; + query?: never; + url: '/api/object_info'; +}; export type GetNodeInfoResponses = { - /** - * Success - */ - 200: { - [key: string]: NodeInfo - } -} + /** + * Success + */ + 200: { + [key: string]: NodeInfo; + }; +}; -export type GetNodeInfoResponse = - GetNodeInfoResponses[keyof GetNodeInfoResponses] +export type GetNodeInfoResponse = GetNodeInfoResponses[keyof GetNodeInfoResponses]; export type GetFeaturesData = { - body?: never - path?: never - query?: never - url: '/api/features' -} + body?: never; + path?: never; + query?: never; + url: '/api/features'; +}; export type GetFeaturesResponses = { - /** - * Success - */ - 200: { /** - * Whether the server supports preview metadata + * Success */ - supports_preview_metadata?: boolean - /** - * Maximum upload size in bytes - */ - max_upload_size?: number - [key: string]: unknown | boolean | number | undefined - } -} + 200: { + /** + * Whether the server supports preview metadata + */ + supports_preview_metadata?: boolean; + /** + * Maximum upload size in bytes + */ + max_upload_size?: number; + [key: string]: unknown | boolean | number | undefined; + }; +}; -export type GetFeaturesResponse = - GetFeaturesResponses[keyof GetFeaturesResponses] +export type GetFeaturesResponse = GetFeaturesResponses[keyof GetFeaturesResponses]; export type GetNodeReplacementsData = { - body?: never - path?: never - query?: never - url: '/api/node_replacements' -} + body?: never; + path?: never; + query?: never; + url: '/api/node_replacements'; +}; export type GetNodeReplacementsErrors = { - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetNodeReplacementsError = - GetNodeReplacementsErrors[keyof GetNodeReplacementsErrors] +export type GetNodeReplacementsError = GetNodeReplacementsErrors[keyof GetNodeReplacementsErrors]; export type GetNodeReplacementsResponses = { - /** - * Success - Node replacement mappings - */ - 200: { - [key: string]: unknown - } -} + /** + * Success - Node replacement mappings + */ + 200: { + [key: string]: unknown; + }; +}; -export type GetNodeReplacementsResponse = - GetNodeReplacementsResponses[keyof GetNodeReplacementsResponses] +export type GetNodeReplacementsResponse = GetNodeReplacementsResponses[keyof GetNodeReplacementsResponses]; export type GetWorkflowTemplatesData = { - body?: never - path?: never - query?: never - url: '/api/workflow_templates' -} + body?: never; + path?: never; + query?: never; + url: '/api/workflow_templates'; +}; export type GetWorkflowTemplatesResponses = { - /** - * Empty object for workflow templates - */ - 200: { - [key: string]: unknown - } -} + /** + * Empty object for workflow templates + */ + 200: { + [key: string]: unknown; + }; +}; -export type GetWorkflowTemplatesResponse = - GetWorkflowTemplatesResponses[keyof GetWorkflowTemplatesResponses] +export type GetWorkflowTemplatesResponse = GetWorkflowTemplatesResponses[keyof GetWorkflowTemplatesResponses]; export type GetGlobalSubgraphsData = { - body?: never - path?: never - query?: never - url: '/api/global_subgraphs' -} + body?: never; + path?: never; + query?: never; + url: '/api/global_subgraphs'; +}; export type GetGlobalSubgraphsErrors = { - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetGlobalSubgraphsError = - GetGlobalSubgraphsErrors[keyof GetGlobalSubgraphsErrors] +export type GetGlobalSubgraphsError = GetGlobalSubgraphsErrors[keyof GetGlobalSubgraphsErrors]; export type GetGlobalSubgraphsResponses = { - /** - * Success - Map of subgraph IDs to their metadata - */ - 200: { - [key: string]: GlobalSubgraphInfo - } -} + /** + * Success - Map of subgraph IDs to their metadata + */ + 200: { + [key: string]: GlobalSubgraphInfo; + }; +}; -export type GetGlobalSubgraphsResponse = - GetGlobalSubgraphsResponses[keyof GetGlobalSubgraphsResponses] +export type GetGlobalSubgraphsResponse = GetGlobalSubgraphsResponses[keyof GetGlobalSubgraphsResponses]; export type GetGlobalSubgraphData = { - body?: never - path: { - /** - * The unique identifier of the subgraph blueprint - */ - id: string - } - query?: never - url: '/api/global_subgraphs/{id}' -} + body?: never; + path: { + /** + * The unique identifier of the subgraph blueprint + */ + id: string; + }; + query?: never; + url: '/api/global_subgraphs/{id}'; +}; export type GetGlobalSubgraphErrors = { - /** - * Subgraph not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Subgraph not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetGlobalSubgraphError = - GetGlobalSubgraphErrors[keyof GetGlobalSubgraphErrors] +export type GetGlobalSubgraphError = GetGlobalSubgraphErrors[keyof GetGlobalSubgraphErrors]; export type GetGlobalSubgraphResponses = { - /** - * Success - Full subgraph data - */ - 200: GlobalSubgraphData -} + /** + * Success - Full subgraph data + */ + 200: GlobalSubgraphData; +}; -export type GetGlobalSubgraphResponse = - GetGlobalSubgraphResponses[keyof GetGlobalSubgraphResponses] +export type GetGlobalSubgraphResponse = GetGlobalSubgraphResponses[keyof GetGlobalSubgraphResponses]; export type GetModelFoldersData = { - body?: never - path?: never - query?: never - url: '/api/experiment/models' -} + body?: never; + path?: never; + query?: never; + url: '/api/experiment/models'; +}; export type GetModelFoldersErrors = { - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetModelFoldersError = - GetModelFoldersErrors[keyof GetModelFoldersErrors] +export type GetModelFoldersError = GetModelFoldersErrors[keyof GetModelFoldersErrors]; export type GetModelFoldersResponses = { - /** - * Success - List of model folders - */ - 200: Array -} + /** + * Success - List of model folders + */ + 200: Array; +}; -export type GetModelFoldersResponse = - GetModelFoldersResponses[keyof GetModelFoldersResponses] +export type GetModelFoldersResponse = GetModelFoldersResponses[keyof GetModelFoldersResponses]; export type GetModelsInFolderData = { - body?: never - path: { - /** - * The folder name to list models from - */ - folder: string - } - query?: never - url: '/api/experiment/models/{folder}' -} + body?: never; + path: { + /** + * The folder name to list models from + */ + folder: string; + }; + query?: never; + url: '/api/experiment/models/{folder}'; +}; export type GetModelsInFolderErrors = { - /** - * Folder not found or no models in folder - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Folder not found or no models in folder + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetModelsInFolderError = - GetModelsInFolderErrors[keyof GetModelsInFolderErrors] +export type GetModelsInFolderError = GetModelsInFolderErrors[keyof GetModelsInFolderErrors]; export type GetModelsInFolderResponses = { - /** - * Success - List of models in the folder - */ - 200: Array -} + /** + * Success - List of models in the folder + */ + 200: Array; +}; -export type GetModelsInFolderResponse = - GetModelsInFolderResponses[keyof GetModelsInFolderResponses] +export type GetModelsInFolderResponse = GetModelsInFolderResponses[keyof GetModelsInFolderResponses]; export type GetModelPreviewData = { - body?: never - path: { - /** - * The folder name containing the model - */ - folder: string - /** - * The path index (usually 0 for cloud service) - */ - path_index: number - /** - * The model filename (with or without .webp extension) - */ - filename: string - } - query?: never - url: '/api/experiment/models/preview/{folder}/{path_index}/{filename}' -} + body?: never; + path: { + /** + * The folder name containing the model + */ + folder: string; + /** + * The path index (usually 0 for cloud service) + */ + path_index: number; + /** + * The model filename (with or without .webp extension) + */ + filename: string; + }; + query?: never; + url: '/api/experiment/models/preview/{folder}/{path_index}/{filename}'; +}; export type GetModelPreviewErrors = { - /** - * Model not found or preview not available - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Model not found or preview not available + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetModelPreviewError = - GetModelPreviewErrors[keyof GetModelPreviewErrors] +export type GetModelPreviewError = GetModelPreviewErrors[keyof GetModelPreviewErrors]; export type GetModelPreviewResponses = { - /** - * Success - Model preview image - */ - 200: Blob | File -} + /** + * Success - Model preview image + */ + 200: Blob | File; +}; -export type GetModelPreviewResponse = - GetModelPreviewResponses[keyof GetModelPreviewResponses] +export type GetModelPreviewResponse = GetModelPreviewResponses[keyof GetModelPreviewResponses]; export type GetLegacyHistoryData = { - body?: never - path?: never - query?: never - url: '/api/history' -} + body?: never; + path?: never; + query?: never; + url: '/api/history'; +}; export type GetLegacyHistoryErrors = { - /** - * Not Found — use /api/history_v2 instead - */ - 404: unknown -} + /** + * Not Found — use /api/history_v2 instead + */ + 404: unknown; +}; export type ManageHistoryData = { - body: HistoryManageRequest - path?: never - query?: never - url: '/api/history' -} + body: HistoryManageRequest; + path?: never; + query?: never; + url: '/api/history'; +}; export type ManageHistoryErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ManageHistoryError = ManageHistoryErrors[keyof ManageHistoryErrors] +export type ManageHistoryError = ManageHistoryErrors[keyof ManageHistoryErrors]; export type ManageHistoryResponses = { - /** - * Success - History management operation completed - */ - 200: unknown -} + /** + * Success - History management operation completed + */ + 200: unknown; +}; export type GetHistoryData = { - body?: never - path?: never - query?: { - /** - * Maximum number of items to return - */ - max_items?: number - /** - * Starting position (default 0) - */ - offset?: number - } - url: '/api/history_v2' -} + body?: never; + path?: never; + query?: { + /** + * Maximum number of items to return + */ + max_items?: number; + /** + * Starting position (default 0) + */ + offset?: number; + }; + url: '/api/history_v2'; +}; export type GetHistoryErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetHistoryError = GetHistoryErrors[keyof GetHistoryErrors] +export type GetHistoryError = GetHistoryErrors[keyof GetHistoryErrors]; export type GetHistoryResponses = { - /** - * Success - Execution history retrieved - */ - 200: HistoryResponse -} + /** + * Success - Execution history retrieved + */ + 200: HistoryResponse; +}; -export type GetHistoryResponse = GetHistoryResponses[keyof GetHistoryResponses] +export type GetHistoryResponse = GetHistoryResponses[keyof GetHistoryResponses]; export type GetHistoryForPromptData = { - body?: never - path: { - /** - * The prompt ID to retrieve history for - */ - prompt_id: string - } - query?: never - url: '/api/history_v2/{prompt_id}' -} + body?: never; + path: { + /** + * The prompt ID to retrieve history for + */ + prompt_id: string; + }; + query?: never; + url: '/api/history_v2/{prompt_id}'; +}; export type GetHistoryForPromptErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Prompt not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Prompt not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetHistoryForPromptError = - GetHistoryForPromptErrors[keyof GetHistoryForPromptErrors] +export type GetHistoryForPromptError = GetHistoryForPromptErrors[keyof GetHistoryForPromptErrors]; export type GetHistoryForPromptResponses = { - /** - * Success - History for prompt retrieved - */ - 200: HistoryDetailResponse -} + /** + * Success - History for prompt retrieved + */ + 200: HistoryDetailResponse; +}; -export type GetHistoryForPromptResponse = - GetHistoryForPromptResponses[keyof GetHistoryForPromptResponses] +export type GetHistoryForPromptResponse = GetHistoryForPromptResponses[keyof GetHistoryForPromptResponses]; export type ListJobsData = { - body?: never - path?: never - query?: { - /** - * Filter by one or more statuses (comma-separated). If not provided, returns all jobs. - */ - status?: string - /** - * Filter by workflow ID (exact match) - */ - workflow_id?: string - /** - * Filter by output media type (only applies to completed jobs with outputs) - */ - output_type?: 'image' | 'video' | 'audio' | '3d' - /** - * Field to sort by (create_time = when job was submitted, execution_time = how long workflow took to run) - */ - sort_by?: 'create_time' | 'execution_time' - /** - * Sort direction (asc = ascending, desc = descending) - */ - sort_order?: 'asc' | 'desc' - /** - * Pagination offset (0-based) - */ - offset?: number - /** - * Maximum items per page (1-1000) - */ - limit?: number - } - url: '/api/jobs' -} + body?: never; + path?: never; + query?: { + /** + * Filter by one or more statuses (comma-separated). If not provided, returns all jobs. + */ + status?: string; + /** + * Filter by workflow ID (exact match) + */ + workflow_id?: string; + /** + * Filter by output media type (only applies to completed jobs with outputs) + */ + output_type?: 'image' | 'video' | 'audio' | '3d'; + /** + * Field to sort by (create_time = when job was submitted, execution_time = how long workflow took to run) + */ + sort_by?: 'create_time' | 'execution_time'; + /** + * Sort direction (asc = ascending, desc = descending) + */ + sort_order?: 'asc' | 'desc'; + /** + * Pagination offset (0-based) + */ + offset?: number; + /** + * Maximum items per page (1-1000) + */ + limit?: number; + }; + url: '/api/jobs'; +}; export type ListJobsErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListJobsError = ListJobsErrors[keyof ListJobsErrors] +export type ListJobsError = ListJobsErrors[keyof ListJobsErrors]; export type ListJobsResponses = { - /** - * Success - Jobs retrieved - */ - 200: JobsListResponse -} + /** + * Success - Jobs retrieved + */ + 200: JobsListResponse; +}; -export type ListJobsResponse = ListJobsResponses[keyof ListJobsResponses] +export type ListJobsResponse = ListJobsResponses[keyof ListJobsResponses]; export type GetJobDetailData = { - body?: never - path: { - /** - * Job identifier (UUID) - */ - job_id: string - } - query?: never - url: '/api/jobs/{job_id}' -} + body?: never; + path: { + /** + * Job identifier (UUID) + */ + job_id: string; + }; + query?: never; + url: '/api/jobs/{job_id}'; +}; export type GetJobDetailErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Forbidden - Job does not belong to user - */ - 403: ErrorResponse - /** - * Job not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Forbidden - Job does not belong to user + */ + 403: ErrorResponse; + /** + * Job not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetJobDetailError = GetJobDetailErrors[keyof GetJobDetailErrors] +export type GetJobDetailError = GetJobDetailErrors[keyof GetJobDetailErrors]; export type GetJobDetailResponses = { - /** - * Success - Job details retrieved - */ - 200: JobDetailResponse -} + /** + * Success - Job details retrieved + */ + 200: JobDetailResponse; +}; -export type GetJobDetailResponse = - GetJobDetailResponses[keyof GetJobDetailResponses] +export type GetJobDetailResponse = GetJobDetailResponses[keyof GetJobDetailResponses]; export type CancelJobData = { - body?: never - path: { - /** - * Job identifier (UUID) - */ - job_id: string - } - query?: never - url: '/api/jobs/{job_id}/cancel' -} + body?: never; + path: { + /** + * Job identifier (UUID) + */ + job_id: string; + }; + query?: never; + url: '/api/jobs/{job_id}/cancel'; +}; export type CancelJobErrors = { - /** - * Bad Request - job_id is not a valid UUID (emitted by request validation before the handler runs) - */ - 400: BindingErrorResponse - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Job not found for this user - */ - 404: ErrorResponse - /** - * Internal server error - cancellation failed - */ - 500: ErrorResponse -} + /** + * Bad Request - job_id is not a valid UUID (emitted by request validation before the handler runs) + */ + 400: BindingErrorResponse; + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Job not found for this user + */ + 404: ErrorResponse; + /** + * Internal server error - cancellation failed + */ + 500: ErrorResponse; +}; -export type CancelJobError = CancelJobErrors[keyof CancelJobErrors] +export type CancelJobError = CancelJobErrors[keyof CancelJobErrors]; export type CancelJobResponses = { - /** - * Success - Cancel request accepted (or job was already terminal) - */ - 200: JobCancelResponse -} + /** + * Success - Cancel request accepted (or job was already terminal) + */ + 200: JobCancelResponse; +}; -export type CancelJobResponse = CancelJobResponses[keyof CancelJobResponses] +export type CancelJobResponse = CancelJobResponses[keyof CancelJobResponses]; export type ViewFileData = { - body?: never - path?: never - query: { - /** - * Name of the file to view - */ - filename: string - /** - * Subfolder path where the file is located - */ - subfolder?: string - /** - * Type of file (e.g., output, input, temp) - */ - type?: string - /** - * Full path to the file (used for temp files) - */ - fullpath?: string - /** - * Format of the file - */ - format?: string - /** - * Frame rate for video files - */ - frame_rate?: number - /** - * Workflow identifier - */ - workflow?: string - /** - * Timestamp parameter - */ - timestamp?: number - /** - * Image channel to extract from PNG images. - * - 'rgb': Return only RGB channels (alpha set to fully opaque) - * - 'a' or 'alpha': Return alpha channel as grayscale image - * - If not specified, return original image unchanged via redirect - * - */ - channel?: string - /** - * Maximum dimension (width or height) to resize the image to, preserving aspect ratio. - * The image is fit within a res x res box. Returns a JPEG thumbnail. - * Only applies to raster image files (PNG, JPEG, WebP, GIF). - * - */ - res?: number - } - url: '/api/view' -} + body?: never; + path?: never; + query: { + /** + * Name of the file to view + */ + filename: string; + /** + * Subfolder path where the file is located + */ + subfolder?: string; + /** + * Type of file (e.g., output, input, temp) + */ + type?: string; + /** + * Full path to the file (used for temp files) + */ + fullpath?: string; + /** + * Format of the file + */ + format?: string; + /** + * Frame rate for video files + */ + frame_rate?: number; + /** + * Workflow identifier + */ + workflow?: string; + /** + * Timestamp parameter + */ + timestamp?: number; + /** + * Image channel to extract from PNG images. + * - 'rgb': Return only RGB channels (alpha set to fully opaque) + * - 'a' or 'alpha': Return alpha channel as grayscale image + * - If not specified, return original image unchanged via redirect + * + */ + channel?: string; + /** + * Maximum dimension (width or height) to resize the image to, preserving aspect ratio. + * The image is fit within a res x res box. Returns a JPEG thumbnail. + * Only applies to raster image files (PNG, JPEG, WebP, GIF). + * + */ + res?: number; + }; + url: '/api/view'; +}; export type ViewFileErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * File not found or unauthorized - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * File not found or unauthorized + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ViewFileError = ViewFileErrors[keyof ViewFileErrors] +export type ViewFileError = ViewFileErrors[keyof ViewFileErrors]; export type ViewFileResponses = { - /** - * Processed PNG image with extracted channel - */ - 200: Blob | File -} + /** + * Processed PNG image with extracted channel + */ + 200: Blob | File; +}; -export type ViewFileResponse = ViewFileResponses[keyof ViewFileResponses] +export type ViewFileResponse = ViewFileResponses[keyof ViewFileResponses]; export type GetMaskLayersData = { - body?: never - path?: never - query: { - /** - * Hash filename of any mask layer file - */ - filename: string - } - url: '/api/files/mask-layers' -} + body?: never; + path?: never; + query: { + /** + * Hash filename of any mask layer file + */ + filename: string; + }; + url: '/api/files/mask-layers'; +}; export type GetMaskLayersErrors = { - /** - * File not found or not a mask file - */ - 404: ErrorResponse -} + /** + * File not found or not a mask file + */ + 404: ErrorResponse; +}; -export type GetMaskLayersError = GetMaskLayersErrors[keyof GetMaskLayersErrors] +export type GetMaskLayersError = GetMaskLayersErrors[keyof GetMaskLayersErrors]; export type GetMaskLayersResponses = { - /** - * Success - Related mask layers returned - */ - 200: { /** - * Filename of the mask layer + * Success - Related mask layers returned */ - mask?: string | null - /** - * Filename of the paint strokes layer - */ - paint?: string | null - /** - * Filename of the painted image layer - */ - painted?: string | null - /** - * Filename of the final composite layer - */ - painted_masked?: string | null - } -} + 200: { + /** + * Filename of the mask layer + */ + mask?: string | null; + /** + * Filename of the paint strokes layer + */ + paint?: string | null; + /** + * Filename of the painted image layer + */ + painted?: string | null; + /** + * Filename of the final composite layer + */ + painted_masked?: string | null; + }; +}; -export type GetMaskLayersResponse = - GetMaskLayersResponses[keyof GetMaskLayersResponses] +export type GetMaskLayersResponse = GetMaskLayersResponses[keyof GetMaskLayersResponses]; export type GetFilesData = { - body?: never - path: { - /** - * Type of directory to list files from - */ - directory_type: 'output' | 'input' | 'temp' - } - query?: never - url: '/internal/files/{directory_type}' -} + body?: never; + path: { + /** + * Type of directory to list files from + */ + directory_type: 'output' | 'input' | 'temp'; + }; + query?: never; + url: '/internal/files/{directory_type}'; +}; export type GetFilesErrors = { - /** - * Invalid directory type - */ - 400: ErrorResponse -} + /** + * Invalid directory type + */ + 400: ErrorResponse; +}; -export type GetFilesError = GetFilesErrors[keyof GetFilesErrors] +export type GetFilesError = GetFilesErrors[keyof GetFilesErrors]; export type GetFilesResponses = { - /** - * Array of file names sorted by modification time (newest first) - */ - 200: Array -} + /** + * Array of file names sorted by modification time (newest first) + */ + 200: Array; +}; -export type GetFilesResponse = GetFilesResponses[keyof GetFilesResponses] +export type GetFilesResponse = GetFilesResponses[keyof GetFilesResponses]; export type ListAssetsData = { - body?: never - path?: never - query?: { - /** - * Filter assets that have ALL of these tags - */ - include_tags?: Array - /** - * Exclude assets that have ANY of these tags - */ - exclude_tags?: Array - /** - * Filter assets where name contains this substring (case-insensitive) - */ - name_contains?: string - /** - * JSON object for filtering by metadata fields - */ - metadata_filter?: string - /** - * Maximum number of assets to return (1-500) - */ - limit?: number - /** - * Number of assets to skip for pagination - */ - offset?: number - /** - * Field to sort by - */ - sort?: 'name' | 'created_at' | 'updated_at' | 'size' | 'last_access_time' - /** - * Sort order - */ - order?: 'asc' | 'desc' - /** - * Filter assets by job IDs (prompt IDs) - */ - job_ids?: Array - /** - * Whether to include public/shared assets in results - */ - include_public?: boolean - /** - * Filter assets by exact content hash - */ - asset_hash?: string - } - url: '/api/assets' -} + body?: never; + path?: never; + query?: { + /** + * Filter assets that have ALL of these tags + */ + include_tags?: Array; + /** + * Exclude assets that have ANY of these tags + */ + exclude_tags?: Array; + /** + * Filter assets where name contains this substring (case-insensitive) + */ + name_contains?: string; + /** + * JSON object for filtering by metadata fields + */ + metadata_filter?: string; + /** + * Maximum number of assets to return (1-500) + */ + limit?: number; + /** + * Number of assets to skip for pagination + */ + offset?: number; + /** + * Field to sort by + */ + sort?: 'name' | 'created_at' | 'updated_at' | 'size' | 'last_access_time'; + /** + * Sort order + */ + order?: 'asc' | 'desc'; + /** + * Whether to include public/shared assets in results + */ + include_public?: boolean; + /** + * Filter assets by exact content hash + */ + asset_hash?: string; + /** + * Opaque cursor for keyset pagination. Pass the `next_cursor` value + * from the previous response to fetch the next page. When provided, + * `offset` is ignored. Cursor pagination is only supported with + * `sort` values `created_at`, `updated_at`, `name`, or `size`; + * requests combining `after` with other sort fields return 400. + * The cursor must have been minted under the same `sort` value used + * in the follow-up request. + * + */ + after?: string; + }; + url: '/api/assets'; +}; export type ListAssetsErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListAssetsError = ListAssetsErrors[keyof ListAssetsErrors] +export type ListAssetsError = ListAssetsErrors[keyof ListAssetsErrors]; export type ListAssetsResponses = { - /** - * Success - Assets returned - */ - 200: ListAssetsResponse -} + /** + * Success - Assets returned + */ + 200: ListAssetsResponse; +}; -export type ListAssetsResponse2 = ListAssetsResponses[keyof ListAssetsResponses] +export type ListAssetsResponse2 = ListAssetsResponses[keyof ListAssetsResponses]; export type UploadAssetData = { - body: { - /** - * HTTP/HTTPS URL to download the asset from - */ - url: string - /** - * Display name for the asset (used to determine file extension) - */ - name: string - /** - * Freeform tags for the asset. Common types include "models", "input", "output", and "temp", but any tag can be used in any order. - */ - tags?: Array - /** - * Custom metadata to store with the asset - */ - user_metadata?: { - [key: string]: unknown - } - /** - * Optional preview asset ID - */ - preview_id?: string - } - path?: never - query?: never - url: '/api/assets' -} + body: { + /** + * HTTP/HTTPS URL to download the asset from + */ + url: string; + /** + * Display name for the asset (used to determine file extension) + */ + name: string; + /** + * Freeform tags for the asset. Common types include "models", "input", "output", and "temp", but any tag can be used in any order. + */ + tags?: Array; + /** + * Custom metadata to store with the asset + */ + user_metadata?: { + [key: string]: unknown; + }; + /** + * Optional preview asset ID + */ + preview_id?: string; + }; + path?: never; + query?: never; + url: '/api/assets'; +}; export type UploadAssetErrors = { - /** - * Invalid request (bad file, invalid URL, invalid content type, etc.) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Source URL requires authentication or access denied - */ - 403: ErrorResponse - /** - * Source URL not found - */ - 404: ErrorResponse - /** - * File too large - */ - 413: ErrorResponse - /** - * Unsupported media type - */ - 415: ErrorResponse - /** - * Download failed due to network error or timeout - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (bad file, invalid URL, invalid content type, etc.) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Source URL requires authentication or access denied + */ + 403: ErrorResponse; + /** + * Source URL not found + */ + 404: ErrorResponse; + /** + * File too large + */ + 413: ErrorResponse; + /** + * Unsupported media type + */ + 415: ErrorResponse; + /** + * Download failed due to network error or timeout + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UploadAssetError = UploadAssetErrors[keyof UploadAssetErrors] +export type UploadAssetError = UploadAssetErrors[keyof UploadAssetErrors]; export type UploadAssetResponses = { - /** - * Asset already exists (returned existing asset) - */ - 200: AssetCreated - /** - * Asset created successfully - */ - 201: AssetCreated -} + /** + * Asset already exists (returned existing asset) + */ + 200: AssetCreated; + /** + * Asset created successfully + */ + 201: AssetCreated; +}; -export type UploadAssetResponse = - UploadAssetResponses[keyof UploadAssetResponses] +export type UploadAssetResponse = UploadAssetResponses[keyof UploadAssetResponses]; export type CreateAssetFromHashData = { - body: { - /** - * Hash of the existing asset. Supports Blake3 (blake3:) or SHA256 (sha256:) formats - */ - hash: string - /** - * Display name for the asset reference (optional) - */ - name?: string - /** - * Freeform tags for the asset. Common types include "models", "input", "output", and "temp", but any tag can be used in any order. - */ - tags: Array - /** - * MIME type of the asset (e.g., "image/png", "video/mp4") - */ - mime_type?: string - /** - * Custom metadata for this asset reference - */ - user_metadata?: { - [key: string]: unknown - } - } - path?: never - query?: never - url: '/api/assets/from-hash' -} + body: { + /** + * Hash of the existing asset. Supports Blake3 (blake3:) or SHA256 (sha256:) formats + */ + hash: string; + /** + * Display name for the asset reference (optional) + */ + name?: string; + /** + * Freeform tags for the asset. Common types include "models", "input", "output", and "temp", but any tag can be used in any order. + */ + tags: Array; + /** + * MIME type of the asset (e.g., "image/png", "video/mp4") + */ + mime_type?: string; + /** + * Custom metadata for this asset reference + */ + user_metadata?: { + [key: string]: unknown; + }; + }; + path?: never; + query?: never; + url: '/api/assets/from-hash'; +}; export type CreateAssetFromHashErrors = { - /** - * Invalid request (bad hash format, invalid tags, etc.) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Source asset with given hash not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (bad hash format, invalid tags, etc.) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Source asset with given hash not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateAssetFromHashError = - CreateAssetFromHashErrors[keyof CreateAssetFromHashErrors] +export type CreateAssetFromHashError = CreateAssetFromHashErrors[keyof CreateAssetFromHashErrors]; export type CreateAssetFromHashResponses = { - /** - * Asset reference already exists (returned existing) - */ - 200: AssetCreated - /** - * Asset reference created successfully - */ - 201: AssetCreated -} + /** + * Asset reference already exists (returned existing) + */ + 200: AssetCreated; + /** + * Asset reference created successfully + */ + 201: AssetCreated; +}; -export type CreateAssetFromHashResponse = - CreateAssetFromHashResponses[keyof CreateAssetFromHashResponses] +export type CreateAssetFromHashResponse = CreateAssetFromHashResponses[keyof CreateAssetFromHashResponses]; export type GetRemoteAssetMetadataData = { - body?: never - path?: never - query: { - /** - * Download URL to retrieve metadata from - */ - url: string - } - url: '/api/assets/remote-metadata' -} + body?: never; + path?: never; + query: { + /** + * Download URL to retrieve metadata from + */ + url: string; + }; + url: '/api/assets/remote-metadata'; +}; export type GetRemoteAssetMetadataErrors = { - /** - * Invalid URL or missing required parameter - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Failed to retrieve metadata from source - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid URL or missing required parameter + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Failed to retrieve metadata from source + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetRemoteAssetMetadataError = - GetRemoteAssetMetadataErrors[keyof GetRemoteAssetMetadataErrors] +export type GetRemoteAssetMetadataError = GetRemoteAssetMetadataErrors[keyof GetRemoteAssetMetadataErrors]; export type GetRemoteAssetMetadataResponses = { - /** - * Metadata retrieved successfully - */ - 200: AssetMetadataResponse -} + /** + * Metadata retrieved successfully + */ + 200: AssetMetadataResponse; +}; -export type GetRemoteAssetMetadataResponse = - GetRemoteAssetMetadataResponses[keyof GetRemoteAssetMetadataResponses] +export type GetRemoteAssetMetadataResponse = GetRemoteAssetMetadataResponses[keyof GetRemoteAssetMetadataResponses]; export type CreateAssetDownloadData = { - body: { - /** - * URL of the file to download (must be from huggingface.co, civitai.com, or civitai.red) - */ - source_url: string - /** - * Optional tags for the asset (e.g., ["model", "checkpoint"]) - */ - tags?: Array - /** - * Optional user-defined metadata to attach to the asset - */ - user_metadata?: { - [key: string]: unknown - } - /** - * Optional preview asset ID to associate with the downloaded asset - */ - preview_id?: string - } - path?: never - query?: never - url: '/api/assets/download' -} + body: { + /** + * URL of the file to download (must be from huggingface.co, civitai.com, or civitai.red) + */ + source_url: string; + /** + * Optional tags for the asset (e.g., ["model", "checkpoint"]) + */ + tags?: Array; + /** + * Optional user-defined metadata to attach to the asset + */ + user_metadata?: { + [key: string]: unknown; + }; + /** + * Optional preview asset ID to associate with the downloaded asset + */ + preview_id?: string; + }; + path?: never; + query?: never; + url: '/api/assets/download'; +}; export type CreateAssetDownloadErrors = { - /** - * Invalid URL or unsupported source - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Validation errors - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid URL or unsupported source + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Validation errors + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateAssetDownloadError = - CreateAssetDownloadErrors[keyof CreateAssetDownloadErrors] +export type CreateAssetDownloadError = CreateAssetDownloadErrors[keyof CreateAssetDownloadErrors]; export type CreateAssetDownloadResponses = { - /** - * File already exists in storage - asset created/returned immediately - */ - 200: AssetCreated - /** - * Accepted - Download task created and processing in background - */ - 202: AssetDownloadResponse -} + /** + * File already exists in storage - asset created/returned immediately + */ + 200: AssetCreated; + /** + * Accepted - Download task created and processing in background + */ + 202: AssetDownloadResponse; +}; -export type CreateAssetDownloadResponse = - CreateAssetDownloadResponses[keyof CreateAssetDownloadResponses] +export type CreateAssetDownloadResponse = CreateAssetDownloadResponses[keyof CreateAssetDownloadResponses]; export type CreateAssetExportData = { - body: { - /** - * Job IDs to include *all associated assets* of the jobs in the ZIP bundle. - */ - job_ids?: Array - /** - * Asset IDs to include in the ZIP bundle. Additive to the assets associated with provided job IDs. - */ - asset_ids?: Array - /** - * Strategy for naming files in the ZIP: - * - group_by_job_id: Group assets by job ID as a parent directory (e.g., "833a1b5c-beab-436a-ae8e-f07e7cd7b2c4/ComfyUI_00001_.png") - * - preserve: Use original asset names, skip duplicates (first one wins) - * - asset_id: Use the asset ID as the filename (e.g., "833a1b5c-beab-436a-ae8e-f07e7cd7b2c4.png") - * - group_by_job_time: Group by job creation timestamp (e.g., "2026-03-26T16-13-00/ComfyUI_00001_.png") - * - */ - naming_strategy?: - | 'group_by_job_id' - | 'preserve' - | 'asset_id' - | 'group_by_job_time' - /** - * Optional per-job asset name filters. When provided for a job ID, - * only assets whose name matches one of the specified names are included. - * Job IDs present in `job_ids` but absent from this map include all their assets. - * - */ - job_asset_name_filters?: { - [key: string]: Array - } - } - path?: never - query?: never - url: '/api/assets/export' -} + body: { + /** + * Job IDs to include *all associated assets* of the jobs in the ZIP bundle. + */ + job_ids?: Array; + /** + * Asset IDs to include in the ZIP bundle. Additive to the assets associated with provided job IDs. + */ + asset_ids?: Array; + /** + * Strategy for naming files in the ZIP: + * - group_by_job_id: Group assets by job ID as a parent directory (e.g., "833a1b5c-beab-436a-ae8e-f07e7cd7b2c4/ComfyUI_00001_.png") + * - preserve: Use original asset names, skip duplicates (first one wins) + * - asset_id: Use the asset ID as the filename (e.g., "833a1b5c-beab-436a-ae8e-f07e7cd7b2c4.png") + * - group_by_job_time: Group by job creation timestamp (e.g., "2026-03-26T16-13-00/ComfyUI_00001_.png") + * + */ + naming_strategy?: 'group_by_job_id' | 'preserve' | 'asset_id' | 'group_by_job_time'; + /** + * Optional per-job asset name filters. When provided for a job ID, + * only assets whose name matches one of the specified names are included. + * Job IDs present in `job_ids` but absent from this map include all their assets. + * + */ + job_asset_name_filters?: { + [key: string]: Array; + }; + }; + path?: never; + query?: never; + url: '/api/assets/export'; +}; export type CreateAssetExportErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateAssetExportError = - CreateAssetExportErrors[keyof CreateAssetExportErrors] +export type CreateAssetExportError = CreateAssetExportErrors[keyof CreateAssetExportErrors]; export type CreateAssetExportResponses = { - /** - * Accepted - Export task created and processing in background - */ - 202: AssetDownloadResponse -} + /** + * Accepted - Export task created and processing in background + */ + 202: AssetDownloadResponse; +}; -export type CreateAssetExportResponse = - CreateAssetExportResponses[keyof CreateAssetExportResponses] +export type CreateAssetExportResponse = CreateAssetExportResponses[keyof CreateAssetExportResponses]; export type DownloadExportData = { - body?: never - path: { - /** - * Export filename with extension (e.g., "021e55cd-9785-4ac7-ac39-f4010138e3bc.zip") - */ - exportName: string - } - query?: never - url: '/api/assets/exports/{exportName}' -} + body?: never; + path: { + /** + * Export filename with extension (e.g., "021e55cd-9785-4ac7-ac39-f4010138e3bc.zip") + */ + exportName: string; + }; + query?: never; + url: '/api/assets/exports/{exportName}'; +}; export type DownloadExportErrors = { - /** - * Invalid export name - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Export not found or not owned by user - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid export name + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Export not found or not owned by user + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type DownloadExportError = - DownloadExportErrors[keyof DownloadExportErrors] +export type DownloadExportError = DownloadExportErrors[keyof DownloadExportErrors]; export type DownloadExportResponses = { - /** - * Signed URL for downloading the export - */ - 200: ExportDownloadUrlResponse -} + /** + * Signed URL for downloading the export + */ + 200: ExportDownloadUrlResponse; +}; -export type DownloadExportResponse = - DownloadExportResponses[keyof DownloadExportResponses] +export type DownloadExportResponse = DownloadExportResponses[keyof DownloadExportResponses]; export type DeleteAssetData = { - body?: never - path: { - /** - * Asset ID - */ - id: string - } - query?: never - url: '/api/assets/{id}' -} + body?: never; + path: { + /** + * Asset ID + */ + id: string; + }; + query?: never; + url: '/api/assets/{id}'; +}; export type DeleteAssetErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: ErrorResponse - /** - * Asset cannot be deleted because it is referenced by another resource (e.g., workflow version) - */ - 409: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: ErrorResponse; + /** + * Asset cannot be deleted because it is referenced by another resource (e.g., workflow version) + */ + 409: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type DeleteAssetError = DeleteAssetErrors[keyof DeleteAssetErrors] +export type DeleteAssetError = DeleteAssetErrors[keyof DeleteAssetErrors]; export type DeleteAssetResponses = { - /** - * Asset deleted successfully - */ - 204: void -} + /** + * Asset deleted successfully + */ + 204: void; +}; -export type DeleteAssetResponse = - DeleteAssetResponses[keyof DeleteAssetResponses] +export type DeleteAssetResponse = DeleteAssetResponses[keyof DeleteAssetResponses]; export type GetAssetByIdData = { - body?: never - path: { - /** - * Asset ID - */ - id: string - } - query?: never - url: '/api/assets/{id}' -} + body?: never; + path: { + /** + * Asset ID + */ + id: string; + }; + query?: never; + url: '/api/assets/{id}'; +}; export type GetAssetByIdErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetAssetByIdError = GetAssetByIdErrors[keyof GetAssetByIdErrors] +export type GetAssetByIdError = GetAssetByIdErrors[keyof GetAssetByIdErrors]; export type GetAssetByIdResponses = { - /** - * Asset details retrieved successfully - */ - 200: Asset -} + /** + * Asset details retrieved successfully + */ + 200: Asset; +}; -export type GetAssetByIdResponse = - GetAssetByIdResponses[keyof GetAssetByIdResponses] +export type GetAssetByIdResponse = GetAssetByIdResponses[keyof GetAssetByIdResponses]; export type UpdateAssetData = { - body: { - /** - * New display name for the asset - */ - name?: string - /** - * Updated MIME type of the asset - */ - mime_type?: string - /** - * Updated preview asset ID - */ - preview_id?: string - /** - * Updated custom metadata - */ - user_metadata?: { - [key: string]: unknown - } - } - path: { - /** - * Asset ID - */ - id: string - } - query?: never - url: '/api/assets/{id}' -} + body: { + /** + * New display name for the asset + */ + name?: string; + /** + * Updated MIME type of the asset + */ + mime_type?: string; + /** + * Updated preview asset ID + */ + preview_id?: string; + /** + * Updated custom metadata + */ + user_metadata?: { + [key: string]: unknown; + }; + }; + path: { + /** + * Asset ID + */ + id: string; + }; + query?: never; + url: '/api/assets/{id}'; +}; export type UpdateAssetErrors = { - /** - * Invalid request (no fields provided) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (no fields provided) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UpdateAssetError = UpdateAssetErrors[keyof UpdateAssetErrors] +export type UpdateAssetError = UpdateAssetErrors[keyof UpdateAssetErrors]; export type UpdateAssetResponses = { - /** - * Asset updated successfully - */ - 200: AssetUpdated -} + /** + * Asset updated successfully + */ + 200: AssetUpdated; +}; -export type UpdateAssetResponse = - UpdateAssetResponses[keyof UpdateAssetResponses] +export type UpdateAssetResponse = UpdateAssetResponses[keyof UpdateAssetResponses]; export type RemoveAssetTagsData = { - body: { - /** - * Tags to remove from the asset - */ - tags: Array - } - path: { - /** - * Asset ID - */ - id: string - } - query?: never - url: '/api/assets/{id}/tags' -} + body: { + /** + * Tags to remove from the asset + */ + tags: Array; + }; + path: { + /** + * Asset ID + */ + id: string; + }; + query?: never; + url: '/api/assets/{id}/tags'; +}; export type RemoveAssetTagsErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: ErrorResponse - /** - * Validation error (e.g., reserved tag) - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: ErrorResponse; + /** + * Validation error (e.g., reserved tag) + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type RemoveAssetTagsError = - RemoveAssetTagsErrors[keyof RemoveAssetTagsErrors] +export type RemoveAssetTagsError = RemoveAssetTagsErrors[keyof RemoveAssetTagsErrors]; export type RemoveAssetTagsResponses = { - /** - * Tags removed successfully - */ - 200: TagsModificationResponse -} + /** + * Tags removed successfully + */ + 200: TagsModificationResponse; +}; -export type RemoveAssetTagsResponse = - RemoveAssetTagsResponses[keyof RemoveAssetTagsResponses] +export type RemoveAssetTagsResponse = RemoveAssetTagsResponses[keyof RemoveAssetTagsResponses]; export type AddAssetTagsData = { - body: { - /** - * Tags to add to the asset - */ - tags: Array - } - path: { - /** - * Asset ID - */ - id: string - } - query?: never - url: '/api/assets/{id}/tags' -} + body: { + /** + * Tags to add to the asset + */ + tags: Array; + }; + path: { + /** + * Asset ID + */ + id: string; + }; + query?: never; + url: '/api/assets/{id}/tags'; +}; export type AddAssetTagsErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: ErrorResponse - /** - * Validation error (e.g., reserved tag) - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: ErrorResponse; + /** + * Validation error (e.g., reserved tag) + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type AddAssetTagsError = AddAssetTagsErrors[keyof AddAssetTagsErrors] +export type AddAssetTagsError = AddAssetTagsErrors[keyof AddAssetTagsErrors]; export type AddAssetTagsResponses = { - /** - * Tags added successfully - */ - 200: TagsModificationResponse -} + /** + * Tags added successfully + */ + 200: TagsModificationResponse; +}; -export type AddAssetTagsResponse = - AddAssetTagsResponses[keyof AddAssetTagsResponses] +export type AddAssetTagsResponse = AddAssetTagsResponses[keyof AddAssetTagsResponses]; export type UpdateAssetTagsData = { - /** - * At least one of add or remove must contain items. Empty arrays are allowed when the other array has items. - */ - body: { /** - * Tags to add to the asset. Can be empty if remove has items. + * At least one of add or remove must contain items. Empty arrays are allowed when the other array has items. */ - add?: Array - /** - * Tags to remove from the asset. Can be empty if add has items. - */ - remove?: Array - } - path: { - /** - * Asset ID - */ - id: string - } - query?: never - url: '/api/assets/{id}/tags' -} + body: { + /** + * Tags to add to the asset. Can be empty if remove has items. + */ + add?: Array; + /** + * Tags to remove from the asset. Can be empty if add has items. + */ + remove?: Array; + }; + path: { + /** + * Asset ID + */ + id: string; + }; + query?: never; + url: '/api/assets/{id}/tags'; +}; export type UpdateAssetTagsErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: ErrorResponse - /** - * Reserved tag validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: ErrorResponse; + /** + * Reserved tag validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UpdateAssetTagsError = - UpdateAssetTagsErrors[keyof UpdateAssetTagsErrors] +export type UpdateAssetTagsError = UpdateAssetTagsErrors[keyof UpdateAssetTagsErrors]; export type UpdateAssetTagsResponses = { - /** - * Tags updated successfully - */ - 200: TagsModificationResponse -} + /** + * Tags updated successfully + */ + 200: TagsModificationResponse; +}; -export type UpdateAssetTagsResponse = - UpdateAssetTagsResponses[keyof UpdateAssetTagsResponses] +export type UpdateAssetTagsResponse = UpdateAssetTagsResponses[keyof UpdateAssetTagsResponses]; export type ListTagsData = { - body?: never - path?: never - query?: { - /** - * Filter tags by prefix - */ - prefix?: string - /** - * Maximum number of tags to return (1-1000) - */ - limit?: number - /** - * Number of tags to skip for pagination - */ - offset?: number - /** - * Sort order for tags - */ - order?: 'count_desc' | 'name_asc' - /** - * Include tags with zero usage count - */ - include_zero?: boolean - /** - * Whether to include public/shared assets when counting tags - */ - include_public?: boolean - } - url: '/api/tags' -} + body?: never; + path?: never; + query?: { + /** + * Filter tags by prefix + */ + prefix?: string; + /** + * Maximum number of tags to return (1-1000) + */ + limit?: number; + /** + * Number of tags to skip for pagination + */ + offset?: number; + /** + * Sort order for tags + */ + order?: 'count_desc' | 'name_asc'; + /** + * Include tags with zero usage count + */ + include_zero?: boolean; + /** + * Whether to include public/shared assets when counting tags + */ + include_public?: boolean; + }; + url: '/api/tags'; +}; export type ListTagsErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListTagsError = ListTagsErrors[keyof ListTagsErrors] +export type ListTagsError = ListTagsErrors[keyof ListTagsErrors]; export type ListTagsResponses = { - /** - * Tags retrieved successfully - */ - 200: ListTagsResponse -} + /** + * Tags retrieved successfully + */ + 200: ListTagsResponse; +}; -export type ListTagsResponse2 = ListTagsResponses[keyof ListTagsResponses] +export type ListTagsResponse2 = ListTagsResponses[keyof ListTagsResponses]; export type GetAssetTagHistogramData = { - body?: never - path?: never - query?: { - /** - * Filter assets that have ALL of these tags - */ - include_tags?: Array - /** - * Exclude assets that have ANY of these tags - */ - exclude_tags?: Array - /** - * Filter assets where name contains this substring (case-insensitive) - */ - name_contains?: string - /** - * JSON object for filtering by metadata fields - */ - metadata_filter?: string - /** - * Maximum number of tags to return (1-1000, default 100) - */ - limit?: number - /** - * Whether to include public/shared assets in results - */ - include_public?: boolean - } - url: '/api/assets/tags/refine' -} + body?: never; + path?: never; + query?: { + /** + * Filter assets that have ALL of these tags + */ + include_tags?: Array; + /** + * Exclude assets that have ANY of these tags + */ + exclude_tags?: Array; + /** + * Filter assets where name contains this substring (case-insensitive) + */ + name_contains?: string; + /** + * JSON object for filtering by metadata fields + */ + metadata_filter?: string; + /** + * Maximum number of tags to return (1-1000, default 100) + */ + limit?: number; + /** + * Whether to include public/shared assets in results + */ + include_public?: boolean; + }; + url: '/api/assets/tags/refine'; +}; export type GetAssetTagHistogramErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetAssetTagHistogramError = - GetAssetTagHistogramErrors[keyof GetAssetTagHistogramErrors] +export type GetAssetTagHistogramError = GetAssetTagHistogramErrors[keyof GetAssetTagHistogramErrors]; export type GetAssetTagHistogramResponses = { - /** - * Success - Tag histogram returned - */ - 200: AssetTagHistogramResponse -} + /** + * Success - Tag histogram returned + */ + 200: AssetTagHistogramResponse; +}; -export type GetAssetTagHistogramResponse = - GetAssetTagHistogramResponses[keyof GetAssetTagHistogramResponses] +export type GetAssetTagHistogramResponse = GetAssetTagHistogramResponses[keyof GetAssetTagHistogramResponses]; export type CheckAssetByHashData = { - body?: never - path: { - /** - * Blake3 hash of the asset in format 'blake3:hex_digest' - */ - hash: string - } - query?: never - url: '/api/assets/hash/{hash}' -} + body?: never; + path: { + /** + * Blake3 hash of the asset in format 'blake3:hex_digest' + */ + hash: string; + }; + query?: never; + url: '/api/assets/hash/{hash}'; +}; export type CheckAssetByHashErrors = { - /** - * Invalid hash format - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Asset not found - */ - 404: unknown - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid hash format + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Asset not found + */ + 404: unknown; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CheckAssetByHashError = - CheckAssetByHashErrors[keyof CheckAssetByHashErrors] +export type CheckAssetByHashError = CheckAssetByHashErrors[keyof CheckAssetByHashErrors]; export type CheckAssetByHashResponses = { - /** - * Asset exists - */ - 200: unknown -} + /** + * Asset exists + */ + 200: unknown; +}; export type PostAssetsFromWorkflowData = { - body: WorkflowApiAssetsRequest - path?: never - query?: never - url: '/api/assets/from-workflow' -} + body: WorkflowApiAssetsRequest; + path?: never; + query?: never; + url: '/api/assets/from-workflow'; +}; export type PostAssetsFromWorkflowErrors = { - /** - * Bad request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type PostAssetsFromWorkflowError = - PostAssetsFromWorkflowErrors[keyof PostAssetsFromWorkflowErrors] +export type PostAssetsFromWorkflowError = PostAssetsFromWorkflowErrors[keyof PostAssetsFromWorkflowErrors]; export type PostAssetsFromWorkflowResponses = { - /** - * Success - */ - 200: WorkflowApiAssetsResponse -} + /** + * Success + */ + 200: WorkflowApiAssetsResponse; +}; -export type PostAssetsFromWorkflowResponse = - PostAssetsFromWorkflowResponses[keyof PostAssetsFromWorkflowResponses] +export type PostAssetsFromWorkflowResponse = PostAssetsFromWorkflowResponses[keyof PostAssetsFromWorkflowResponses]; export type ImportPublishedAssetsData = { - body: ImportPublishedAssetsRequest - path?: never - query?: never - url: '/api/assets/import' -} + body: ImportPublishedAssetsRequest; + path?: never; + query?: never; + url: '/api/assets/import'; +}; export type ImportPublishedAssetsErrors = { - /** - * Bad request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ImportPublishedAssetsError = - ImportPublishedAssetsErrors[keyof ImportPublishedAssetsErrors] +export type ImportPublishedAssetsError = ImportPublishedAssetsErrors[keyof ImportPublishedAssetsErrors]; export type ImportPublishedAssetsResponses = { - /** - * Successfully imported assets - */ - 200: ImportPublishedAssetsResponse -} + /** + * Successfully imported assets + */ + 200: ImportPublishedAssetsResponse; +}; -export type ImportPublishedAssetsResponse2 = - ImportPublishedAssetsResponses[keyof ImportPublishedAssetsResponses] +export type ImportPublishedAssetsResponse2 = ImportPublishedAssetsResponses[keyof ImportPublishedAssetsResponses]; export type GetQueueInfoData = { - body?: never - path?: never - query?: never - url: '/api/queue' -} + body?: never; + path?: never; + query?: never; + url: '/api/queue'; +}; export type GetQueueInfoErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * Invalid request parameters - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * Invalid request parameters + */ + 500: ErrorResponse; +}; -export type GetQueueInfoError = GetQueueInfoErrors[keyof GetQueueInfoErrors] +export type GetQueueInfoError = GetQueueInfoErrors[keyof GetQueueInfoErrors]; export type GetQueueInfoResponses = { - /** - * Success - */ - 200: QueueInfo -} + /** + * Success + */ + 200: QueueInfo; +}; -export type GetQueueInfoResponse = - GetQueueInfoResponses[keyof GetQueueInfoResponses] +export type GetQueueInfoResponse = GetQueueInfoResponses[keyof GetQueueInfoResponses]; export type ManageQueueData = { - body: QueueManageRequest - path?: never - query?: never - url: '/api/queue' -} + body: QueueManageRequest; + path?: never; + query?: never; + url: '/api/queue'; +}; export type ManageQueueErrors = { - /** - * Invalid request parameters - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request parameters + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ManageQueueError = ManageQueueErrors[keyof ManageQueueErrors] +export type ManageQueueError = ManageQueueErrors[keyof ManageQueueErrors]; export type ManageQueueResponses = { - /** - * Success - */ - 200: QueueManageResponse -} + /** + * Success + */ + 200: QueueManageResponse; +}; -export type ManageQueueResponse = - ManageQueueResponses[keyof ManageQueueResponses] +export type ManageQueueResponse = ManageQueueResponses[keyof ManageQueueResponses]; export type InterruptJobData = { - body?: never - path?: never - query?: never - url: '/api/interrupt' -} + body?: never; + path?: never; + query?: never; + url: '/api/interrupt'; +}; export type InterruptJobErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type InterruptJobError = InterruptJobErrors[keyof InterruptJobErrors] +export type InterruptJobError = InterruptJobErrors[keyof InterruptJobErrors]; export type InterruptJobResponses = { - /** - * Success - Job interrupted or no running job found - */ - 200: unknown -} + /** + * Success - Job interrupted or no running job found + */ + 200: unknown; +}; export type ListSecretsData = { - body?: never - path?: never - query?: never - url: '/api/secrets' -} + body?: never; + path?: never; + query?: never; + url: '/api/secrets'; +}; export type ListSecretsErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse - /** - * Service unavailable - feature is disabled - */ - 503: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; + /** + * Service unavailable - feature is disabled + */ + 503: ErrorResponse; +}; -export type ListSecretsError = ListSecretsErrors[keyof ListSecretsErrors] +export type ListSecretsError = ListSecretsErrors[keyof ListSecretsErrors]; export type ListSecretsResponses = { - /** - * Success - */ - 200: SecretListResponse -} + /** + * Success + */ + 200: SecretListResponse; +}; -export type ListSecretsResponse = - ListSecretsResponses[keyof ListSecretsResponses] +export type ListSecretsResponse = ListSecretsResponses[keyof ListSecretsResponses]; export type CreateSecretData = { - body: CreateSecretRequest - path?: never - query?: never - url: '/api/secrets' -} + body: CreateSecretRequest; + path?: never; + query?: never; + url: '/api/secrets'; +}; export type CreateSecretErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Conflict - secret with this name or provider already exists - */ - 409: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse - /** - * Service unavailable - secrets feature disabled - */ - 503: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Conflict - secret with this name or provider already exists + */ + 409: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; + /** + * Service unavailable - secrets feature disabled + */ + 503: ErrorResponse; +}; -export type CreateSecretError = CreateSecretErrors[keyof CreateSecretErrors] +export type CreateSecretError = CreateSecretErrors[keyof CreateSecretErrors]; export type CreateSecretResponses = { - /** - * Secret created successfully - */ - 201: SecretResponse -} + /** + * Secret created successfully + */ + 201: SecretResponse; +}; -export type CreateSecretResponse = - CreateSecretResponses[keyof CreateSecretResponses] +export type CreateSecretResponse = CreateSecretResponses[keyof CreateSecretResponses]; export type DeleteSecretData = { - body?: never - path: { - /** - * The UUID of the secret - */ - id: string - } - query?: never - url: '/api/secrets/{id}' -} + body?: never; + path: { + /** + * The UUID of the secret + */ + id: string; + }; + query?: never; + url: '/api/secrets/{id}'; +}; export type DeleteSecretErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - user does not own this secret - */ - 403: ErrorResponse - /** - * Secret not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse - /** - * Service unavailable - secrets feature disabled - */ - 503: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden - user does not own this secret + */ + 403: ErrorResponse; + /** + * Secret not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; + /** + * Service unavailable - secrets feature disabled + */ + 503: ErrorResponse; +}; -export type DeleteSecretError = DeleteSecretErrors[keyof DeleteSecretErrors] +export type DeleteSecretError = DeleteSecretErrors[keyof DeleteSecretErrors]; export type DeleteSecretResponses = { - /** - * Secret deleted successfully - */ - 204: void -} + /** + * Secret deleted successfully + */ + 204: void; +}; -export type DeleteSecretResponse = - DeleteSecretResponses[keyof DeleteSecretResponses] +export type DeleteSecretResponse = DeleteSecretResponses[keyof DeleteSecretResponses]; export type GetSecretData = { - body?: never - path: { - /** - * The UUID of the secret - */ - id: string - } - query?: never - url: '/api/secrets/{id}' -} + body?: never; + path: { + /** + * The UUID of the secret + */ + id: string; + }; + query?: never; + url: '/api/secrets/{id}'; +}; export type GetSecretErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - user does not own this secret - */ - 403: ErrorResponse - /** - * Secret not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse - /** - * Service unavailable - secrets feature disabled - */ - 503: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden - user does not own this secret + */ + 403: ErrorResponse; + /** + * Secret not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; + /** + * Service unavailable - secrets feature disabled + */ + 503: ErrorResponse; +}; -export type GetSecretError = GetSecretErrors[keyof GetSecretErrors] +export type GetSecretError = GetSecretErrors[keyof GetSecretErrors]; export type GetSecretResponses = { - /** - * Success - */ - 200: SecretResponse -} + /** + * Success + */ + 200: SecretResponse; +}; -export type GetSecretResponse = GetSecretResponses[keyof GetSecretResponses] +export type GetSecretResponse = GetSecretResponses[keyof GetSecretResponses]; export type UpdateSecretData = { - body: UpdateSecretRequest - path: { - /** - * The UUID of the secret - */ - id: string - } - query?: never - url: '/api/secrets/{id}' -} + body: UpdateSecretRequest; + path: { + /** + * The UUID of the secret + */ + id: string; + }; + query?: never; + url: '/api/secrets/{id}'; +}; export type UpdateSecretErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - user does not own this secret - */ - 403: ErrorResponse - /** - * Secret not found - */ - 404: ErrorResponse - /** - * Conflict - a secret with this name already exists - */ - 409: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse - /** - * Service unavailable - secrets feature disabled - */ - 503: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden - user does not own this secret + */ + 403: ErrorResponse; + /** + * Secret not found + */ + 404: ErrorResponse; + /** + * Conflict - a secret with this name already exists + */ + 409: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; + /** + * Service unavailable - secrets feature disabled + */ + 503: ErrorResponse; +}; -export type UpdateSecretError = UpdateSecretErrors[keyof UpdateSecretErrors] +export type UpdateSecretError = UpdateSecretErrors[keyof UpdateSecretErrors]; export type UpdateSecretResponses = { - /** - * Secret updated successfully - */ - 200: SecretResponse -} + /** + * Secret updated successfully + */ + 200: SecretResponse; +}; -export type UpdateSecretResponse = - UpdateSecretResponses[keyof UpdateSecretResponses] +export type UpdateSecretResponse = UpdateSecretResponses[keyof UpdateSecretResponses]; export type GetAllSettingsData = { - body?: never - path?: never - query?: never - url: '/api/settings' -} + body?: never; + path?: never; + query?: never; + url: '/api/settings'; +}; export type GetAllSettingsErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; +}; -export type GetAllSettingsError = - GetAllSettingsErrors[keyof GetAllSettingsErrors] +export type GetAllSettingsError = GetAllSettingsErrors[keyof GetAllSettingsErrors]; export type GetAllSettingsResponses = { - /** - * User settings as key-value pairs - */ - 200: { - [key: string]: unknown - } -} + /** + * User settings as key-value pairs + */ + 200: { + [key: string]: unknown; + }; +}; -export type GetAllSettingsResponse = - GetAllSettingsResponses[keyof GetAllSettingsResponses] +export type GetAllSettingsResponse = GetAllSettingsResponses[keyof GetAllSettingsResponses]; export type UpdateMultipleSettingsData = { - /** - * Settings to update as key-value pairs - */ - body: { - [key: string]: unknown - } - path?: never - query?: never - url: '/api/settings' -} + /** + * Settings to update as key-value pairs + */ + body: { + [key: string]: unknown; + }; + path?: never; + query?: never; + url: '/api/settings'; +}; export type UpdateMultipleSettingsErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; +}; -export type UpdateMultipleSettingsError = - UpdateMultipleSettingsErrors[keyof UpdateMultipleSettingsErrors] +export type UpdateMultipleSettingsError = UpdateMultipleSettingsErrors[keyof UpdateMultipleSettingsErrors]; export type UpdateMultipleSettingsResponses = { - /** - * Updated user settings - */ - 200: { - [key: string]: unknown - } -} - -export type UpdateMultipleSettingsResponse = - UpdateMultipleSettingsResponses[keyof UpdateMultipleSettingsResponses] - -export type GetSettingByKeyData = { - body?: never - path: { /** - * Setting key to retrieve + * Updated user settings */ - key: string - } - query?: never - url: '/api/settings/{key}' -} + 200: { + [key: string]: unknown; + }; +}; -export type GetSettingByKeyErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Setting not found - */ - 404: ErrorResponse -} +export type UpdateMultipleSettingsResponse = UpdateMultipleSettingsResponses[keyof UpdateMultipleSettingsResponses]; -export type GetSettingByKeyError = - GetSettingByKeyErrors[keyof GetSettingByKeyErrors] +export type GetSettingByIdData = { + body?: never; + path: { + /** + * Setting id to retrieve + */ + id: string; + }; + query?: never; + url: '/api/settings/{id}'; +}; -export type GetSettingByKeyResponses = { - /** - * Setting value response - */ - 200: { +export type GetSettingByIdErrors = { /** - * The setting value + * Unauthorized */ - value?: unknown - } -} - -export type GetSettingByKeyResponse = - GetSettingByKeyResponses[keyof GetSettingByKeyResponses] - -export type UpdateSettingByKeyData = { - /** - * New value for the setting - */ - body: unknown - path: { + 401: ErrorResponse; /** - * Setting key to update + * Setting not found */ - key: string - } - query?: never - url: '/api/settings/{key}' -} + 404: ErrorResponse; +}; -export type UpdateSettingByKeyErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse -} +export type GetSettingByIdError = GetSettingByIdErrors[keyof GetSettingByIdErrors]; -export type UpdateSettingByKeyError = - UpdateSettingByKeyErrors[keyof UpdateSettingByKeyErrors] - -export type UpdateSettingByKeyResponses = { - /** - * Updated setting value response - */ - 200: { +export type GetSettingByIdResponses = { /** - * The updated setting value + * Setting value response */ - value?: unknown - } -} + 200: { + /** + * The setting value + */ + value?: unknown; + }; +}; -export type UpdateSettingByKeyResponse = - UpdateSettingByKeyResponses[keyof UpdateSettingByKeyResponses] +export type GetSettingByIdResponse = GetSettingByIdResponses[keyof GetSettingByIdResponses]; + +export type UpdateSettingByIdData = { + /** + * New value for the setting + */ + body: unknown; + path: { + /** + * Setting id to update + */ + id: string; + }; + query?: never; + url: '/api/settings/{id}'; +}; + +export type UpdateSettingByIdErrors = { + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; +}; + +export type UpdateSettingByIdError = UpdateSettingByIdErrors[keyof UpdateSettingByIdErrors]; + +export type UpdateSettingByIdResponses = { + /** + * Updated setting value response + */ + 200: { + /** + * The updated setting value + */ + value?: unknown; + }; +}; + +export type UpdateSettingByIdResponse = UpdateSettingByIdResponses[keyof UpdateSettingByIdResponses]; export type SubmitFeedbackData = { - body: FeedbackRequest - path?: never - query?: never - url: '/api/feedback' -} + body: FeedbackRequest; + path?: never; + query?: never; + url: '/api/feedback'; +}; export type SubmitFeedbackErrors = { - /** - * Invalid request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type SubmitFeedbackError = - SubmitFeedbackErrors[keyof SubmitFeedbackErrors] +export type SubmitFeedbackError = SubmitFeedbackErrors[keyof SubmitFeedbackErrors]; export type SubmitFeedbackResponses = { - /** - * Feedback submitted successfully - */ - 201: FeedbackResponse -} + /** + * Feedback submitted successfully + */ + 201: FeedbackResponse; +}; -export type SubmitFeedbackResponse = - SubmitFeedbackResponses[keyof SubmitFeedbackResponses] +export type SubmitFeedbackResponse = SubmitFeedbackResponses[keyof SubmitFeedbackResponses]; export type GetUserdataData = { - body?: never - path?: never - query?: { - /** - * The directory to list files from. - */ - dir?: string - /** - * Whether to list files recursively. - */ - recurse?: boolean - /** - * Whether to split file information by type. - */ - split?: boolean - /** - * Whether to return full file metadata. - */ - full_info?: boolean - } - url: '/api/userdata' -} + body?: never; + path?: never; + query?: { + /** + * The directory to list files from. + */ + dir?: string; + /** + * Whether to list files recursively. + */ + recurse?: boolean; + /** + * Whether to split file information by type. + */ + split?: boolean; + /** + * Whether to return full file metadata. + */ + full_info?: boolean; + }; + url: '/api/userdata'; +}; export type GetUserdataErrors = { - /** - * Bad request (e.g., invalid filename). - */ - 400: string - /** - * Unauthorized. - */ - 401: string - /** - * File not found or invalid path. - */ - 404: string - /** - * General error - */ - 500: string -} + /** + * Bad request (e.g., invalid filename). + */ + 400: string; + /** + * Unauthorized. + */ + 401: string; + /** + * File not found or invalid path. + */ + 404: string; + /** + * General error + */ + 500: string; +}; -export type GetUserdataError = GetUserdataErrors[keyof GetUserdataErrors] +export type GetUserdataError = GetUserdataErrors[keyof GetUserdataErrors]; export type GetUserdataResponses = { - /** - * A list of user data files. - */ - 200: GetUserDataResponseFull -} + /** + * A list of user data files. + */ + 200: GetUserDataResponseFull; +}; -export type GetUserdataResponse = - GetUserdataResponses[keyof GetUserdataResponses] +export type GetUserdataResponse = GetUserdataResponses[keyof GetUserdataResponses]; export type GetUserdataFilePublishData = { - body?: never - path: { - /** - * The workflow file path within the user's data directory (URL encoded if necessary). - */ - file: string - } - query?: never - url: '/api/userdata/{file}/publish' -} + body?: never; + path: { + /** + * The workflow file path within the user's data directory (URL encoded if necessary). + */ + file: string; + }; + query?: never; + url: '/api/userdata/{file}/publish'; +}; export type GetUserdataFilePublishErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetUserdataFilePublishError = - GetUserdataFilePublishErrors[keyof GetUserdataFilePublishErrors] +export type GetUserdataFilePublishError = GetUserdataFilePublishErrors[keyof GetUserdataFilePublishErrors]; export type GetUserdataFilePublishResponses = { - /** - * Publish info (publish_time is null if never published) - */ - 200: WorkflowPublishInfo -} + /** + * Publish info (publish_time is null if never published) + */ + 200: WorkflowPublishInfo; +}; -export type GetUserdataFilePublishResponse = - GetUserdataFilePublishResponses[keyof GetUserdataFilePublishResponses] +export type GetUserdataFilePublishResponse = GetUserdataFilePublishResponses[keyof GetUserdataFilePublishResponses]; export type PostUserdataFilePublishData = { - body: PublishWorkflowAssetsRequest - path: { - /** - * The workflow file path within the user's data directory (URL encoded if necessary). - */ - file: string - } - query?: never - url: '/api/userdata/{file}/publish' -} + body: PublishWorkflowAssetsRequest; + path: { + /** + * The workflow file path within the user's data directory (URL encoded if necessary). + */ + file: string; + }; + query?: never; + url: '/api/userdata/{file}/publish'; +}; export type PostUserdataFilePublishErrors = { - /** - * Bad request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type PostUserdataFilePublishError = - PostUserdataFilePublishErrors[keyof PostUserdataFilePublishErrors] +export type PostUserdataFilePublishError = PostUserdataFilePublishErrors[keyof PostUserdataFilePublishErrors]; export type PostUserdataFilePublishResponses = { - /** - * Workflow published - */ - 200: WorkflowPublishInfo -} + /** + * Workflow published + */ + 200: WorkflowPublishInfo; +}; -export type PostUserdataFilePublishResponse = - PostUserdataFilePublishResponses[keyof PostUserdataFilePublishResponses] +export type PostUserdataFilePublishResponse = PostUserdataFilePublishResponses[keyof PostUserdataFilePublishResponses]; export type DeleteUserdataFileData = { - body?: never - path: { - /** - * The file path to delete (URL encoded if necessary). - */ - file: string - } - query?: never - url: '/api/userdata/{file}' -} + body?: never; + path: { + /** + * The file path to delete (URL encoded if necessary). + */ + file: string; + }; + query?: never; + url: '/api/userdata/{file}'; +}; export type DeleteUserdataFileErrors = { - /** - * Unauthorized. - */ - 401: string - /** - * File not found. - */ - 404: string - /** - * Internal server error. - */ - 500: string -} + /** + * Unauthorized. + */ + 401: string; + /** + * File not found. + */ + 404: string; + /** + * Internal server error. + */ + 500: string; +}; -export type DeleteUserdataFileError = - DeleteUserdataFileErrors[keyof DeleteUserdataFileErrors] +export type DeleteUserdataFileError = DeleteUserdataFileErrors[keyof DeleteUserdataFileErrors]; export type DeleteUserdataFileResponses = { - /** - * File deleted successfully (No Content). - */ - 204: void -} + /** + * File deleted successfully (No Content). + */ + 204: void; +}; -export type DeleteUserdataFileResponse = - DeleteUserdataFileResponses[keyof DeleteUserdataFileResponses] +export type DeleteUserdataFileResponse = DeleteUserdataFileResponses[keyof DeleteUserdataFileResponses]; export type GetUserdataFileData = { - body?: never - path: { - /** - * The filename of the user data to retrieve. - */ - file: string - } - query?: never - url: '/api/userdata/{file}' -} + body?: never; + path: { + /** + * The filename of the user data to retrieve. + */ + file: string; + }; + query?: never; + url: '/api/userdata/{file}'; +}; export type GetUserdataFileErrors = { - /** - * Bad request (e.g., invalid filename). - */ - 400: string - /** - * Unauthorized. - */ - 401: string - /** - * File not found or invalid path. - */ - 404: string - /** - * General error - */ - 500: string -} + /** + * Bad request (e.g., invalid filename). + */ + 400: string; + /** + * Unauthorized. + */ + 401: string; + /** + * File not found or invalid path. + */ + 404: string; + /** + * General error + */ + 500: string; +}; -export type GetUserdataFileError = - GetUserdataFileErrors[keyof GetUserdataFileErrors] +export type GetUserdataFileError = GetUserdataFileErrors[keyof GetUserdataFileErrors]; export type GetUserdataFileResponses = { - /** - * Successfully retrieved the file. - */ - 200: Blob | File -} + /** + * Successfully retrieved the file. + */ + 200: Blob | File; +}; -export type GetUserdataFileResponse = - GetUserdataFileResponses[keyof GetUserdataFileResponses] +export type GetUserdataFileResponse = GetUserdataFileResponses[keyof GetUserdataFileResponses]; export type PostUserdataFileData = { - body: Blob | File - path: { - /** - * The target file path (URL encoded if necessary). - */ - file: string - } - query?: { - /** - * If "false", prevents overwriting existing files. Defaults to "true". - */ - overwrite?: 'true' | 'false' - /** - * If "true", returns detailed file info; if "false", returns only the relative path. - */ - full_info?: 'true' | 'false' - } - url: '/api/userdata/{file}' -} + body: Blob | File; + path: { + /** + * The target file path (URL encoded if necessary). + */ + file: string; + }; + query?: { + /** + * If "false", prevents overwriting existing files. Defaults to "true". + */ + overwrite?: 'true' | 'false'; + /** + * If "true", returns detailed file info; if "false", returns only the relative path. + */ + full_info?: 'true' | 'false'; + }; + url: '/api/userdata/{file}'; +}; export type PostUserdataFileErrors = { - /** - * Missing or invalid 'file' parameter. - */ - 400: string - /** - * Unauthorized. - */ - 401: string - /** - * The requested path is not allowed. - */ - 403: string - /** - * File already exists and overwrite is set to false. - */ - 409: string - /** - * General error - */ - 500: string -} + /** + * Missing or invalid 'file' parameter. + */ + 400: string; + /** + * Unauthorized. + */ + 401: string; + /** + * The requested path is not allowed. + */ + 403: string; + /** + * File already exists and overwrite is set to false. + */ + 409: string; + /** + * General error + */ + 500: string; +}; -export type PostUserdataFileError = - PostUserdataFileErrors[keyof PostUserdataFileErrors] +export type PostUserdataFileError = PostUserdataFileErrors[keyof PostUserdataFileErrors]; export type PostUserdataFileResponses = { - /** - * File uploaded successfully. - */ - 200: UserDataResponseFull -} + /** + * File uploaded successfully. + */ + 200: UserDataResponseFull; +}; -export type PostUserdataFileResponse = - PostUserdataFileResponses[keyof PostUserdataFileResponses] +export type PostUserdataFileResponse = PostUserdataFileResponses[keyof PostUserdataFileResponses]; export type MoveUserdataFileData = { - body?: never - path: { - /** - * The source file path (URL encoded if necessary). - */ - file: string - /** - * The destination file path (URL encoded if necessary). - */ - dest: string - } - query?: { - /** - * If "false", prevents overwriting existing files. Defaults to "true". - */ - overwrite?: 'true' | 'false' - } - url: '/api/userdata/{file}/move/{dest}' -} + body?: never; + path: { + /** + * The source file path (URL encoded if necessary). + */ + file: string; + /** + * The destination file path (URL encoded if necessary). + */ + dest: string; + }; + query?: { + /** + * If "false", prevents overwriting existing files. Defaults to "true". + */ + overwrite?: 'true' | 'false'; + }; + url: '/api/userdata/{file}/move/{dest}'; +}; export type MoveUserdataFileErrors = { - /** - * Missing or invalid parameters. - */ - 400: string - /** - * Unauthorized. - */ - 401: string - /** - * Source file not found. - */ - 404: string - /** - * Destination file already exists and overwrite is set to false. - */ - 409: string - /** - * General error - */ - 500: string -} + /** + * Missing or invalid parameters. + */ + 400: string; + /** + * Unauthorized. + */ + 401: string; + /** + * Source file not found. + */ + 404: string; + /** + * Destination file already exists and overwrite is set to false. + */ + 409: string; + /** + * General error + */ + 500: string; +}; -export type MoveUserdataFileError = - MoveUserdataFileErrors[keyof MoveUserdataFileErrors] +export type MoveUserdataFileError = MoveUserdataFileErrors[keyof MoveUserdataFileErrors]; export type MoveUserdataFileResponses = { - /** - * File moved successfully. - */ - 200: UserDataResponseFull -} + /** + * File moved successfully. + */ + 200: UserDataResponseFull; +}; -export type MoveUserdataFileResponse = - MoveUserdataFileResponses[keyof MoveUserdataFileResponses] +export type MoveUserdataFileResponse = MoveUserdataFileResponses[keyof MoveUserdataFileResponses]; export type UploadImageData = { - body: { - /** - * The image file to upload - */ - image: Blob | File - /** - * Whether to overwrite existing file (true/false) - */ - overwrite?: string - /** - * Optional subfolder path - */ - subfolder?: string - /** - * Upload type (defaults to "output") - */ - type?: string - } - path?: never - query?: never - url: '/api/upload/image' -} + body: { + /** + * The image file to upload + */ + image: Blob | File; + /** + * Whether to overwrite existing file (true/false) + */ + overwrite?: string; + /** + * Optional subfolder path + */ + subfolder?: string; + /** + * Upload type (defaults to "output") + */ + type?: string; + }; + path?: never; + query?: never; + url: '/api/upload/image'; +}; export type UploadImageErrors = { - /** - * Bad request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UploadImageError = UploadImageErrors[keyof UploadImageErrors] +export type UploadImageError = UploadImageErrors[keyof UploadImageErrors]; export type UploadImageResponses = { - /** - * Image uploaded successfully - */ - 200: { /** - * Filename of the uploaded image + * Image uploaded successfully */ - name?: string - /** - * Subfolder path where image was saved - */ - subfolder?: string - /** - * Type of upload (e.g., "output") - */ - type?: string - } -} + 200: { + /** + * Filename of the uploaded image + */ + name?: string; + /** + * Subfolder path where image was saved + */ + subfolder?: string; + /** + * Type of upload (e.g., "output") + */ + type?: string; + }; +}; -export type UploadImageResponse = - UploadImageResponses[keyof UploadImageResponses] +export type UploadImageResponse = UploadImageResponses[keyof UploadImageResponses]; export type UploadMaskData = { - body: { - /** - * The mask image file to upload - */ - image: Blob | File - /** - * JSON string containing reference to the original image - */ - original_ref: string - } - path?: never - query?: never - url: '/api/upload/mask' -} + body: { + /** + * The mask image file to upload + */ + image: Blob | File; + /** + * JSON string containing reference to the original image + */ + original_ref: string; + }; + path?: never; + query?: never; + url: '/api/upload/mask'; +}; export type UploadMaskErrors = { - /** - * Bad request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UploadMaskError = UploadMaskErrors[keyof UploadMaskErrors] +export type UploadMaskError = UploadMaskErrors[keyof UploadMaskErrors]; export type UploadMaskResponses = { - /** - * Mask uploaded successfully - */ - 200: { /** - * Filename of the uploaded mask + * Mask uploaded successfully */ - name?: string - /** - * Subfolder path where mask was saved - */ - subfolder?: string - /** - * Type of upload (e.g., "output") - */ - type?: string - /** - * Additional metadata for mask detection and re-editing - */ - metadata?: { - /** - * Whether this file is a mask - */ - is_mask?: boolean - /** - * Hash of the original unmasked image - */ - original_hash?: string - /** - * Type of mask (e.g., "painted_masked") - */ - mask_type?: string - /** - * Related mask layer files (if available) - */ - related_files?: { + 200: { /** - * Hash of the mask layer + * Filename of the uploaded mask */ - mask?: string + name?: string; /** - * Hash of the paint layer + * Subfolder path where mask was saved */ - paint?: string + subfolder?: string; /** - * Hash of the painted image + * Type of upload (e.g., "output") */ - painted?: string - } - } - } -} + type?: string; + /** + * Additional metadata for mask detection and re-editing + */ + metadata?: { + /** + * Whether this file is a mask + */ + is_mask?: boolean; + /** + * Hash of the original unmasked image + */ + original_hash?: string; + /** + * Type of mask (e.g., "painted_masked") + */ + mask_type?: string; + /** + * Related mask layer files (if available) + */ + related_files?: { + /** + * Hash of the mask layer + */ + mask?: string; + /** + * Hash of the paint layer + */ + paint?: string; + /** + * Hash of the painted image + */ + painted?: string; + }; + }; + }; +}; -export type UploadMaskResponse = UploadMaskResponses[keyof UploadMaskResponses] +export type UploadMaskResponse = UploadMaskResponses[keyof UploadMaskResponses]; export type GetLogsData = { - body?: never - path?: never - query?: never - url: '/api/logs' -} + body?: never; + path?: never; + query?: never; + url: '/api/logs'; +}; export type GetLogsErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; +}; -export type GetLogsError = GetLogsErrors[keyof GetLogsErrors] +export type GetLogsError = GetLogsErrors[keyof GetLogsErrors]; export type GetLogsResponses = { - /** - * Success - */ - 200: LogsResponse -} + /** + * Success + */ + 200: LogsResponse; +}; -export type GetLogsResponse = GetLogsResponses[keyof GetLogsResponses] +export type GetLogsResponse = GetLogsResponses[keyof GetLogsResponses]; export type GetSystemStatsData = { - body?: never - path?: never - query?: never - url: '/api/system_stats' -} + body?: never; + path?: never; + query?: never; + url: '/api/system_stats'; +}; export type GetSystemStatsErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; +}; -export type GetSystemStatsError = - GetSystemStatsErrors[keyof GetSystemStatsErrors] +export type GetSystemStatsError = GetSystemStatsErrors[keyof GetSystemStatsErrors]; export type GetSystemStatsResponses = { - /** - * Success - */ - 200: SystemStatsResponse -} + /** + * Success + */ + 200: SystemStatsResponse; +}; -export type GetSystemStatsResponse = - GetSystemStatsResponses[keyof GetSystemStatsResponses] +export type GetSystemStatsResponse = GetSystemStatsResponses[keyof GetSystemStatsResponses]; export type DeleteSessionData = { - body?: never - path?: never - query?: never - url: '/api/auth/session' -} + body?: never; + path?: never; + query?: never; + url: '/api/auth/session'; +}; export type DeleteSessionErrors = { - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type DeleteSessionError = DeleteSessionErrors[keyof DeleteSessionErrors] +export type DeleteSessionError = DeleteSessionErrors[keyof DeleteSessionErrors]; export type DeleteSessionResponses = { - /** - * Session deleted successfully - */ - 200: DeleteSessionResponse -} + /** + * Session deleted successfully + */ + 200: DeleteSessionResponse; +}; -export type DeleteSessionResponse2 = - DeleteSessionResponses[keyof DeleteSessionResponses] +export type DeleteSessionResponse2 = DeleteSessionResponses[keyof DeleteSessionResponses]; export type CreateSessionData = { - body?: never - path?: never - query?: never - url: '/api/auth/session' -} + body?: never; + path?: never; + query?: never; + url: '/api/auth/session'; +}; export type CreateSessionErrors = { - /** - * Bad request - Invalid or old ID token - */ - 400: ErrorResponse - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request - Invalid or old ID token + */ + 400: ErrorResponse; + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateSessionError = CreateSessionErrors[keyof CreateSessionErrors] +export type CreateSessionError = CreateSessionErrors[keyof CreateSessionErrors]; export type CreateSessionResponses = { - /** - * Session created successfully - */ - 200: CreateSessionResponse -} + /** + * Session created successfully + */ + 200: CreateSessionResponse; +}; -export type CreateSessionResponse2 = - CreateSessionResponses[keyof CreateSessionResponses] +export type CreateSessionResponse2 = CreateSessionResponses[keyof CreateSessionResponses]; export type ExchangeTokenData = { - body?: ExchangeTokenRequest - path?: never - query?: never - url: '/api/auth/token' -} + body?: ExchangeTokenRequest; + path?: never; + query?: never; + url: '/api/auth/token'; +}; export type ExchangeTokenErrors = { - /** - * Invalid or expired Firebase JWT - */ - 401: ErrorResponse - /** - * Workspace not found or user not a member - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid or expired Firebase JWT + */ + 401: ErrorResponse; + /** + * Workspace not found or user not a member + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ExchangeTokenError = ExchangeTokenErrors[keyof ExchangeTokenErrors] +export type ExchangeTokenError = ExchangeTokenErrors[keyof ExchangeTokenErrors]; export type ExchangeTokenResponses = { - /** - * Token exchanged successfully - */ - 200: ExchangeTokenResponse -} + /** + * Token exchanged successfully + */ + 200: ExchangeTokenResponse; +}; -export type ExchangeTokenResponse2 = - ExchangeTokenResponses[keyof ExchangeTokenResponses] +export type ExchangeTokenResponse2 = ExchangeTokenResponses[keyof ExchangeTokenResponses]; export type GetJwksData = { - body?: never - path?: never - query?: never - url: '/.well-known/jwks.json' -} + body?: never; + path?: never; + query?: never; + url: '/.well-known/jwks.json'; +}; export type GetJwksResponses = { - /** - * JWKS response - */ - 200: JwksResponse -} + /** + * JWKS response + */ + 200: JwksResponse; +}; -export type GetJwksResponse = GetJwksResponses[keyof GetJwksResponses] +export type GetJwksResponse = GetJwksResponses[keyof GetJwksResponses]; + +export type GetOAuthAuthorizationServerData = { + body?: never; + path?: never; + query?: never; + url: '/.well-known/oauth-authorization-server'; +}; + +export type GetOAuthAuthorizationServerErrors = { + /** + * OAuth disabled + */ + 404: ErrorResponse; +}; + +export type GetOAuthAuthorizationServerError = GetOAuthAuthorizationServerErrors[keyof GetOAuthAuthorizationServerErrors]; + +export type GetOAuthAuthorizationServerResponses = { + /** + * Authorization-server metadata + */ + 200: OAuthAuthorizationServerMetadata; +}; + +export type GetOAuthAuthorizationServerResponse = GetOAuthAuthorizationServerResponses[keyof GetOAuthAuthorizationServerResponses]; + +export type GetOAuthProtectedResourceData = { + body?: never; + path?: never; + query?: never; + url: '/.well-known/oauth-protected-resource'; +}; + +export type GetOAuthProtectedResourceErrors = { + /** + * OAuth disabled or no active resource configured + */ + 404: ErrorResponse; +}; + +export type GetOAuthProtectedResourceError = GetOAuthProtectedResourceErrors[keyof GetOAuthProtectedResourceErrors]; + +export type GetOAuthProtectedResourceResponses = { + /** + * Protected-resource metadata + */ + 200: OAuthProtectedResourceMetadata; +}; + +export type GetOAuthProtectedResourceResponse = GetOAuthProtectedResourceResponses[keyof GetOAuthProtectedResourceResponses]; + +export type GetOAuthAuthorizeData = { + body?: never; + path?: never; + query?: { + response_type?: string; + client_id?: string; + redirect_uri?: string; + scope?: string; + /** + * RFC 6749 §10.12 marks `state` as RECOMMENDED. Our hardening makes + * it REQUIRED on the initial-entry path (omitted only on the resume + * path where `oauth_request_id` is supplied instead). This parameter + * is `required: false` at the spec level only because the operation + * is dual-mode (initial entry vs. resume); the runtime parser + * (services/ingest/server/implementation/oauth/protocol/request.go) + * rejects empty `state` on the initial-entry path with a stable + * `invalid_request` 400. + * + */ + state?: string; + code_challenge?: string; + code_challenge_method?: string; + resource?: string; + oauth_request_id?: string; + }; + url: '/oauth/authorize'; +}; + +export type GetOAuthAuthorizeErrors = { + /** + * Invalid authorize request (pre-redirect failure — unknown client, redirect mismatch, malformed params) + */ + 400: ErrorResponse; + /** + * OAuth disabled + */ + 404: ErrorResponse; +}; + +export type GetOAuthAuthorizeError = GetOAuthAuthorizeErrors[keyof GetOAuthAuthorizeErrors]; + +export type GetOAuthAuthorizeResponses = { + /** + * Consent challenge payload (cookie present, email verified). Frontend renders the consent UI from this payload and POSTs back to /oauth/authorize. + * + */ + 200: OAuthConsentChallenge; +}; + +export type GetOAuthAuthorizeResponse = GetOAuthAuthorizeResponses[keyof GetOAuthAuthorizeResponses]; + +export type PostOAuthAuthorizeData = { + body: { + oauth_request_id: string; + csrf_token: string; + decision: 'allow' | 'deny'; + workspace_id: string; + }; + path?: never; + query?: never; + url: '/oauth/authorize'; +}; + +export type PostOAuthAuthorizeErrors = { + /** + * Bad request (CSRF mismatch, expired/consumed request, inaccessible workspace) + */ + 400: ErrorResponse; + /** + * Scope broadening on consent re-grant — fresh consent flow required + */ + 403: ErrorResponse; + /** + * OAuth disabled + */ + 404: ErrorResponse; +}; + +export type PostOAuthAuthorizeError = PostOAuthAuthorizeErrors[keyof PostOAuthAuthorizeErrors]; + +export type PostOAuthAuthorizeResponses = { + /** + * Redirect URL for the frontend to navigate to (allow → with code+state; deny → with error+state) + */ + 200: OAuthAuthorizeRedirectResponse; +}; + +export type PostOAuthAuthorizeResponse = PostOAuthAuthorizeResponses[keyof PostOAuthAuthorizeResponses]; + +export type PostOAuthTokenData = { + body: { + grant_type: 'authorization_code' | 'refresh_token'; + client_id: string; + code?: string; + redirect_uri?: string; + code_verifier?: string; + refresh_token?: string; + scope?: string; + client_secret?: string; + }; + path?: never; + query?: never; + url: '/oauth/token'; +}; + +export type PostOAuthTokenErrors = { + /** + * RFC 6749 §5.2 error + */ + 400: OAuthTokenError; + /** + * OAuth disabled + */ + 404: ErrorResponse; +}; + +export type PostOAuthTokenError = PostOAuthTokenErrors[keyof PostOAuthTokenErrors]; + +export type PostOAuthTokenResponses = { + /** + * New token pair + */ + 200: OAuthTokenResponse; +}; + +export type PostOAuthTokenResponse = PostOAuthTokenResponses[keyof PostOAuthTokenResponses]; + +export type PostOAuthRegisterData = { + body: OAuthRegisterRequest; + path?: never; + query?: never; + url: '/oauth/register'; +}; + +export type PostOAuthRegisterErrors = { + /** + * Bad request. Two shapes possible: `OAuthRegisterError` (RFC 7591 §3.2.2, emitted by the handler for invalid client metadata, missing application_type, reserved client_name, etc.) OR `BindingErrorResponse` (emitted by the strict-server binding layer when the request body fails OpenAPI-schema validation — malformed JSON, missing required fields, `additionalProperties: false` violations). + * + */ + 400: OAuthRegisterBadRequestResponse; + /** + * OAuth disabled + */ + 404: ErrorResponse; + /** + * No active MCP resource is configured — DCR cannot mint a usable client until ops seeds an active oauth_resources row. + */ + 503: ErrorResponse; +}; + +export type PostOAuthRegisterError = PostOAuthRegisterErrors[keyof PostOAuthRegisterErrors]; + +export type PostOAuthRegisterResponses = { + /** + * Registered. Body echoes the metadata RFC 7591 §3.2.1 requires. + */ + 201: OAuthRegisterResponse; +}; + +export type PostOAuthRegisterResponse = PostOAuthRegisterResponses[keyof PostOAuthRegisterResponses]; export type ListWorkspacesData = { - body?: never - path?: never - query?: never - url: '/api/workspaces' -} + body?: never; + path?: never; + query?: never; + url: '/api/workspaces'; +}; export type ListWorkspacesErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Feature not enabled for user - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Feature not enabled for user + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListWorkspacesError = - ListWorkspacesErrors[keyof ListWorkspacesErrors] +export type ListWorkspacesError = ListWorkspacesErrors[keyof ListWorkspacesErrors]; export type ListWorkspacesResponses = { - /** - * List of workspaces - */ - 200: ListWorkspacesResponse -} + /** + * List of workspaces + */ + 200: ListWorkspacesResponse; +}; -export type ListWorkspacesResponse2 = - ListWorkspacesResponses[keyof ListWorkspacesResponses] +export type ListWorkspacesResponse2 = ListWorkspacesResponses[keyof ListWorkspacesResponses]; export type CreateWorkspaceData = { - body: CreateWorkspaceRequest - path?: never - query?: never - url: '/api/workspaces' -} + body: CreateWorkspaceRequest; + path?: never; + query?: never; + url: '/api/workspaces'; +}; export type CreateWorkspaceErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Feature not enabled for user - */ - 404: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Feature not enabled for user + */ + 404: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateWorkspaceError = - CreateWorkspaceErrors[keyof CreateWorkspaceErrors] +export type CreateWorkspaceError = CreateWorkspaceErrors[keyof CreateWorkspaceErrors]; export type CreateWorkspaceResponses = { - /** - * Workspace created - */ - 201: Workspace -} + /** + * Workspace created + */ + 201: Workspace; +}; -export type CreateWorkspaceResponse = - CreateWorkspaceResponses[keyof CreateWorkspaceResponses] +export type CreateWorkspaceResponse = CreateWorkspaceResponses[keyof CreateWorkspaceResponses]; export type DeleteWorkspaceData = { - body?: never - path: { - /** - * Workspace ID (w-{uuid} format) - */ - id: string - } - query?: never - url: '/api/workspaces/{id}' -} + body?: never; + path: { + /** + * Workspace ID (w-{uuid} format) + */ + id: string; + }; + query?: never; + url: '/api/workspaces/{id}'; +}; export type DeleteWorkspaceErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Owner role required or cannot delete personal workspace - */ - 403: ErrorResponse - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Owner role required or cannot delete personal workspace + */ + 403: ErrorResponse; + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type DeleteWorkspaceError = - DeleteWorkspaceErrors[keyof DeleteWorkspaceErrors] +export type DeleteWorkspaceError = DeleteWorkspaceErrors[keyof DeleteWorkspaceErrors]; export type DeleteWorkspaceResponses = { - /** - * Workspace deleted - */ - 204: void -} + /** + * Workspace deleted + */ + 204: void; +}; -export type DeleteWorkspaceResponse = - DeleteWorkspaceResponses[keyof DeleteWorkspaceResponses] +export type DeleteWorkspaceResponse = DeleteWorkspaceResponses[keyof DeleteWorkspaceResponses]; export type GetWorkspaceData = { - body?: never - path: { - /** - * Workspace ID (w-{uuid} format) - */ - id: string - } - query?: never - url: '/api/workspaces/{id}' -} + body?: never; + path: { + /** + * Workspace ID (w-{uuid} format) + */ + id: string; + }; + query?: never; + url: '/api/workspaces/{id}'; +}; export type GetWorkspaceErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workspace not found or user not a member - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workspace not found or user not a member + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetWorkspaceError = GetWorkspaceErrors[keyof GetWorkspaceErrors] +export type GetWorkspaceError = GetWorkspaceErrors[keyof GetWorkspaceErrors]; export type GetWorkspaceResponses = { - /** - * Workspace details - */ - 200: Workspace -} + /** + * Workspace details + */ + 200: Workspace; +}; -export type GetWorkspaceResponse = - GetWorkspaceResponses[keyof GetWorkspaceResponses] +export type GetWorkspaceResponse = GetWorkspaceResponses[keyof GetWorkspaceResponses]; export type UpdateWorkspaceData = { - body: UpdateWorkspaceRequest - path: { - /** - * Workspace ID (w-{uuid} format) - */ - id: string - } - query?: never - url: '/api/workspaces/{id}' -} + body: UpdateWorkspaceRequest; + path: { + /** + * Workspace ID (w-{uuid} format) + */ + id: string; + }; + query?: never; + url: '/api/workspaces/{id}'; +}; export type UpdateWorkspaceErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Owner role required - */ - 403: ErrorResponse - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Owner role required + */ + 403: ErrorResponse; + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UpdateWorkspaceError = - UpdateWorkspaceErrors[keyof UpdateWorkspaceErrors] +export type UpdateWorkspaceError = UpdateWorkspaceErrors[keyof UpdateWorkspaceErrors]; export type UpdateWorkspaceResponses = { - /** - * Workspace updated - */ - 200: Workspace -} + /** + * Workspace updated + */ + 200: Workspace; +}; -export type UpdateWorkspaceResponse = - UpdateWorkspaceResponses[keyof UpdateWorkspaceResponses] +export type UpdateWorkspaceResponse = UpdateWorkspaceResponses[keyof UpdateWorkspaceResponses]; export type ListWorkspaceMembersData = { - body?: never - path?: never - query?: { - /** - * Pagination offset (0-based) - */ - offset?: number - /** - * Maximum number of members to return - */ - limit?: number - } - url: '/api/workspace/members' -} + body?: never; + path?: never; + query?: { + /** + * Pagination offset (0-based) + */ + offset?: number; + /** + * Maximum number of members to return + */ + limit?: number; + }; + url: '/api/workspace/members'; +}; export type ListWorkspaceMembersErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not a member of this workspace - */ - 403: ErrorResponse - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not a member of this workspace + */ + 403: ErrorResponse; + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListWorkspaceMembersError = - ListWorkspaceMembersErrors[keyof ListWorkspaceMembersErrors] +export type ListWorkspaceMembersError = ListWorkspaceMembersErrors[keyof ListWorkspaceMembersErrors]; export type ListWorkspaceMembersResponses = { - /** - * List of members - */ - 200: ListMembersResponse -} + /** + * List of members + */ + 200: ListMembersResponse; +}; -export type ListWorkspaceMembersResponse = - ListWorkspaceMembersResponses[keyof ListWorkspaceMembersResponses] +export type ListWorkspaceMembersResponse = ListWorkspaceMembersResponses[keyof ListWorkspaceMembersResponses]; export type ListWorkspaceInvitesData = { - body?: never - path?: never - query?: never - url: '/api/workspace/invites' -} + body?: never; + path?: never; + query?: never; + url: '/api/workspace/invites'; +}; export type ListWorkspaceInvitesErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Owner role required - */ - 403: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Owner role required + */ + 403: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListWorkspaceInvitesError = - ListWorkspaceInvitesErrors[keyof ListWorkspaceInvitesErrors] +export type ListWorkspaceInvitesError = ListWorkspaceInvitesErrors[keyof ListWorkspaceInvitesErrors]; export type ListWorkspaceInvitesResponses = { - /** - * List of pending invites - */ - 200: ListInvitesResponse -} + /** + * List of pending invites + */ + 200: ListInvitesResponse; +}; -export type ListWorkspaceInvitesResponse = - ListWorkspaceInvitesResponses[keyof ListWorkspaceInvitesResponses] +export type ListWorkspaceInvitesResponse = ListWorkspaceInvitesResponses[keyof ListWorkspaceInvitesResponses]; export type CreateWorkspaceInviteData = { - body: CreateInviteRequest - path?: never - query?: never - url: '/api/workspace/invites' -} + body: CreateInviteRequest; + path?: never; + query?: never; + url: '/api/workspace/invites'; +}; export type CreateWorkspaceInviteErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Owner role required or personal workspace (invites not allowed) - */ - 403: ErrorResponse - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Invite already exists - */ - 409: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Owner role required or personal workspace (invites not allowed) + */ + 403: ErrorResponse; + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Invite already exists + */ + 409: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateWorkspaceInviteError = - CreateWorkspaceInviteErrors[keyof CreateWorkspaceInviteErrors] +export type CreateWorkspaceInviteError = CreateWorkspaceInviteErrors[keyof CreateWorkspaceInviteErrors]; export type CreateWorkspaceInviteResponses = { - /** - * Invite created - */ - 201: PendingInvite -} + /** + * Invite created + */ + 201: PendingInvite; +}; -export type CreateWorkspaceInviteResponse = - CreateWorkspaceInviteResponses[keyof CreateWorkspaceInviteResponses] +export type CreateWorkspaceInviteResponse = CreateWorkspaceInviteResponses[keyof CreateWorkspaceInviteResponses]; export type AcceptWorkspaceInviteData = { - body?: never - path: { - /** - * Invite token - */ - token: string - } - query?: never - url: '/api/invites/{token}/accept' -} + body?: never; + path: { + /** + * Invite token + */ + token: string; + }; + query?: never; + url: '/api/invites/{token}/accept'; +}; export type AcceptWorkspaceInviteErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Email does not match invite - */ - 403: ErrorResponse - /** - * Invite not found or expired - */ - 404: ErrorResponse - /** - * Already a member of this workspace - */ - 409: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Email does not match invite + */ + 403: ErrorResponse; + /** + * Invite not found or expired + */ + 404: ErrorResponse; + /** + * Already a member of this workspace + */ + 409: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type AcceptWorkspaceInviteError = - AcceptWorkspaceInviteErrors[keyof AcceptWorkspaceInviteErrors] +export type AcceptWorkspaceInviteError = AcceptWorkspaceInviteErrors[keyof AcceptWorkspaceInviteErrors]; export type AcceptWorkspaceInviteResponses = { - /** - * Invite accepted, user is now a member - */ - 200: AcceptInviteResponse -} + /** + * Invite accepted, user is now a member + */ + 200: AcceptInviteResponse; +}; -export type AcceptWorkspaceInviteResponse = - AcceptWorkspaceInviteResponses[keyof AcceptWorkspaceInviteResponses] +export type AcceptWorkspaceInviteResponse = AcceptWorkspaceInviteResponses[keyof AcceptWorkspaceInviteResponses]; export type LeaveWorkspaceData = { - body?: never - path?: never - query?: never - url: '/api/workspace/leave' -} + body?: never; + path?: never; + query?: never; + url: '/api/workspace/leave'; +}; export type LeaveWorkspaceErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Cannot leave as the only owner or cannot leave personal workspace - */ - 403: ErrorResponse - /** - * Workspace not found or not a member - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Cannot leave as the only owner or cannot leave personal workspace + */ + 403: ErrorResponse; + /** + * Workspace not found or not a member + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type LeaveWorkspaceError = - LeaveWorkspaceErrors[keyof LeaveWorkspaceErrors] +export type LeaveWorkspaceError = LeaveWorkspaceErrors[keyof LeaveWorkspaceErrors]; export type LeaveWorkspaceResponses = { - /** - * Successfully left workspace - */ - 204: void -} + /** + * Successfully left workspace + */ + 204: void; +}; -export type LeaveWorkspaceResponse = - LeaveWorkspaceResponses[keyof LeaveWorkspaceResponses] +export type LeaveWorkspaceResponse = LeaveWorkspaceResponses[keyof LeaveWorkspaceResponses]; export type RevokeWorkspaceInviteData = { - body?: never - path: { - /** - * Invite ID to revoke - */ - inviteId: string - } - query?: never - url: '/api/workspace/invites/{inviteId}' -} + body?: never; + path: { + /** + * Invite ID to revoke + */ + inviteId: string; + }; + query?: never; + url: '/api/workspace/invites/{inviteId}'; +}; export type RevokeWorkspaceInviteErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Owner role required - */ - 403: ErrorResponse - /** - * Workspace or invite not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Owner role required + */ + 403: ErrorResponse; + /** + * Workspace or invite not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type RevokeWorkspaceInviteError = - RevokeWorkspaceInviteErrors[keyof RevokeWorkspaceInviteErrors] +export type RevokeWorkspaceInviteError = RevokeWorkspaceInviteErrors[keyof RevokeWorkspaceInviteErrors]; export type RevokeWorkspaceInviteResponses = { - /** - * Invite revoked - */ - 204: void -} + /** + * Invite revoked + */ + 204: void; +}; -export type RevokeWorkspaceInviteResponse = - RevokeWorkspaceInviteResponses[keyof RevokeWorkspaceInviteResponses] +export type RevokeWorkspaceInviteResponse = RevokeWorkspaceInviteResponses[keyof RevokeWorkspaceInviteResponses]; export type RemoveWorkspaceMemberData = { - body?: never - path: { - /** - * User ID to remove - */ - userId: string - } - query?: never - url: '/api/workspace/members/{userId}' -} + body?: never; + path: { + /** + * User ID to remove + */ + userId: string; + }; + query?: never; + url: '/api/workspace/members/{userId}'; +}; export type RemoveWorkspaceMemberErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Owner role required or cannot remove yourself - */ - 403: ErrorResponse - /** - * Workspace or member not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Owner role required or cannot remove yourself + */ + 403: ErrorResponse; + /** + * Workspace or member not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type RemoveWorkspaceMemberError = - RemoveWorkspaceMemberErrors[keyof RemoveWorkspaceMemberErrors] +export type RemoveWorkspaceMemberError = RemoveWorkspaceMemberErrors[keyof RemoveWorkspaceMemberErrors]; export type RemoveWorkspaceMemberResponses = { - /** - * Member removed - */ - 204: void -} + /** + * Member removed + */ + 204: void; +}; -export type RemoveWorkspaceMemberResponse = - RemoveWorkspaceMemberResponses[keyof RemoveWorkspaceMemberResponses] +export type RemoveWorkspaceMemberResponse = RemoveWorkspaceMemberResponses[keyof RemoveWorkspaceMemberResponses]; export type ListWorkspaceApiKeysData = { - body?: never - path?: never - query?: never - url: '/api/workspace/api-keys' -} + body?: never; + path?: never; + query?: never; + url: '/api/workspace/api-keys'; +}; export type ListWorkspaceApiKeysErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - */ - 403: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden + */ + 403: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListWorkspaceApiKeysError = - ListWorkspaceApiKeysErrors[keyof ListWorkspaceApiKeysErrors] +export type ListWorkspaceApiKeysError = ListWorkspaceApiKeysErrors[keyof ListWorkspaceApiKeysErrors]; export type ListWorkspaceApiKeysResponses = { - /** - * List of API keys - */ - 200: ListWorkspaceApiKeysResponse -} + /** + * List of API keys + */ + 200: ListWorkspaceApiKeysResponse; +}; -export type ListWorkspaceApiKeysResponse2 = - ListWorkspaceApiKeysResponses[keyof ListWorkspaceApiKeysResponses] +export type ListWorkspaceApiKeysResponse2 = ListWorkspaceApiKeysResponses[keyof ListWorkspaceApiKeysResponses]; export type CreateWorkspaceApiKeyData = { - body: CreateWorkspaceApiKeyRequest - path?: never - query?: never - url: '/api/workspace/api-keys' -} + body: CreateWorkspaceApiKeyRequest; + path?: never; + query?: never; + url: '/api/workspace/api-keys'; +}; export type CreateWorkspaceApiKeyErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not a workspace member or personal workspace - */ - 403: ErrorResponse - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Key limit reached - */ - 429: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not a workspace member + */ + 403: ErrorResponse; + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Key limit reached + */ + 429: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateWorkspaceApiKeyError = - CreateWorkspaceApiKeyErrors[keyof CreateWorkspaceApiKeyErrors] +export type CreateWorkspaceApiKeyError = CreateWorkspaceApiKeyErrors[keyof CreateWorkspaceApiKeyErrors]; export type CreateWorkspaceApiKeyResponses = { - /** - * API key created (plaintext returned once) - */ - 201: CreateWorkspaceApiKeyResponse -} + /** + * API key created (plaintext returned once) + */ + 201: CreateWorkspaceApiKeyResponse; +}; -export type CreateWorkspaceApiKeyResponse2 = - CreateWorkspaceApiKeyResponses[keyof CreateWorkspaceApiKeyResponses] +export type CreateWorkspaceApiKeyResponse2 = CreateWorkspaceApiKeyResponses[keyof CreateWorkspaceApiKeyResponses]; export type RevokeWorkspaceApiKeyData = { - body?: never - path: { - /** - * API key ID to revoke - */ - id: string - } - query?: never - url: '/api/workspace/api-keys/{id}' -} + body?: never; + path: { + /** + * API key ID to revoke + */ + id: string; + }; + query?: never; + url: '/api/workspace/api-keys/{id}'; +}; export type RevokeWorkspaceApiKeyErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not authorized to revoke this key - */ - 403: ErrorResponse - /** - * API key not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not authorized to revoke this key + */ + 403: ErrorResponse; + /** + * API key not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type RevokeWorkspaceApiKeyError = - RevokeWorkspaceApiKeyErrors[keyof RevokeWorkspaceApiKeyErrors] +export type RevokeWorkspaceApiKeyError = RevokeWorkspaceApiKeyErrors[keyof RevokeWorkspaceApiKeyErrors]; export type RevokeWorkspaceApiKeyResponses = { - /** - * API key revoked - */ - 204: void -} + /** + * API key revoked + */ + 204: void; +}; -export type RevokeWorkspaceApiKeyResponse = - RevokeWorkspaceApiKeyResponses[keyof RevokeWorkspaceApiKeyResponses] +export type RevokeWorkspaceApiKeyResponse = RevokeWorkspaceApiKeyResponses[keyof RevokeWorkspaceApiKeyResponses]; export type BulkRevokeWorkspaceMemberApiKeysData = { - body?: never - path: { - /** - * Firebase UID of the member whose keys to revoke (must be non-empty) - */ - user_id: string - } - query?: never - url: '/api/workspace/members/{user_id}/api-keys' -} + body?: never; + path: { + /** + * Firebase UID of the member whose keys to revoke (must be non-empty) + */ + user_id: string; + }; + query?: never; + url: '/api/workspace/members/{user_id}/api-keys'; +}; export type BulkRevokeWorkspaceMemberApiKeysErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not authorized (must be workspace owner) - */ - 403: ErrorResponse - /** - * Validation error (e.g. empty user_id) - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not authorized (must be workspace owner) + */ + 403: ErrorResponse; + /** + * Validation error (e.g. empty user_id) + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type BulkRevokeWorkspaceMemberApiKeysError = - BulkRevokeWorkspaceMemberApiKeysErrors[keyof BulkRevokeWorkspaceMemberApiKeysErrors] +export type BulkRevokeWorkspaceMemberApiKeysError = BulkRevokeWorkspaceMemberApiKeysErrors[keyof BulkRevokeWorkspaceMemberApiKeysErrors]; export type BulkRevokeWorkspaceMemberApiKeysResponses = { - /** - * Keys revoked successfully - */ - 200: BulkRevokeApiKeysResponse -} + /** + * Keys revoked successfully + */ + 200: BulkRevokeApiKeysResponse; +}; -export type BulkRevokeWorkspaceMemberApiKeysResponse = - BulkRevokeWorkspaceMemberApiKeysResponses[keyof BulkRevokeWorkspaceMemberApiKeysResponses] +export type BulkRevokeWorkspaceMemberApiKeysResponse = BulkRevokeWorkspaceMemberApiKeysResponses[keyof BulkRevokeWorkspaceMemberApiKeysResponses]; export type VerifyWorkspaceApiKeyData = { - body: VerifyApiKeyRequest - path?: never - query?: { - /** - * When true, fetches real billing status from the billing service and populates has_funds and is_active accordingly. When false or omitted, the billing lookup is skipped and has_funds/is_active are returned as true (optimistic defaults). Use true when the caller needs to gate access based on billing (e.g. partner node auth); omit for identity-only lookups (e.g. key caching). - */ - include_billing?: boolean - } - url: '/admin/api/keys/verify' -} + body: VerifyApiKeyRequest; + path?: never; + query?: { + /** + * When true, fetches real billing status from the billing service and populates has_funds and is_active accordingly. When false or omitted, the billing lookup is skipped and has_funds/is_active are returned as true (optimistic defaults). Use true when the caller needs to gate access based on billing (e.g. partner node auth); omit for identity-only lookups (e.g. key caching). + */ + include_billing?: boolean; + }; + url: '/admin/api/keys/verify'; +}; export type VerifyWorkspaceApiKeyErrors = { - /** - * Invalid key or unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid key or unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type VerifyWorkspaceApiKeyError = - VerifyWorkspaceApiKeyErrors[keyof VerifyWorkspaceApiKeyErrors] +export type VerifyWorkspaceApiKeyError = VerifyWorkspaceApiKeyErrors[keyof VerifyWorkspaceApiKeyErrors]; export type VerifyWorkspaceApiKeyResponses = { - /** - * Key is valid - */ - 200: VerifyApiKeyResponse -} + /** + * Key is valid + */ + 200: VerifyApiKeyResponse; +}; -export type VerifyWorkspaceApiKeyResponse = - VerifyWorkspaceApiKeyResponses[keyof VerifyWorkspaceApiKeyResponses] +export type VerifyWorkspaceApiKeyResponse = VerifyWorkspaceApiKeyResponses[keyof VerifyWorkspaceApiKeyResponses]; export type GetUserData = { - body?: never - path?: never - query?: never - url: '/api/user' -} + body?: never; + path?: never; + query?: never; + url: '/api/user'; +}; export type GetUserErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; +}; -export type GetUserError = GetUserErrors[keyof GetUserErrors] +export type GetUserError = GetUserErrors[keyof GetUserErrors]; export type GetUserResponses = { - /** - * Success - */ - 200: UserResponse -} + /** + * Success + */ + 200: UserResponse; +}; -export type GetUserResponse = GetUserResponses[keyof GetUserResponses] +export type GetUserResponse = GetUserResponses[keyof GetUserResponses]; export type SetReviewStatusData = { - body: SetReviewStatusRequest - path?: never - query?: never - url: '/admin/api/hub/workflows/status' -} + body: SetReviewStatusRequest; + path?: never; + query?: never; + url: '/admin/api/hub/workflows/status'; +}; export type SetReviewStatusErrors = { - /** - * Bad request - invalid status value or empty share_ids - */ - 400: ErrorResponse - /** - * Unauthorized - authentication required - */ - 401: ErrorResponse - /** - * Forbidden - insufficient permissions - */ - 403: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request - invalid status value or empty share_ids + */ + 400: ErrorResponse; + /** + * Unauthorized - authentication required + */ + 401: ErrorResponse; + /** + * Forbidden - insufficient permissions + */ + 403: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type SetReviewStatusError = - SetReviewStatusErrors[keyof SetReviewStatusErrors] +export type SetReviewStatusError = SetReviewStatusErrors[keyof SetReviewStatusErrors]; export type SetReviewStatusResponses = { - /** - * Status updated successfully - */ - 200: SetReviewStatusResponse -} + /** + * Status updated successfully + */ + 200: SetReviewStatusResponse; +}; -export type SetReviewStatusResponse2 = - SetReviewStatusResponses[keyof SetReviewStatusResponses] +export type SetReviewStatusResponse2 = SetReviewStatusResponses[keyof SetReviewStatusResponses]; export type UpdateHubWorkflowData = { - body: UpdateHubWorkflowRequest - path: { - /** - * The share ID of the hub workflow to update. - */ - share_id: string - } - query?: never - url: '/admin/api/hub/workflows/{share_id}' -} + body: UpdateHubWorkflowRequest; + path: { + /** + * The share ID of the hub workflow to update. + */ + share_id: string; + }; + query?: never; + url: '/admin/api/hub/workflows/{share_id}'; +}; export type UpdateHubWorkflowErrors = { - /** - * Bad request - invalid field, unknown label slug, or invalid media token - */ - 400: ErrorResponse - /** - * Unauthorized - authentication required - */ - 401: ErrorResponse - /** - * Forbidden - insufficient permissions - */ - 403: ErrorResponse - /** - * Not found - no published workflow for the given share_id - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request - invalid field, unknown label slug, or invalid media token + */ + 400: ErrorResponse; + /** + * Unauthorized - authentication required + */ + 401: ErrorResponse; + /** + * Forbidden - insufficient permissions + */ + 403: ErrorResponse; + /** + * Not found - no published workflow for the given share_id + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UpdateHubWorkflowError = - UpdateHubWorkflowErrors[keyof UpdateHubWorkflowErrors] +export type UpdateHubWorkflowError = UpdateHubWorkflowErrors[keyof UpdateHubWorkflowErrors]; export type UpdateHubWorkflowResponses = { - /** - * Updated hub workflow detail - */ - 200: HubWorkflowDetail -} + /** + * Updated hub workflow detail + */ + 200: HubWorkflowDetail; +}; -export type UpdateHubWorkflowResponse = - UpdateHubWorkflowResponses[keyof UpdateHubWorkflowResponses] +export type UpdateHubWorkflowResponse = UpdateHubWorkflowResponses[keyof UpdateHubWorkflowResponses]; export type GetDeletionRequestData = { - body?: never - path?: never - query: { - /** - * The Firebase ID of the user - */ - firebase_id: string - } - url: '/admin/api/deletion_requests' -} + body?: never; + path?: never; + query: { + /** + * The Firebase ID of the user + */ + firebase_id: string; + }; + url: '/admin/api/deletion_requests'; +}; export type GetDeletionRequestErrors = { - /** - * Bad request - invalid request body - */ - 400: ErrorResponse - /** - * Unauthorized - authentication required - */ - 401: ErrorResponse - /** - * Forbidden - insufficient permissions - */ - 403: ErrorResponse - /** - * Deletion request not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request - invalid request body + */ + 400: ErrorResponse; + /** + * Unauthorized - authentication required + */ + 401: ErrorResponse; + /** + * Forbidden - insufficient permissions + */ + 403: ErrorResponse; + /** + * Deletion request not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetDeletionRequestError = - GetDeletionRequestErrors[keyof GetDeletionRequestErrors] +export type GetDeletionRequestError = GetDeletionRequestErrors[keyof GetDeletionRequestErrors]; export type GetDeletionRequestResponses = { - /** - * Success - deletion request found - */ - 200: Array -} + /** + * Success - deletion request found + */ + 200: Array; +}; -export type GetDeletionRequestResponse = - GetDeletionRequestResponses[keyof GetDeletionRequestResponses] +export type GetDeletionRequestResponse = GetDeletionRequestResponses[keyof GetDeletionRequestResponses]; export type CreateDeletionRequestData = { - body: { - /** - * The Firebase ID of the user to delete - */ - firebase_id: string - } - path?: never - query?: never - url: '/admin/api/deletion_requests' -} + body: { + /** + * The Firebase ID of the user to delete + */ + firebase_id: string; + }; + path?: never; + query?: never; + url: '/admin/api/deletion_requests'; +}; export type CreateDeletionRequestErrors = { - /** - * Bad request - invalid request body - */ - 400: ErrorResponse - /** - * Unauthorized - authentication required - */ - 401: ErrorResponse - /** - * Forbidden - insufficient permissions - */ - 403: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request - invalid request body + */ + 400: ErrorResponse; + /** + * Unauthorized - authentication required + */ + 401: ErrorResponse; + /** + * Forbidden - insufficient permissions + */ + 403: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateDeletionRequestError = - CreateDeletionRequestErrors[keyof CreateDeletionRequestErrors] +export type CreateDeletionRequestError = CreateDeletionRequestErrors[keyof CreateDeletionRequestErrors]; export type CreateDeletionRequestResponses = { - /** - * Created - deletion request created or already exists - */ - 201: { /** - * Whether the user had a record in the cloud database + * Created - deletion request created or already exists */ - user_found_in_cloud: boolean - } -} + 201: { + /** + * Whether the user had a record in the cloud database + */ + user_found_in_cloud: boolean; + }; +}; -export type CreateDeletionRequestResponse = - CreateDeletionRequestResponses[keyof CreateDeletionRequestResponses] +export type CreateDeletionRequestResponse = CreateDeletionRequestResponses[keyof CreateDeletionRequestResponses]; export type ReportPartnerUsageData = { - body: PartnerUsageRequest - path?: never - query?: never - url: '/admin/api/partner-usage' -} + body: PartnerUsageRequest; + path?: never; + query?: never; + url: '/admin/api/partner-usage'; +}; export type ReportPartnerUsageErrors = { - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Validation error - missing or empty required fields - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Validation error - missing or empty required fields + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ReportPartnerUsageError = - ReportPartnerUsageErrors[keyof ReportPartnerUsageErrors] +export type ReportPartnerUsageError = ReportPartnerUsageErrors[keyof ReportPartnerUsageErrors]; export type ReportPartnerUsageResponses = { - /** - * Usage reported successfully - */ - 200: PartnerUsageResponse -} + /** + * Usage reported successfully + */ + 200: PartnerUsageResponse; +}; -export type ReportPartnerUsageResponse = - ReportPartnerUsageResponses[keyof ReportPartnerUsageResponses] +export type ReportPartnerUsageResponse = ReportPartnerUsageResponses[keyof ReportPartnerUsageResponses]; export type UpdateSubscriptionCacheData = { - body: { - /** - * Firebase UID of the user whose cache should be updated. - */ - user_id: string - /** - * Whether the user currently has an active personal subscription. - * When false, any cached entry is cleared. - * - */ - is_active: boolean - /** - * Subscription tier (e.g. `PRO`, `CREATOR`). Required when - * `is_active=true`; ignored otherwise. Unknown values are treated as a - * no-op rather than cached, so a schema drift between services cannot - * poison the cache. - * - */ - tier?: string - } - path?: never - query?: never - url: '/admin/api/update-subscription-cache' -} + body: { + /** + * Firebase UID of the user whose cache should be updated. + */ + user_id: string; + /** + * Whether the user currently has an active personal subscription. + * When false, any cached entry is cleared. + * + */ + is_active: boolean; + /** + * Subscription tier (e.g. `PRO`, `CREATOR`). Required when + * `is_active=true`; ignored otherwise. Unknown values are treated as a + * no-op rather than cached, so a schema drift between services cannot + * poison the cache. + * + */ + tier?: string; + }; + path?: never; + query?: never; + url: '/admin/api/update-subscription-cache'; +}; export type UpdateSubscriptionCacheErrors = { - /** - * Missing or invalid request body - */ - 400: ErrorResponse - /** - * Cache write failed (Redis unavailable, DEL/SET error, marshal error). - * Caller should retry — state on the ingest side is unchanged. - * - */ - 500: ErrorResponse -} + /** + * Missing or invalid request body + */ + 400: ErrorResponse; + /** + * Cache write failed (Redis unavailable, DEL/SET error, marshal error). + * Caller should retry — state on the ingest side is unchanged. + * + */ + 500: ErrorResponse; +}; -export type UpdateSubscriptionCacheError = - UpdateSubscriptionCacheErrors[keyof UpdateSubscriptionCacheErrors] +export type UpdateSubscriptionCacheError = UpdateSubscriptionCacheErrors[keyof UpdateSubscriptionCacheErrors]; export type UpdateSubscriptionCacheResponses = { - /** - * Cache updated successfully - */ - 200: { /** - * One of `updated` (cache entry written), `cleared` (cache entry - * removed), or `skipped` (defensive no-op for missing / unknown tier). - * + * Cache updated successfully */ - status?: string - } -} + 200: { + /** + * One of `updated` (cache entry written), `cleared` (cache entry + * removed), or `skipped` (defensive no-op for missing / unknown tier). + * + */ + status?: string; + }; +}; -export type UpdateSubscriptionCacheResponse = - UpdateSubscriptionCacheResponses[keyof UpdateSubscriptionCacheResponses] +export type UpdateSubscriptionCacheResponse = UpdateSubscriptionCacheResponses[keyof UpdateSubscriptionCacheResponses]; export type SyncApiKeyData = { - body: SyncApiKeyRequest - path?: never - query?: never - url: '/admin/api/keys/sync' -} + body: SyncApiKeyRequest; + path?: never; + query?: never; + url: '/admin/api/keys/sync'; +}; export type SyncApiKeyErrors = { - /** - * Malformed request or unsupported event - */ - 400: ErrorResponse - /** - * Missing or invalid admin secret - */ - 401: ErrorResponse - /** - * Internal error - */ - 500: ErrorResponse -} + /** + * Malformed request or unsupported event + */ + 400: ErrorResponse; + /** + * Missing or invalid admin secret + */ + 401: ErrorResponse; + /** + * Internal error + */ + 500: ErrorResponse; +}; -export type SyncApiKeyError = SyncApiKeyErrors[keyof SyncApiKeyErrors] +export type SyncApiKeyError = SyncApiKeyErrors[keyof SyncApiKeyErrors]; export type SyncApiKeyResponses = { - /** - * Sync processed — see `result` field - */ - 200: SyncApiKeyResponse -} + /** + * Sync processed — see `result` field + */ + 200: SyncApiKeyResponse; +}; -export type SyncApiKeyResponse2 = SyncApiKeyResponses[keyof SyncApiKeyResponses] +export type SyncApiKeyResponse2 = SyncApiKeyResponses[keyof SyncApiKeyResponses]; export type GetJobStatusData = { - body?: never - path: { - /** - * The unique ID of the job - */ - job_id: string - } - query?: never - url: '/api/job/{job_id}/status' -} + body?: never; + path: { + /** + * The unique ID of the job + */ + job_id: string; + }; + query?: never; + url: '/api/job/{job_id}/status'; +}; export type GetJobStatusErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - job belongs to another user - */ - 403: ErrorResponse - /** - * Job not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden - job belongs to another user + */ + 403: ErrorResponse; + /** + * Job not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetJobStatusError = GetJobStatusErrors[keyof GetJobStatusErrors] +export type GetJobStatusError = GetJobStatusErrors[keyof GetJobStatusErrors]; export type GetJobStatusResponses = { - /** - * Success - Job status returned - */ - 200: JobStatusResponse -} + /** + * Success - Job status returned + */ + 200: JobStatusResponse; +}; -export type GetJobStatusResponse = - GetJobStatusResponses[keyof GetJobStatusResponses] +export type GetJobStatusResponse = GetJobStatusResponses[keyof GetJobStatusResponses]; export type ListTasksData = { - body?: never - path?: never - query?: { - /** - * Filter by task type name (exact match) - */ - task_name?: string - /** - * Filter by idempotency key (exact match). For best performance, specify task_name as well. - */ - idempotency_key?: string - /** - * Filter by one or more statuses (comma-separated) - */ - status?: string - /** - * Filter tasks created after this timestamp (RFC3339 format) - */ - created_after?: string - /** - * Filter tasks created before this timestamp (RFC3339 format) - */ - created_before?: string - /** - * Sort direction (asc = ascending, desc = descending by create_time) - */ - sort_order?: 'asc' | 'desc' - /** - * Pagination offset (0-based) - */ - offset?: number - /** - * Maximum items per page (1-100) - */ - limit?: number - } - url: '/api/tasks' -} + body?: never; + path?: never; + query?: { + /** + * Filter by task type name (exact match) + */ + task_name?: string; + /** + * Filter by idempotency key (exact match). For best performance, specify task_name as well. + */ + idempotency_key?: string; + /** + * Filter by one or more statuses (comma-separated) + */ + status?: string; + /** + * Filter tasks created after this timestamp (RFC3339 format) + */ + created_after?: string; + /** + * Filter tasks created before this timestamp (RFC3339 format) + */ + created_before?: string; + /** + * Sort direction (asc = ascending, desc = descending by create_time) + */ + sort_order?: 'asc' | 'desc'; + /** + * Pagination offset (0-based) + */ + offset?: number; + /** + * Maximum items per page (1-100) + */ + limit?: number; + }; + url: '/api/tasks'; +}; export type ListTasksErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Validation error - Invalid filter values - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Validation error - Invalid filter values + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListTasksError = ListTasksErrors[keyof ListTasksErrors] +export type ListTasksError = ListTasksErrors[keyof ListTasksErrors]; export type ListTasksResponses = { - /** - * Success - Tasks retrieved - */ - 200: TasksListResponse -} + /** + * Success - Tasks retrieved + */ + 200: TasksListResponse; +}; -export type ListTasksResponse = ListTasksResponses[keyof ListTasksResponses] +export type ListTasksResponse = ListTasksResponses[keyof ListTasksResponses]; export type GetTaskData = { - body?: never - path: { - /** - * Task identifier (UUID) - */ - task_id: string - } - query?: never - url: '/api/tasks/{task_id}' -} + body?: never; + path: { + /** + * Task identifier (UUID) + */ + task_id: string; + }; + query?: never; + url: '/api/tasks/{task_id}'; +}; export type GetTaskErrors = { - /** - * Unauthorized - Authentication required - */ - 401: ErrorResponse - /** - * Task not found (also returned for ownership failures to avoid leaking task existence) - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized - Authentication required + */ + 401: ErrorResponse; + /** + * Task not found (also returned for ownership failures to avoid leaking task existence) + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetTaskError = GetTaskErrors[keyof GetTaskErrors] +export type GetTaskError = GetTaskErrors[keyof GetTaskErrors]; export type GetTaskResponses = { - /** - * Success - Task details retrieved - */ - 200: TaskResponse -} + /** + * Success - Task details retrieved + */ + 200: TaskResponse; +}; -export type GetTaskResponse = GetTaskResponses[keyof GetTaskResponses] +export type GetTaskResponse = GetTaskResponses[keyof GetTaskResponses]; export type GetBillingStatusData = { - body?: never - path?: never - query?: never - url: '/api/billing/status' -} + body?: never; + path?: never; + query?: never; + url: '/api/billing/status'; +}; export type GetBillingStatusErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workspace not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workspace not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetBillingStatusError = - GetBillingStatusErrors[keyof GetBillingStatusErrors] +export type GetBillingStatusError = GetBillingStatusErrors[keyof GetBillingStatusErrors]; export type GetBillingStatusResponses = { - /** - * Billing status - */ - 200: BillingStatusResponse -} + /** + * Billing status + */ + 200: BillingStatusResponse; +}; -export type GetBillingStatusResponse = - GetBillingStatusResponses[keyof GetBillingStatusResponses] +export type GetBillingStatusResponse = GetBillingStatusResponses[keyof GetBillingStatusResponses]; export type GetBillingBalanceData = { - body?: never - path?: never - query?: never - url: '/api/billing/balance' -} + body?: never; + path?: never; + query?: never; + url: '/api/billing/balance'; +}; export type GetBillingBalanceErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetBillingBalanceError = - GetBillingBalanceErrors[keyof GetBillingBalanceErrors] +export type GetBillingBalanceError = GetBillingBalanceErrors[keyof GetBillingBalanceErrors]; export type GetBillingBalanceResponses = { - /** - * Credit balance - */ - 200: BillingBalanceResponse -} + /** + * Credit balance + */ + 200: BillingBalanceResponse; +}; -export type GetBillingBalanceResponse = - GetBillingBalanceResponses[keyof GetBillingBalanceResponses] +export type GetBillingBalanceResponse = GetBillingBalanceResponses[keyof GetBillingBalanceResponses]; export type GetBillingEventsData = { - body?: never - path?: never - query?: { - /** - * Page number (1-indexed) - */ - page?: number - /** - * Number of events per page - */ - limit?: number - } - url: '/api/billing/events' -} + body?: never; + path?: never; + query?: { + /** + * Page number (1-indexed) + */ + page?: number; + /** + * Number of events per page + */ + limit?: number; + }; + url: '/api/billing/events'; +}; export type GetBillingEventsErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetBillingEventsError = - GetBillingEventsErrors[keyof GetBillingEventsErrors] +export type GetBillingEventsError = GetBillingEventsErrors[keyof GetBillingEventsErrors]; export type GetBillingEventsResponses = { - /** - * Paginated billing events - */ - 200: BillingEventsResponse -} + /** + * Paginated billing events + */ + 200: BillingEventsResponse; +}; -export type GetBillingEventsResponse = - GetBillingEventsResponses[keyof GetBillingEventsResponses] +export type GetBillingEventsResponse = GetBillingEventsResponses[keyof GetBillingEventsResponses]; export type GetBillingPlansData = { - body?: never - path?: never - query?: never - url: '/api/billing/plans' -} + body?: never; + path?: never; + query?: never; + url: '/api/billing/plans'; +}; export type GetBillingPlansErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetBillingPlansError = - GetBillingPlansErrors[keyof GetBillingPlansErrors] +export type GetBillingPlansError = GetBillingPlansErrors[keyof GetBillingPlansErrors]; export type GetBillingPlansResponses = { - /** - * Available plans with pricing - */ - 200: BillingPlansResponse -} + /** + * Available plans with pricing + */ + 200: BillingPlansResponse; +}; -export type GetBillingPlansResponse = - GetBillingPlansResponses[keyof GetBillingPlansResponses] +export type GetBillingPlansResponse = GetBillingPlansResponses[keyof GetBillingPlansResponses]; export type PreviewSubscribeData = { - body: PreviewSubscribeRequest - path?: never - query?: never - url: '/api/billing/preview-subscribe' -} + body: PreviewSubscribeRequest; + path?: never; + query?: never; + url: '/api/billing/preview-subscribe'; +}; export type PreviewSubscribeErrors = { - /** - * Invalid request (e.g., invalid plan slug, seats below minimum) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (e.g., invalid plan slug, seats below minimum) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type PreviewSubscribeError = - PreviewSubscribeErrors[keyof PreviewSubscribeErrors] +export type PreviewSubscribeError = PreviewSubscribeErrors[keyof PreviewSubscribeErrors]; export type PreviewSubscribeResponses = { - /** - * Subscription preview - */ - 200: PreviewSubscribeResponse -} + /** + * Subscription preview + */ + 200: PreviewSubscribeResponse; +}; -export type PreviewSubscribeResponse2 = - PreviewSubscribeResponses[keyof PreviewSubscribeResponses] +export type PreviewSubscribeResponse2 = PreviewSubscribeResponses[keyof PreviewSubscribeResponses]; export type SubscribeData = { - body: SubscribeRequest - path?: never - query?: never - url: '/api/billing/subscribe' -} + body: SubscribeRequest; + path?: never; + query?: never; + url: '/api/billing/subscribe'; +}; export type SubscribeErrors = { - /** - * Invalid request (e.g., invalid plan slug, incompatible plan) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (e.g., invalid plan slug, incompatible plan) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type SubscribeError = SubscribeErrors[keyof SubscribeErrors] +export type SubscribeError = SubscribeErrors[keyof SubscribeErrors]; export type SubscribeResponses = { - /** - * Subscription created or payment method needed - */ - 200: SubscribeResponse -} + /** + * Subscription created or payment method needed + */ + 200: SubscribeResponse; +}; -export type SubscribeResponse2 = SubscribeResponses[keyof SubscribeResponses] +export type SubscribeResponse2 = SubscribeResponses[keyof SubscribeResponses]; export type CancelSubscriptionData = { - body: CancelSubscriptionRequest - path?: never - query?: never - url: '/api/billing/subscription/cancel' -} + body: CancelSubscriptionRequest; + path?: never; + query?: never; + url: '/api/billing/subscription/cancel'; +}; export type CancelSubscriptionErrors = { - /** - * Invalid request (e.g., no active subscription) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (e.g., no active subscription) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CancelSubscriptionError = - CancelSubscriptionErrors[keyof CancelSubscriptionErrors] +export type CancelSubscriptionError = CancelSubscriptionErrors[keyof CancelSubscriptionErrors]; export type CancelSubscriptionResponses = { - /** - * Subscription cancellation scheduled - */ - 200: CancelSubscriptionResponse -} + /** + * Subscription cancellation scheduled + */ + 200: CancelSubscriptionResponse; +}; -export type CancelSubscriptionResponse2 = - CancelSubscriptionResponses[keyof CancelSubscriptionResponses] +export type CancelSubscriptionResponse2 = CancelSubscriptionResponses[keyof CancelSubscriptionResponses]; export type ResubscribeData = { - body: ResubscribeRequest - path?: never - query?: never - url: '/api/billing/subscription/resubscribe' -} + body: ResubscribeRequest; + path?: never; + query?: never; + url: '/api/billing/subscription/resubscribe'; +}; export type ResubscribeErrors = { - /** - * Invalid request (e.g., no active subscription, not in cancellation grace period) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Invalid request (e.g., no active subscription, not in cancellation grace period) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ResubscribeError = ResubscribeErrors[keyof ResubscribeErrors] +export type ResubscribeError = ResubscribeErrors[keyof ResubscribeErrors]; export type ResubscribeResponses = { - /** - * Subscription resumed successfully - */ - 200: ResubscribeResponse -} + /** + * Subscription resumed successfully + */ + 200: ResubscribeResponse; +}; -export type ResubscribeResponse2 = - ResubscribeResponses[keyof ResubscribeResponses] +export type ResubscribeResponse2 = ResubscribeResponses[keyof ResubscribeResponses]; export type GetPaymentPortalData = { - body?: PaymentPortalRequest - path?: never - query?: never - url: '/api/billing/payment-portal' -} + body?: PaymentPortalRequest; + path?: never; + query?: never; + url: '/api/billing/payment-portal'; +}; export type GetPaymentPortalErrors = { - /** - * Bad request (e.g., missing return_url) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (e.g., missing return_url) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetPaymentPortalError = - GetPaymentPortalErrors[keyof GetPaymentPortalErrors] +export type GetPaymentPortalError = GetPaymentPortalErrors[keyof GetPaymentPortalErrors]; export type GetPaymentPortalResponses = { - /** - * Success - */ - 200: PaymentPortalResponse -} + /** + * Success + */ + 200: PaymentPortalResponse; +}; -export type GetPaymentPortalResponse = - GetPaymentPortalResponses[keyof GetPaymentPortalResponses] +export type GetPaymentPortalResponse = GetPaymentPortalResponses[keyof GetPaymentPortalResponses]; export type CreateTopupData = { - body: CreateTopupRequest - path?: never - query?: never - url: '/api/billing/topup' -} + body: CreateTopupRequest; + path?: never; + query?: never; + url: '/api/billing/topup'; +}; export type CreateTopupErrors = { - /** - * Bad request (invalid amount, no payment method) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (invalid amount, no payment method) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateTopupError = CreateTopupErrors[keyof CreateTopupErrors] +export type CreateTopupError = CreateTopupErrors[keyof CreateTopupErrors]; export type CreateTopupResponses = { - /** - * Top-up initiated successfully - */ - 200: CreateTopupResponse -} + /** + * Top-up initiated successfully + */ + 200: CreateTopupResponse; +}; -export type CreateTopupResponse2 = - CreateTopupResponses[keyof CreateTopupResponses] +export type CreateTopupResponse2 = CreateTopupResponses[keyof CreateTopupResponses]; export type GetBillingOpStatusData = { - body?: never - path: { - /** - * The billing operation ID - */ - id: string - } - query?: never - url: '/api/billing/ops/{id}' -} + body?: never; + path: { + /** + * The billing operation ID + */ + id: string; + }; + query?: never; + url: '/api/billing/ops/{id}'; +}; export type GetBillingOpStatusErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Billing operation not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Billing operation not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetBillingOpStatusError = - GetBillingOpStatusErrors[keyof GetBillingOpStatusErrors] +export type GetBillingOpStatusError = GetBillingOpStatusErrors[keyof GetBillingOpStatusErrors]; export type GetBillingOpStatusResponses = { - /** - * Billing operation status - */ - 200: BillingOpStatusResponse -} + /** + * Billing operation status + */ + 200: BillingOpStatusResponse; +}; -export type GetBillingOpStatusResponse = - GetBillingOpStatusResponses[keyof GetBillingOpStatusResponses] +export type GetBillingOpStatusResponse = GetBillingOpStatusResponses[keyof GetBillingOpStatusResponses]; export type ListWorkflowsData = { - body?: never - path?: never - query?: { - limit?: number - offset?: number - /** - * Search workflows by name (case-insensitive substring match) - */ - name?: string - /** - * Filter by default view type - */ - default_view?: 'workflow' | 'app' - /** - * Sort field - */ - sort?: 'create_time' | 'update_time' | 'name' - /** - * Sort order - */ - order?: 'asc' | 'desc' - } - url: '/api/workflows' -} + body?: never; + path?: never; + query?: { + limit?: number; + offset?: number; + /** + * Search workflows by name (case-insensitive substring match) + */ + name?: string; + /** + * Filter by default view type + */ + default_view?: 'workflow' | 'app'; + /** + * Sort field + */ + sort?: 'create_time' | 'update_time' | 'name'; + /** + * Sort order + */ + order?: 'asc' | 'desc'; + }; + url: '/api/workflows'; +}; export type ListWorkflowsErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListWorkflowsError = ListWorkflowsErrors[keyof ListWorkflowsErrors] +export type ListWorkflowsError = ListWorkflowsErrors[keyof ListWorkflowsErrors]; export type ListWorkflowsResponses = { - /** - * Success - */ - 200: WorkflowListResponse -} + /** + * Success + */ + 200: WorkflowListResponse; +}; -export type ListWorkflowsResponse = - ListWorkflowsResponses[keyof ListWorkflowsResponses] +export type ListWorkflowsResponse = ListWorkflowsResponses[keyof ListWorkflowsResponses]; export type CreateWorkflowData = { - body: CreateWorkflowRequest - path?: never - query?: never - url: '/api/workflows' -} + body: CreateWorkflowRequest; + path?: never; + query?: never; + url: '/api/workflows'; +}; export type CreateWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateWorkflowError = - CreateWorkflowErrors[keyof CreateWorkflowErrors] +export type CreateWorkflowError = CreateWorkflowErrors[keyof CreateWorkflowErrors]; export type CreateWorkflowResponses = { - /** - * Workflow created successfully - */ - 201: WorkflowResponse -} + /** + * Workflow created successfully + */ + 201: WorkflowResponse; +}; -export type CreateWorkflowResponse = - CreateWorkflowResponses[keyof CreateWorkflowResponses] +export type CreateWorkflowResponse = CreateWorkflowResponses[keyof CreateWorkflowResponses]; export type DeleteWorkflowData = { - body?: never - path: { - /** - * The UUID of the workflow to delete. - */ - workflow_id: string - } - query?: never - url: '/api/workflows/{workflow_id}' -} + body?: never; + path: { + /** + * The UUID of the workflow to delete. + */ + workflow_id: string; + }; + query?: never; + url: '/api/workflows/{workflow_id}'; +}; export type DeleteWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type DeleteWorkflowError = - DeleteWorkflowErrors[keyof DeleteWorkflowErrors] +export type DeleteWorkflowError = DeleteWorkflowErrors[keyof DeleteWorkflowErrors]; export type DeleteWorkflowResponses = { - /** - * Workflow deleted successfully - */ - 204: void -} + /** + * Workflow deleted successfully + */ + 204: void; +}; -export type DeleteWorkflowResponse = - DeleteWorkflowResponses[keyof DeleteWorkflowResponses] +export type DeleteWorkflowResponse = DeleteWorkflowResponses[keyof DeleteWorkflowResponses]; export type GetWorkflowData = { - body?: never - path: { - /** - * The UUID of the workflow. - */ - workflow_id: string - } - query?: never - url: '/api/workflows/{workflow_id}' -} + body?: never; + path: { + /** + * The UUID of the workflow. + */ + workflow_id: string; + }; + query?: never; + url: '/api/workflows/{workflow_id}'; +}; export type GetWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - */ - 403: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden + */ + 403: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetWorkflowError = GetWorkflowErrors[keyof GetWorkflowErrors] +export type GetWorkflowError = GetWorkflowErrors[keyof GetWorkflowErrors]; export type GetWorkflowResponses = { - /** - * Success - */ - 200: WorkflowResponse -} + /** + * Success + */ + 200: WorkflowResponse; +}; -export type GetWorkflowResponse = - GetWorkflowResponses[keyof GetWorkflowResponses] +export type GetWorkflowResponse = GetWorkflowResponses[keyof GetWorkflowResponses]; export type UpdateWorkflowData = { - body: UpdateWorkflowRequest - path: { - /** - * The UUID of the workflow to update. - */ - workflow_id: string - } - query?: never - url: '/api/workflows/{workflow_id}' -} + body: UpdateWorkflowRequest; + path: { + /** + * The UUID of the workflow to update. + */ + workflow_id: string; + }; + query?: never; + url: '/api/workflows/{workflow_id}'; +}; export type UpdateWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UpdateWorkflowError = - UpdateWorkflowErrors[keyof UpdateWorkflowErrors] +export type UpdateWorkflowError = UpdateWorkflowErrors[keyof UpdateWorkflowErrors]; export type UpdateWorkflowResponses = { - /** - * Success - */ - 200: WorkflowResponse -} + /** + * Success + */ + 200: WorkflowResponse; +}; -export type UpdateWorkflowResponse = - UpdateWorkflowResponses[keyof UpdateWorkflowResponses] +export type UpdateWorkflowResponse = UpdateWorkflowResponses[keyof UpdateWorkflowResponses]; export type CreateWorkflowVersionData = { - body: CreateWorkflowVersionRequest - path: { - /** - * The UUID of the workflow to create a new version for. - */ - workflow_id: string - } - query?: never - url: '/api/workflows/{workflow_id}/versions' -} + body: CreateWorkflowVersionRequest; + path: { + /** + * The UUID of the workflow to create a new version for. + */ + workflow_id: string; + }; + query?: never; + url: '/api/workflows/{workflow_id}/versions'; +}; export type CreateWorkflowVersionErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - not the workflow owner - */ - 403: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Version conflict - base_version does not match latest - */ - 409: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden - not the workflow owner + */ + 403: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Version conflict - base_version does not match latest + */ + 409: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateWorkflowVersionError = - CreateWorkflowVersionErrors[keyof CreateWorkflowVersionErrors] +export type CreateWorkflowVersionError = CreateWorkflowVersionErrors[keyof CreateWorkflowVersionErrors]; export type CreateWorkflowVersionResponses = { - /** - * Version created successfully - */ - 201: WorkflowVersionResponse -} + /** + * Version created successfully + */ + 201: WorkflowVersionResponse; +}; -export type CreateWorkflowVersionResponse = - CreateWorkflowVersionResponses[keyof CreateWorkflowVersionResponses] +export type CreateWorkflowVersionResponse = CreateWorkflowVersionResponses[keyof CreateWorkflowVersionResponses]; export type GetWorkflowContentData = { - body?: never - path: { - /** - * The UUID of the workflow whose content should be retrieved. - */ - workflow_id: string - } - query?: never - url: '/api/workflows/{workflow_id}/content' -} + body?: never; + path: { + /** + * The UUID of the workflow whose content should be retrieved. + */ + workflow_id: string; + }; + query?: never; + url: '/api/workflows/{workflow_id}/content'; +}; export type GetWorkflowContentErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - */ - 403: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden + */ + 403: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetWorkflowContentError = - GetWorkflowContentErrors[keyof GetWorkflowContentErrors] +export type GetWorkflowContentError = GetWorkflowContentErrors[keyof GetWorkflowContentErrors]; export type GetWorkflowContentResponses = { - /** - * Success - */ - 200: WorkflowVersionContentResponse -} + /** + * Success + */ + 200: WorkflowVersionContentResponse; +}; -export type GetWorkflowContentResponse = - GetWorkflowContentResponses[keyof GetWorkflowContentResponses] +export type GetWorkflowContentResponse = GetWorkflowContentResponses[keyof GetWorkflowContentResponses]; export type ForkWorkflowData = { - body: ForkWorkflowRequest - path: { - /** - * The UUID of the source workflow to fork from. - */ - workflow_id: string - } - query?: never - url: '/api/workflows/{workflow_id}/fork' -} + body: ForkWorkflowRequest; + path: { + /** + * The UUID of the source workflow to fork from. + */ + workflow_id: string; + }; + query?: never; + url: '/api/workflows/{workflow_id}/fork'; +}; export type ForkWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Forbidden - */ - 403: ErrorResponse - /** - * Source workflow or version not found - */ - 404: ErrorResponse - /** - * Validation error - */ - 422: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Forbidden + */ + 403: ErrorResponse; + /** + * Source workflow or version not found + */ + 404: ErrorResponse; + /** + * Validation error + */ + 422: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ForkWorkflowError = ForkWorkflowErrors[keyof ForkWorkflowErrors] +export type ForkWorkflowError = ForkWorkflowErrors[keyof ForkWorkflowErrors]; export type ForkWorkflowResponses = { - /** - * Workflow forked successfully - */ - 201: WorkflowResponse -} + /** + * Workflow forked successfully + */ + 201: WorkflowResponse; +}; -export type ForkWorkflowResponse = - ForkWorkflowResponses[keyof ForkWorkflowResponses] +export type ForkWorkflowResponse = ForkWorkflowResponses[keyof ForkWorkflowResponses]; export type CreateHubProfileData = { - body: CreateHubProfileRequest - path?: never - query?: never - url: '/api/hub/profiles' -} + body: CreateHubProfileRequest; + path?: never; + query?: never; + url: '/api/hub/profiles'; +}; export type CreateHubProfileErrors = { - /** - * Bad request (e.g. invalid username) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not found - */ - 404: ErrorResponse - /** - * Username already taken or profile already exists - */ - 409: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (e.g. invalid username) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not found + */ + 404: ErrorResponse; + /** + * Username already taken or profile already exists + */ + 409: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateHubProfileError = - CreateHubProfileErrors[keyof CreateHubProfileErrors] +export type CreateHubProfileError = CreateHubProfileErrors[keyof CreateHubProfileErrors]; export type CreateHubProfileResponses = { - /** - * Hub profile created - */ - 201: HubProfile -} + /** + * Hub profile created + */ + 201: HubProfile; +}; -export type CreateHubProfileResponse = - CreateHubProfileResponses[keyof CreateHubProfileResponses] +export type CreateHubProfileResponse = CreateHubProfileResponses[keyof CreateHubProfileResponses]; export type GetMyHubProfileData = { - body?: never - path?: never - query?: never - url: '/api/hub/profiles/me' -} + body?: never; + path?: never; + query?: never; + url: '/api/hub/profiles/me'; +}; export type GetMyHubProfileErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * No hub profile exists - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * No hub profile exists + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetMyHubProfileError = - GetMyHubProfileErrors[keyof GetMyHubProfileErrors] +export type GetMyHubProfileError = GetMyHubProfileErrors[keyof GetMyHubProfileErrors]; export type GetMyHubProfileResponses = { - /** - * Hub profile - */ - 200: HubProfile -} + /** + * Hub profile + */ + 200: HubProfile; +}; -export type GetMyHubProfileResponse = - GetMyHubProfileResponses[keyof GetMyHubProfileResponses] +export type GetMyHubProfileResponse = GetMyHubProfileResponses[keyof GetMyHubProfileResponses]; export type CheckHubUsernameData = { - body?: never - path?: never - query: { - username: string - } - url: '/api/hub/profiles/check' -} + body?: never; + path?: never; + query: { + username: string; + }; + url: '/api/hub/profiles/check'; +}; export type CheckHubUsernameErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CheckHubUsernameError = - CheckHubUsernameErrors[keyof CheckHubUsernameErrors] +export type CheckHubUsernameError = CheckHubUsernameErrors[keyof CheckHubUsernameErrors]; export type CheckHubUsernameResponses = { - /** - * Username availability result - */ - 200: HubUsernameCheckResponse -} + /** + * Username availability result + */ + 200: HubUsernameCheckResponse; +}; -export type CheckHubUsernameResponse = - CheckHubUsernameResponses[keyof CheckHubUsernameResponses] +export type CheckHubUsernameResponse = CheckHubUsernameResponses[keyof CheckHubUsernameResponses]; export type GetHubProfileByUsernameData = { - body?: never - path: { - /** - * The hub profile username. - */ - username: string - } - query?: never - url: '/api/hub/profiles/{username}' -} + body?: never; + path: { + /** + * The hub profile username. + */ + username: string; + }; + query?: never; + url: '/api/hub/profiles/{username}'; +}; export type GetHubProfileByUsernameErrors = { - /** - * Profile not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Profile not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetHubProfileByUsernameError = - GetHubProfileByUsernameErrors[keyof GetHubProfileByUsernameErrors] +export type GetHubProfileByUsernameError = GetHubProfileByUsernameErrors[keyof GetHubProfileByUsernameErrors]; export type GetHubProfileByUsernameResponses = { - /** - * Hub profile - */ - 200: HubProfile -} + /** + * Hub profile + */ + 200: HubProfile; +}; -export type GetHubProfileByUsernameResponse = - GetHubProfileByUsernameResponses[keyof GetHubProfileByUsernameResponses] +export type GetHubProfileByUsernameResponse = GetHubProfileByUsernameResponses[keyof GetHubProfileByUsernameResponses]; export type UpdateHubProfileData = { - body: UpdateHubProfileRequest - path: { - /** - * The hub profile username to update. - */ - username: string - } - query?: never - url: '/api/hub/profiles/{username}' -} + body: UpdateHubProfileRequest; + path: { + /** + * The hub profile username to update. + */ + username: string; + }; + query?: never; + url: '/api/hub/profiles/{username}'; +}; export type UpdateHubProfileErrors = { - /** - * Bad request (e.g. missing body, invalid avatar token) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * No hub profile exists with this username - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (e.g. missing body, invalid avatar token) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * No hub profile exists with this username + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type UpdateHubProfileError = - UpdateHubProfileErrors[keyof UpdateHubProfileErrors] +export type UpdateHubProfileError = UpdateHubProfileErrors[keyof UpdateHubProfileErrors]; export type UpdateHubProfileResponses = { - /** - * Hub profile updated - */ - 200: HubProfile -} + /** + * Hub profile updated + */ + 200: HubProfile; +}; -export type UpdateHubProfileResponse = - UpdateHubProfileResponses[keyof UpdateHubProfileResponses] +export type UpdateHubProfileResponse = UpdateHubProfileResponses[keyof UpdateHubProfileResponses]; export type CreateHubAssetUploadUrlData = { - body: HubAssetUploadUrlRequest - path?: never - query?: never - url: '/api/hub/assets/upload-url' -} + body: HubAssetUploadUrlRequest; + path?: never; + query?: never; + url: '/api/hub/assets/upload-url'; +}; export type CreateHubAssetUploadUrlErrors = { - /** - * Bad request (e.g. unsupported content type) - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (e.g. unsupported content type) + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type CreateHubAssetUploadUrlError = - CreateHubAssetUploadUrlErrors[keyof CreateHubAssetUploadUrlErrors] +export type CreateHubAssetUploadUrlError = CreateHubAssetUploadUrlErrors[keyof CreateHubAssetUploadUrlErrors]; export type CreateHubAssetUploadUrlResponses = { - /** - * Presigned upload URL and token - */ - 200: HubAssetUploadUrlResponse -} + /** + * Presigned upload URL and token + */ + 200: HubAssetUploadUrlResponse; +}; -export type CreateHubAssetUploadUrlResponse = - CreateHubAssetUploadUrlResponses[keyof CreateHubAssetUploadUrlResponses] +export type CreateHubAssetUploadUrlResponse = CreateHubAssetUploadUrlResponses[keyof CreateHubAssetUploadUrlResponses]; export type ListHubLabelsData = { - body?: never - path?: never - query?: { - /** - * Filter by label type. Omit to return all labels. - */ - type?: 'tag' | 'model' | 'custom_node' - } - url: '/api/hub/labels' -} + body?: never; + path?: never; + query?: { + /** + * Filter by label type. Omit to return all labels. + */ + type?: 'tag' | 'model' | 'custom_node'; + }; + url: '/api/hub/labels'; +}; export type ListHubLabelsErrors = { - /** - * Bad request (e.g. invalid type parameter) - */ - 400: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (e.g. invalid type parameter) + */ + 400: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListHubLabelsError = ListHubLabelsErrors[keyof ListHubLabelsErrors] +export type ListHubLabelsError = ListHubLabelsErrors[keyof ListHubLabelsErrors]; export type ListHubLabelsResponses = { - /** - * List of labels - */ - 200: HubLabelListResponse -} + /** + * List of labels + */ + 200: HubLabelListResponse; +}; -export type ListHubLabelsResponse = - ListHubLabelsResponses[keyof ListHubLabelsResponses] +export type ListHubLabelsResponse = ListHubLabelsResponses[keyof ListHubLabelsResponses]; export type ListHubWorkflowsData = { - body?: never - path?: never - query?: { - cursor?: string - limit?: number - /** - * Search by workflow name - */ - search?: string - /** - * Filter by tag - */ - tag?: string - /** - * Filter by profile username - */ - username?: string - /** - * When true, returns full HubWorkflowDetail objects in the workflows array instead of summaries. Requires limit <= 20. - */ - detail?: boolean - /** - * Filter by status (e.g. ?status=pending,approved). Defaults to approved if omitted. - */ - status?: Array - } - url: '/api/hub/workflows' -} + body?: never; + path?: never; + query?: { + cursor?: string; + limit?: number; + /** + * Search by workflow name + */ + search?: string; + /** + * Filter by tag + */ + tag?: string; + /** + * Filter by profile username + */ + username?: string; + /** + * When true, returns full HubWorkflowDetail objects in the workflows array instead of summaries. Requires limit <= 20. + */ + detail?: boolean; + /** + * Filter by status (e.g. ?status=pending,approved). Defaults to approved if omitted. + */ + status?: Array; + }; + url: '/api/hub/workflows'; +}; export type ListHubWorkflowsErrors = { - /** - * Bad request (e.g. malformed pagination cursor) - */ - 400: ErrorResponse - /** - * Profile not found (when filtering by username) - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request (e.g. malformed pagination cursor) + */ + 400: ErrorResponse; + /** + * Profile not found (when filtering by username) + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListHubWorkflowsError = - ListHubWorkflowsErrors[keyof ListHubWorkflowsErrors] +export type ListHubWorkflowsError = ListHubWorkflowsErrors[keyof ListHubWorkflowsErrors]; export type ListHubWorkflowsResponses = { - /** - * Paginated list of hub workflows - */ - 200: HubWorkflowListResponse -} + /** + * Paginated list of hub workflows + */ + 200: HubWorkflowListResponse; +}; -export type ListHubWorkflowsResponse = - ListHubWorkflowsResponses[keyof ListHubWorkflowsResponses] +export type ListHubWorkflowsResponse = ListHubWorkflowsResponses[keyof ListHubWorkflowsResponses]; export type PublishHubWorkflowData = { - body: PublishHubWorkflowRequest - path?: never - query?: never - url: '/api/hub/workflows' -} + body: PublishHubWorkflowRequest; + path?: never; + query?: never; + url: '/api/hub/workflows'; +}; export type PublishHubWorkflowErrors = { - /** - * Bad request - */ - 400: ErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workflow or profile not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Bad request + */ + 400: ErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workflow or profile not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type PublishHubWorkflowError = - PublishHubWorkflowErrors[keyof PublishHubWorkflowErrors] +export type PublishHubWorkflowError = PublishHubWorkflowErrors[keyof PublishHubWorkflowErrors]; export type PublishHubWorkflowResponses = { - /** - * Workflow published to hub - */ - 200: HubWorkflowDetail -} + /** + * Workflow published to hub + */ + 200: HubWorkflowDetail; +}; -export type PublishHubWorkflowResponse = - PublishHubWorkflowResponses[keyof PublishHubWorkflowResponses] +export type PublishHubWorkflowResponse = PublishHubWorkflowResponses[keyof PublishHubWorkflowResponses]; export type ListHubWorkflowIndexData = { - body?: never - path?: never - query?: { - /** - * Filter by status (e.g. ?status=pending,approved). Defaults to approved if omitted. - */ - status?: Array - } - url: '/api/hub/workflows/index' -} + body?: never; + path?: never; + query?: { + /** + * Filter by status (e.g. ?status=pending,approved). Defaults to approved if omitted. + */ + status?: Array; + }; + url: '/api/hub/workflows/index'; +}; export type ListHubWorkflowIndexErrors = { - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type ListHubWorkflowIndexError = - ListHubWorkflowIndexErrors[keyof ListHubWorkflowIndexErrors] +export type ListHubWorkflowIndexError = ListHubWorkflowIndexErrors[keyof ListHubWorkflowIndexErrors]; export type ListHubWorkflowIndexResponses = { - /** - * List of hub workflow template entries - */ - 200: Array -} + /** + * List of hub workflow template entries + */ + 200: Array; +}; -export type ListHubWorkflowIndexResponse = - ListHubWorkflowIndexResponses[keyof ListHubWorkflowIndexResponses] +export type ListHubWorkflowIndexResponse = ListHubWorkflowIndexResponses[keyof ListHubWorkflowIndexResponses]; export type DeleteHubWorkflowData = { - body?: never - path: { - /** - * The share ID of the hub workflow to unpublish. - */ - share_id: string - } - query?: never - url: '/api/hub/workflows/{share_id}' -} + body?: never; + path: { + /** + * The share ID of the hub workflow to unpublish. + */ + share_id: string; + }; + query?: never; + url: '/api/hub/workflows/{share_id}'; +}; export type DeleteHubWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type DeleteHubWorkflowError = - DeleteHubWorkflowErrors[keyof DeleteHubWorkflowErrors] +export type DeleteHubWorkflowError = DeleteHubWorkflowErrors[keyof DeleteHubWorkflowErrors]; export type DeleteHubWorkflowResponses = { - /** - * Successfully unpublished - */ - 204: void -} + /** + * Successfully unpublished + */ + 204: void; +}; -export type DeleteHubWorkflowResponse = - DeleteHubWorkflowResponses[keyof DeleteHubWorkflowResponses] +export type DeleteHubWorkflowResponse = DeleteHubWorkflowResponses[keyof DeleteHubWorkflowResponses]; export type GetHubWorkflowData = { - body?: never - path: { - /** - * The share ID of the hub workflow. - */ - share_id: string - } - query?: never - url: '/api/hub/workflows/{share_id}' -} + body?: never; + path: { + /** + * The share ID of the hub workflow. + */ + share_id: string; + }; + query?: never; + url: '/api/hub/workflows/{share_id}'; +}; export type GetHubWorkflowErrors = { - /** - * Workflow not found - */ - 404: ErrorResponse - /** - * Workflow JSON too large - */ - 413: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Workflow not found + */ + 404: ErrorResponse; + /** + * Workflow JSON too large + */ + 413: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetHubWorkflowError = - GetHubWorkflowErrors[keyof GetHubWorkflowErrors] +export type GetHubWorkflowError = GetHubWorkflowErrors[keyof GetHubWorkflowErrors]; export type GetHubWorkflowResponses = { - /** - * Hub workflow detail - */ - 200: HubWorkflowDetail -} + /** + * Hub workflow detail + */ + 200: HubWorkflowDetail; +}; -export type GetHubWorkflowResponse = - GetHubWorkflowResponses[keyof GetHubWorkflowResponses] +export type GetHubWorkflowResponse = GetHubWorkflowResponses[keyof GetHubWorkflowResponses]; export type GetPublishedWorkflowData = { - body?: never - path: { - /** - * The share ID of the published workflow. - */ - share_id: string - } - query?: never - url: '/api/workflows/published/{share_id}' -} + body?: never; + path: { + /** + * The share ID of the published workflow. + */ + share_id: string; + }; + query?: never; + url: '/api/workflows/published/{share_id}'; +}; export type GetPublishedWorkflowErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse - /** - * Share not found - */ - 404: ErrorResponse - /** - * Workflow JSON too large - */ - 413: ErrorResponse - /** - * Internal server error - */ - 500: ErrorResponse -} + /** + * Unauthorized + */ + 401: ErrorResponse; + /** + * Share not found + */ + 404: ErrorResponse; + /** + * Workflow JSON too large + */ + 413: ErrorResponse; + /** + * Internal server error + */ + 500: ErrorResponse; +}; -export type GetPublishedWorkflowError = - GetPublishedWorkflowErrors[keyof GetPublishedWorkflowErrors] +export type GetPublishedWorkflowError = GetPublishedWorkflowErrors[keyof GetPublishedWorkflowErrors]; export type GetPublishedWorkflowResponses = { - /** - * Published workflow details with asset statuses - */ - 200: PublishedWorkflowDetail -} + /** + * Published workflow details with asset statuses + */ + 200: PublishedWorkflowDetail; +}; -export type GetPublishedWorkflowResponse = - GetPublishedWorkflowResponses[keyof GetPublishedWorkflowResponses] +export type GetPublishedWorkflowResponse = GetPublishedWorkflowResponses[keyof GetPublishedWorkflowResponses]; export type GetExtensionsData = { - body?: never - path?: never - query?: never - url: '/api/extensions' -} + body?: never; + path?: never; + query?: never; + url: '/api/extensions'; +}; export type GetExtensionsResponses = { - /** - * URL paths (relative to web root) of available extension JS files - */ - 200: Array -} + /** + * URL paths (relative to web root) of available extension JS files + */ + 200: Array; +}; -export type GetExtensionsResponse = - GetExtensionsResponses[keyof GetExtensionsResponses] +export type GetExtensionsResponse = GetExtensionsResponses[keyof GetExtensionsResponses]; export type GetNodeInfoSchemaData = { - body?: never - path?: never - query?: never - url: '/api/experiment/nodes' -} + body?: never; + path?: never; + query?: never; + url: '/api/experiment/nodes'; +}; export type GetNodeInfoSchemaResponses = { - /** - * Full node schema JSON - */ - 200: unknown -} + /** + * Full node schema JSON + */ + 200: unknown; +}; export type GetNodeByIdData = { - body?: never - path: { - /** - * Node class_type identifier - */ - id: string - } - query?: never - url: '/api/experiment/nodes/{id}' -} + body?: never; + path: { + /** + * Node class_type identifier + */ + id: string; + }; + query?: never; + url: '/api/experiment/nodes/{id}'; +}; export type GetNodeByIdErrors = { - /** - * Node not found - */ - 404: unknown -} + /** + * Node not found + */ + 404: unknown; +}; export type GetNodeByIdResponses = { - /** - * Node definition JSON - */ - 200: unknown -} + /** + * Node definition JSON + */ + 200: unknown; +}; export type GetVhsViewVideoData = { - body?: never - path?: never - query: { - /** - * Name of the video file to view - */ - filename: string - /** - * Type of file (e.g., output, input, temp) - */ - type?: string - /** - * Subfolder path where the file is located - */ - subfolder?: string - } - url: '/api/vhs/viewvideo' -} + body?: never; + path?: never; + query: { + /** + * Name of the video file to view + */ + filename: string; + /** + * Type of file (e.g., output, input, temp) + */ + type?: string; + /** + * Subfolder path where the file is located + */ + subfolder?: string; + }; + url: '/api/vhs/viewvideo'; +}; export type GetVhsViewVideoErrors = { - /** - * Unauthorized - */ - 401: unknown -} + /** + * Unauthorized + */ + 401: unknown; +}; export type GetVhsViewVideoResponses = { - /** - * Video stream - */ - 200: unknown -} + /** + * Video stream + */ + 200: unknown; +}; export type GetVhsViewAudioData = { - body?: never - path?: never - query: { - /** - * Name of the audio file to view - */ - filename: string - /** - * Type of file (e.g., output, input, temp) - */ - type?: string - /** - * Subfolder path where the file is located - */ - subfolder?: string - } - url: '/api/vhs/viewaudio' -} + body?: never; + path?: never; + query: { + /** + * Name of the audio file to view + */ + filename: string; + /** + * Type of file (e.g., output, input, temp) + */ + type?: string; + /** + * Subfolder path where the file is located + */ + subfolder?: string; + }; + url: '/api/vhs/viewaudio'; +}; export type GetVhsViewAudioErrors = { - /** - * Unauthorized - */ - 401: unknown -} + /** + * Unauthorized + */ + 401: unknown; +}; export type GetVhsViewAudioResponses = { - /** - * Audio stream - */ - 200: unknown -} + /** + * Audio stream + */ + 200: unknown; +}; export type GetVhsQueryVideoData = { - body?: never - path?: never - query: { - /** - * Name of the video file to query - */ - filename: string - } - url: '/api/vhs/queryvideo' -} + body?: never; + path?: never; + query: { + /** + * Name of the video file to query + */ + filename: string; + }; + url: '/api/vhs/queryvideo'; +}; export type GetVhsQueryVideoErrors = { - /** - * Missing required query parameter. Produced by the oapi-codegen - * wrapper via echo.NewHTTPError, so the body shape matches Echo's - * default HTTPError serialization rather than ErrorResponse. - * - */ - 400: BindingErrorResponse - /** - * Unauthorized - */ - 401: ErrorResponse -} - -export type GetVhsQueryVideoError = - GetVhsQueryVideoErrors[keyof GetVhsQueryVideoErrors] - -export type GetVhsQueryVideoResponses = { - /** - * Video metadata - */ - 200: { /** - * Source video metadata - */ - source: { - /** - * [width, height] in pixels - */ - size: [number, number] - /** - * Frames per second - */ - fps: number - /** - * Total frame count - */ - frames: number - /** - * Duration in seconds - */ - duration: number - } - } -} - -export type GetVhsQueryVideoResponse = - GetVhsQueryVideoResponses[keyof GetVhsQueryVideoResponses] - -export type GetUsersInfoData = { - body?: never - path?: never - query?: never - url: '/api/users' -} - -export type GetUsersInfoErrors = { - /** - * Unauthorized - */ - 401: ErrorResponse -} - -export type GetUsersInfoError = GetUsersInfoErrors[keyof GetUsersInfoErrors] - -export type GetUsersInfoResponses = { - /** - * Userdata storage information - */ - 200: { - /** - * Where user data is stored (always "server" in cloud) - */ - storage: string - /** - * Whether user data has been migrated (always true in cloud) - */ - migrated: boolean - } -} - -export type GetUsersInfoResponse = - GetUsersInfoResponses[keyof GetUsersInfoResponses] - -export type GetApiViewVideoAliasData = { - body?: never - path?: never - query: { - /** - * Name of the file to view (see `/api/view` for the full handler contract) - */ - filename: string - } - url: '/api/viewvideo' -} - -export type GetApiViewVideoAliasErrors = { - /** - * Unauthorized - */ - 401: unknown -} - -export type GetApiViewVideoAliasResponses = { - /** - * File stream - */ - 200: unknown -} - -export type GetViewCompatAliasData = { - body?: never - path?: never - query: { - /** - * Name of the file to view (see `/api/view` for the full handler contract) - */ - filename: string - } - url: '/view' -} - -export type GetViewCompatAliasErrors = { - /** - * Unauthorized - */ - 401: unknown -} - -export type GetViewCompatAliasResponses = { - /** - * File stream - */ - 200: unknown -} - -export type GetWebsocketData = { - body?: never - path?: never - query?: { - /** - * Stable client identifier used to associate the WebSocket - * connection with the frontend session. If omitted, the server - * generates one. + * Missing required query parameter. Produced by the oapi-codegen + * wrapper via echo.NewHTTPError, so the body shape matches Echo's + * default HTTPError serialization rather than ErrorResponse. * */ - clientId?: string - } - url: '/ws' -} + 400: BindingErrorResponse; + /** + * Unauthorized + */ + 401: ErrorResponse; +}; + +export type GetVhsQueryVideoError = GetVhsQueryVideoErrors[keyof GetVhsQueryVideoErrors]; + +export type GetVhsQueryVideoResponses = { + /** + * Video metadata + */ + 200: { + /** + * Source video metadata + */ + source: { + /** + * [width, height] in pixels + */ + size: [ + number, + number + ]; + /** + * Frames per second + */ + fps: number; + /** + * Total frame count + */ + frames: number; + /** + * Duration in seconds + */ + duration: number; + }; + }; +}; + +export type GetVhsQueryVideoResponse = GetVhsQueryVideoResponses[keyof GetVhsQueryVideoResponses]; + +export type GetUsersInfoData = { + body?: never; + path?: never; + query?: never; + url: '/api/users'; +}; + +export type GetUsersInfoErrors = { + /** + * Unauthorized + */ + 401: ErrorResponse; +}; + +export type GetUsersInfoError = GetUsersInfoErrors[keyof GetUsersInfoErrors]; + +export type GetUsersInfoResponses = { + /** + * Userdata storage information + */ + 200: { + /** + * Where user data is stored (always "server" in cloud) + */ + storage: string; + /** + * Whether user data has been migrated (always true in cloud) + */ + migrated: boolean; + }; +}; + +export type GetUsersInfoResponse = GetUsersInfoResponses[keyof GetUsersInfoResponses]; + +export type GetApiViewVideoAliasData = { + body?: never; + path?: never; + query: { + /** + * Name of the file to view (see `/api/view` for the full handler contract) + */ + filename: string; + }; + url: '/api/viewvideo'; +}; + +export type GetApiViewVideoAliasErrors = { + /** + * Unauthorized + */ + 401: unknown; +}; + +export type GetApiViewVideoAliasResponses = { + /** + * File stream + */ + 200: unknown; +}; + +export type GetViewCompatAliasData = { + body?: never; + path?: never; + query: { + /** + * Name of the file to view (see `/api/view` for the full handler contract) + */ + filename: string; + }; + url: '/view'; +}; + +export type GetViewCompatAliasErrors = { + /** + * Unauthorized + */ + 401: unknown; +}; + +export type GetViewCompatAliasResponses = { + /** + * File stream + */ + 200: unknown; +}; + +export type GetWebsocketData = { + body?: never; + path?: never; + query?: { + /** + * Stable client identifier used to associate the WebSocket + * connection with the frontend session. If omitted, the server + * generates one. + * + */ + clientId?: string; + }; + url: '/ws'; +}; export type GetWebsocketErrors = { - /** - * Unauthorized - */ - 401: unknown -} + /** + * Unauthorized + */ + 401: unknown; +}; export type GetTemplateProxyData = { - body?: never - path: { - /** - * Template subpath within the versioned GCS bucket. - */ - path: string - } - query?: never - url: '/templates/{path}' -} + body?: never; + path: { + /** + * Template subpath within the versioned GCS bucket. + */ + path: string; + }; + query?: never; + url: '/templates/{path}'; +}; export type GetTemplateProxyErrors = { - /** - * Template not found - */ - 404: unknown -} + /** + * Template not found. + */ + 404: unknown; + /** + * Workflow templates version not available. + */ + 503: unknown; +}; + +export type GetTemplateProxyResponses = { + /** + * Template file content streamed from GCS. + */ + 200: unknown; +}; export type GetHealthData = { - body?: never - path?: never - query?: never - url: '/health' -} + body?: never; + path?: never; + query?: never; + url: '/health'; +}; export type GetHealthErrors = { - /** - * Service is unhealthy - */ - 503: string -} + /** + * Service is unhealthy + */ + 503: string; +}; -export type GetHealthError = GetHealthErrors[keyof GetHealthErrors] +export type GetHealthError = GetHealthErrors[keyof GetHealthErrors]; export type GetHealthResponses = { - /** - * Service is healthy - */ - 200: string -} + /** + * Service is healthy + */ + 200: string; +}; -export type GetHealthResponse = GetHealthResponses[keyof GetHealthResponses] - -export type GetOpenapiSpecData = { - body?: never - path?: never - query?: never - url: '/openapi' -} - -export type GetOpenapiSpecResponses = { - /** - * OpenAPI specification document - */ - 200: unknown -} +export type GetHealthResponse = GetHealthResponses[keyof GetHealthResponses]; export type GetMonitoringTasksData = { - body?: never - path?: never - query?: never - url: '/monitoring/tasks' -} + body?: never; + path?: never; + query?: never; + url: '/monitoring/tasks'; +}; export type GetMonitoringTasksErrors = { - /** - * Unauthorized - */ - 401: unknown - /** - * Forbidden - */ - 403: unknown -} + /** + * Unauthorized + */ + 401: unknown; + /** + * Forbidden + */ + 403: unknown; +}; export type GetMonitoringTasksResponses = { - /** - * HTML dashboard - */ - 200: unknown -} + /** + * HTML dashboard + */ + 200: unknown; +}; export type DeleteMonitoringTasksSubpathData = { - body?: never - path: { - /** - * Asynqmon deletion subpath (e.g. delete task). - */ - path: string - } - query?: never - url: '/monitoring/tasks/{path}' -} + body?: never; + path: { + /** + * Asynqmon deletion subpath (e.g. delete task). + */ + path: string; + }; + query?: never; + url: '/monitoring/tasks/{path}'; +}; export type DeleteMonitoringTasksSubpathErrors = { - /** - * Unauthorized - */ - 401: unknown - /** - * Forbidden - */ - 403: unknown -} + /** + * Unauthorized + */ + 401: unknown; + /** + * Forbidden + */ + 403: unknown; +}; export type DeleteMonitoringTasksSubpathResponses = { - /** - * Deletion result - */ - 200: unknown -} + /** + * Deletion result + */ + 200: unknown; +}; export type GetMonitoringTasksSubpathData = { - body?: never - path: { - /** - * Asynqmon UI subpath (HTML page, SPA XHR, or static asset). - */ - path: string - } - query?: never - url: '/monitoring/tasks/{path}' -} + body?: never; + path: { + /** + * Asynqmon UI subpath (HTML page, SPA XHR, or static asset). + */ + path: string; + }; + query?: never; + url: '/monitoring/tasks/{path}'; +}; export type GetMonitoringTasksSubpathErrors = { - /** - * Unauthorized - */ - 401: unknown - /** - * Forbidden - */ - 403: unknown -} + /** + * Unauthorized + */ + 401: unknown; + /** + * Forbidden + */ + 403: unknown; +}; export type GetMonitoringTasksSubpathResponses = { - /** - * Subpath response (asynqmon-determined content type) - */ - 200: unknown -} + /** + * Subpath response (asynqmon-determined content type) + */ + 200: unknown; +}; export type PostMonitoringTasksSubpathData = { - body?: never - path: { - /** - * Asynqmon action subpath (e.g. retry, archive). - */ - path: string - } - query?: never - url: '/monitoring/tasks/{path}' -} + body?: never; + path: { + /** + * Asynqmon action subpath (e.g. retry, archive). + */ + path: string; + }; + query?: never; + url: '/monitoring/tasks/{path}'; +}; export type PostMonitoringTasksSubpathErrors = { - /** - * Unauthorized - */ - 401: unknown - /** - * Forbidden - */ - 403: unknown -} + /** + * Unauthorized + */ + 401: unknown; + /** + * Forbidden + */ + 403: unknown; +}; export type PostMonitoringTasksSubpathResponses = { - /** - * Action result - */ - 200: unknown -} + /** + * Action result + */ + 200: unknown; +}; export type GetPprofData = { - body?: never - path: { - /** - * pprof endpoint name (e.g. heap, goroutine, allocs, block, mutex, threadcreate). - */ - path: string - } - query?: never - url: '/debug/pprof/{path}' -} + body?: never; + path: { + /** + * pprof endpoint name (e.g. heap, goroutine, allocs, block, mutex, threadcreate). + */ + path: string; + }; + query?: never; + url: '/debug/pprof/{path}'; +}; export type GetPprofResponses = { - /** - * Profile data - */ - 200: unknown -} + /** + * Profile data + */ + 200: unknown; +}; export type GetPprofProfileData = { - body?: never - path?: never - query?: never - url: '/debug/pprof/profile' -} + body?: never; + path?: never; + query?: never; + url: '/debug/pprof/profile'; +}; export type GetPprofProfileResponses = { - /** - * CPU profile data - */ - 200: unknown -} + /** + * CPU profile data + */ + 200: unknown; +}; export type GetPprofTraceData = { - body?: never - path?: never - query?: never - url: '/debug/pprof/trace' -} + body?: never; + path?: never; + query?: never; + url: '/debug/pprof/trace'; +}; export type GetPprofTraceResponses = { - /** - * Execution trace data - */ - 200: unknown -} + /** + * Execution trace data + */ + 200: unknown; +}; export type PostPprofSymbolData = { - body?: never - path?: never - query?: never - url: '/debug/pprof/symbol' -} + body?: never; + path?: never; + query?: never; + url: '/debug/pprof/symbol'; +}; export type PostPprofSymbolResponses = { - /** - * Resolved symbols - */ - 200: unknown -} + /** + * Resolved symbols + */ + 200: unknown; +}; export type GetStaticExtensionsData = { - body?: never - path: { - /** - * Extension file path relative to /static/extensions on disk. - */ - path: string - } - query?: never - url: '/extensions/{path}' -} + body?: never; + path: { + /** + * Extension file path relative to /static/extensions on disk. + */ + path: string; + }; + query?: never; + url: '/extensions/{path}'; +}; export type GetStaticExtensionsErrors = { - /** - * File not found - */ - 404: unknown -} + /** + * File not found + */ + 404: unknown; +}; export type GetStaticExtensionsResponses = { - /** - * Static file - */ - 200: unknown -} + /** + * Static file + */ + 200: unknown; +}; export type GetCustomNodeProxyData = { - body?: never - path: { - /** - * Custom node HTTP endpoint path being proxied to the CPU-backed worker. - */ - path: string - } - query?: never - url: '/__custom_node_proxy/{path}' -} + body?: never; + path: { + /** + * Custom node HTTP endpoint path being proxied to the CPU-backed worker. + */ + path: string; + }; + query?: never; + url: '/__custom_node_proxy/{path}'; +}; export type GetCustomNodeProxyErrors = { - /** - * Unauthorized - */ - 401: unknown - /** - * Path not in allowlist - */ - 403: unknown -} + /** + * Unauthorized + */ + 401: unknown; + /** + * Path not in allowlist + */ + 403: unknown; +}; export type GetCustomNodeProxyResponses = { - /** - * Proxied response - */ - 200: unknown -} + /** + * Proxied response + */ + 200: unknown; +}; export type PostCustomNodeProxyData = { - body?: never - path: { - /** - * Custom node HTTP endpoint path being proxied to the CPU-backed worker. - */ - path: string - } - query?: never - url: '/__custom_node_proxy/{path}' -} + body?: never; + path: { + /** + * Custom node HTTP endpoint path being proxied to the CPU-backed worker. + */ + path: string; + }; + query?: never; + url: '/__custom_node_proxy/{path}'; +}; export type PostCustomNodeProxyErrors = { - /** - * Unauthorized - */ - 401: unknown - /** - * Path not in allowlist - */ - 403: unknown -} + /** + * Unauthorized + */ + 401: unknown; + /** + * Path not in allowlist + */ + 403: unknown; +}; export type PostCustomNodeProxyResponses = { - /** - * Proxied response - */ - 200: unknown -} + /** + * Proxied response + */ + 200: unknown; +}; export type GetLegacyPromptByIdData = { - body?: never - path: { - prompt_id: string - } - query?: never - url: '/api/prompt/{prompt_id}' -} + body?: never; + path: { + prompt_id: string; + }; + query?: never; + url: '/api/prompt/{prompt_id}'; +}; export type GetLegacyPromptByIdErrors = { - /** - * Not Found — use /api/jobs/{prompt_id} instead - */ - 404: unknown -} + /** + * Not Found — use /api/jobs/{prompt_id} instead + */ + 404: unknown; +}; export type GetLegacyHistoryByIdData = { - body?: never - path: { - prompt_id: string - } - query?: never - url: '/api/history/{prompt_id}' -} + body?: never; + path: { + prompt_id: string; + }; + query?: never; + url: '/api/history/{prompt_id}'; +}; export type GetLegacyHistoryByIdErrors = { - /** - * Not Found — use /api/jobs/{prompt_id} instead - */ - 404: unknown -} + /** + * Not Found — use /api/jobs/{prompt_id} instead + */ + 404: unknown; +}; export type GetLegacyJobByIdData = { - body?: never - path: { - job_id: string - } - query?: never - url: '/api/job/{job_id}' -} + body?: never; + path: { + job_id: string; + }; + query?: never; + url: '/api/job/{job_id}'; +}; export type GetLegacyJobByIdErrors = { - /** - * Not Found — use /api/jobs/{job_id} instead - */ - 404: unknown -} + /** + * Not Found — use /api/jobs/{job_id} instead + */ + 404: unknown; +}; export type GetLegacyJobOutputsData = { - body?: never - path: { - job_id: string - } - query?: never - url: '/api/job/{job_id}/outputs' -} + body?: never; + path: { + job_id: string; + }; + query?: never; + url: '/api/job/{job_id}/outputs'; +}; export type GetLegacyJobOutputsErrors = { - /** - * Not Found — use /api/jobs/{job_id} instead - */ - 404: unknown -} + /** + * Not Found — use /api/jobs/{job_id} instead + */ + 404: unknown; +}; export type GetLegacyModelsData = { - body?: never - path?: never - query?: never - url: '/api/models' -} + body?: never; + path?: never; + query?: never; + url: '/api/models'; +}; export type GetLegacyModelsErrors = { - /** - * Not Found — use /api/experiment/models instead - */ - 404: unknown -} + /** + * Not Found — use /api/experiment/models instead + */ + 404: unknown; +}; export type GetLegacyModelsByFolderData = { - body?: never - path: { - folder: string - } - query?: never - url: '/api/models/{folder}' -} + body?: never; + path: { + folder: string; + }; + query?: never; + url: '/api/models/{folder}'; +}; export type GetLegacyModelsByFolderErrors = { - /** - * Not Found — use /api/experiment/models/{folder} instead - */ - 404: unknown -} + /** + * Not Found — use /api/experiment/models/{folder} instead + */ + 404: unknown; +}; export type GetLegacyObjectInfoByNodeClassData = { - body?: never - path: { - node_class: string - } - query?: never - url: '/api/object_info/{node_class}' -} + body?: never; + path: { + node_class: string; + }; + query?: never; + url: '/api/object_info/{node_class}'; +}; export type GetLegacyObjectInfoByNodeClassErrors = { - /** - * Not Found — use /api/object_info instead - */ - 404: unknown -} + /** + * Not Found — use /api/object_info instead + */ + 404: unknown; +}; export type GetLegacyUserdataV2Data = { - body?: never - path?: never - query?: never - url: '/api/v2/userdata' -} + body?: never; + path?: never; + query?: never; + url: '/api/v2/userdata'; +}; export type GetLegacyUserdataV2Errors = { - /** - * Not Found — use /api/userdata instead - */ - 404: unknown -} + /** + * Not Found — use /api/userdata instead + */ + 404: unknown; +}; export type GetLegacyAssetContentData = { - body?: never - path: { - id: string - } - query?: never - url: '/api/assets/{id}/content' -} + body?: never; + path: { + id: string; + }; + query?: never; + url: '/api/assets/{id}/content'; +}; export type GetLegacyAssetContentErrors = { - /** - * Not Found — use /api/assets/download instead - */ - 404: unknown -} + /** + * Not Found — use /api/assets/download instead + */ + 404: unknown; +}; export type GetLegacyViewMetadataData = { - body?: never - path: { - folder_name: string - } - query?: never - url: '/api/view_metadata/{folder_name}' -} + body?: never; + path: { + folder_name: string; + }; + query?: never; + url: '/api/view_metadata/{folder_name}'; +}; export type GetLegacyViewMetadataErrors = { - /** - * Not Found — use /api/experiment/models instead - */ - 404: unknown -} + /** + * Not Found — use /api/experiment/models instead + */ + 404: unknown; +}; diff --git a/packages/ingest-types/src/zod.gen.ts b/packages/ingest-types/src/zod.gen.ts index 117a53448d..3b25a6b407 100644 --- a/packages/ingest-types/src/zod.gen.ts +++ b/packages/ingest-types/src/zod.gen.ts @@ -1,33 +1,33 @@ // This file is auto-generated by @hey-api/openapi-ts -import { z } from 'zod' +import { z } from 'zod'; /** * Response indicating whether a Hub username is available. */ export const zHubUsernameCheckResponse = z.object({ - username: z.string(), - available: z.boolean(), - suggestions: z.array(z.string()).optional(), - validation_error: z.string().optional() -}) + username: z.string(), + available: z.boolean(), + suggestions: z.array(z.string()).optional(), + validation_error: z.string().optional() +}); /** * Response containing a signed upload URL and the target asset path. */ export const zHubAssetUploadUrlResponse = z.object({ - upload_url: z.string(), - public_url: z.string(), - token: z.string() -}) + upload_url: z.string(), + public_url: z.string(), + token: z.string() +}); /** * Request body for requesting a signed upload URL for a Hub asset. */ export const zHubAssetUploadUrlRequest = z.object({ - filename: z.string(), - content_type: z.string() -}) + filename: z.string(), + content_type: z.string() +}); /** * Partial update for a published hub workflow (admin moderation). All fields are optional. Semantics match UpdateHubProfileRequest / avatar_token: @@ -42,1053 +42,1107 @@ export const zHubAssetUploadUrlRequest = z.object({ * */ export const zUpdateHubWorkflowRequest = z.object({ - name: z.string().min(1).nullish(), - description: z.string().nullish(), - tags: z.array(z.string()).nullish(), - models: z.array(z.string()).nullish(), - custom_nodes: z.array(z.string()).nullish(), - tutorial_url: z.string().nullish(), - thumbnail_type: z.enum(['image', 'video', 'image_comparison']).optional(), - thumbnail_token: z.string().nullish(), - thumbnail_comparison_token: z.string().nullish(), - sample_image_tokens_or_urls: z.array(z.string()).nullish(), - metadata: z.record(z.unknown()).nullish() -}) + name: z.string().min(1).nullish(), + description: z.string().nullish(), + tags: z.array(z.string()).nullish(), + models: z.array(z.string()).nullish(), + custom_nodes: z.array(z.string()).nullish(), + tutorial_url: z.string().nullish(), + thumbnail_type: z.enum([ + 'image', + 'video', + 'image_comparison' + ]).optional(), + thumbnail_token: z.string().nullish(), + thumbnail_comparison_token: z.string().nullish(), + sample_image_tokens_or_urls: z.array(z.string()).nullish(), + metadata: z.record(z.unknown()).nullish() +}); /** * Request body for publishing or updating a workflow on the Hub. */ export const zPublishHubWorkflowRequest = z.object({ - username: z.string(), - name: z.string(), - workflow_filename: z.string(), - asset_ids: z.array(z.string()), - description: z.string().optional(), - tags: z.array(z.string()).optional(), - models: z.array(z.string()).optional(), - custom_nodes: z.array(z.string()).optional(), - tutorial_url: z.string().optional(), - metadata: z.record(z.unknown()).optional(), - thumbnail_type: z.enum(['image', 'video', 'image_comparison']).optional(), - thumbnail_token_or_url: z.string().optional(), - thumbnail_comparison_token_or_url: z.string().optional(), - sample_image_tokens_or_urls: z.array(z.string()).optional() -}) + username: z.string(), + name: z.string(), + workflow_filename: z.string(), + asset_ids: z.array(z.string()), + description: z.string().optional(), + tags: z.array(z.string()).optional(), + models: z.array(z.string()).optional(), + custom_nodes: z.array(z.string()).optional(), + tutorial_url: z.string().optional(), + metadata: z.record(z.unknown()).optional(), + thumbnail_type: z.enum([ + 'image', + 'video', + 'image_comparison' + ]).optional(), + thumbnail_token_or_url: z.string().optional(), + thumbnail_comparison_token_or_url: z.string().optional(), + sample_image_tokens_or_urls: z.array(z.string()).optional() +}); /** * Lightweight asset reference used in workflow publishing payloads. */ export const zAssetInfo = z.object({ - id: z.string(), - name: z.string(), - preview_url: z.string(), - storage_url: z.string(), - model: z.boolean(), - public: z.boolean(), - in_library: z.boolean() -}) + id: z.string(), + name: z.string(), + preview_url: z.string(), + storage_url: z.string(), + model: z.boolean(), + public: z.boolean(), + in_library: z.boolean() +}); /** * Abbreviated Hub profile used in workflow listings. */ export const zHubProfileSummary = z.object({ - username: z.string(), - display_name: z.string().optional(), - avatar_url: z.string().optional() -}) + username: z.string(), + display_name: z.string().optional(), + avatar_url: z.string().optional() +}); /** * Reference to a Hub label by ID. */ export const zLabelRef = z.object({ - name: z.string(), - display_name: z.string() -}) + name: z.string(), + display_name: z.string() +}); /** * Public workflow status. NULL in the database is represented as pending in API responses. */ export const zHubWorkflowStatus = z.enum([ - 'pending', - 'approved', - 'rejected', - 'deprecated' -]) + 'pending', + 'approved', + 'rejected', + 'deprecated' +]); /** * Full Hub workflow detail including versions, assets, and statistics. */ export const zHubWorkflowDetail = z.object({ - share_id: z.string(), - workflow_id: z.string(), - name: z.string(), - status: zHubWorkflowStatus, - description: z.string().optional(), - tags: z.array(zLabelRef).optional(), - thumbnail_type: z.enum(['image', 'video', 'image_comparison']).optional(), - thumbnail_url: z.string().optional(), - thumbnail_comparison_url: z.string().optional(), - models: z.array(zLabelRef).optional(), - custom_nodes: z.array(zLabelRef).optional(), - tutorial_url: z.string().optional(), - metadata: z.record(z.unknown()).optional(), - sample_image_urls: z.array(z.string()).optional(), - publish_time: z.string().datetime().nullish(), - workflow_json: z.record(z.unknown()), - assets: z.array(zAssetInfo), - profile: zHubProfileSummary -}) + share_id: z.string(), + workflow_id: z.string(), + name: z.string(), + status: zHubWorkflowStatus, + description: z.string().optional(), + tags: z.array(zLabelRef).optional(), + thumbnail_type: z.enum([ + 'image', + 'video', + 'image_comparison' + ]).optional(), + thumbnail_url: z.string().optional(), + thumbnail_comparison_url: z.string().optional(), + models: z.array(zLabelRef).optional(), + custom_nodes: z.array(zLabelRef).optional(), + tutorial_url: z.string().optional(), + metadata: z.record(z.unknown()).optional(), + sample_image_urls: z.array(z.string()).optional(), + publish_time: z.string().datetime().nullish(), + workflow_json: z.record(z.unknown()), + assets: z.array(zAssetInfo), + profile: zHubProfileSummary +}); /** * Abbreviated Hub workflow metadata used in search and listing results. */ export const zHubWorkflowSummary = z.object({ - share_id: z.string(), - name: z.string(), - status: zHubWorkflowStatus, - description: z.string().optional(), - tags: z.array(zLabelRef).optional(), - models: z.array(zLabelRef).optional(), - custom_nodes: z.array(zLabelRef).optional(), - thumbnail_type: z.enum(['image', 'video', 'image_comparison']).optional(), - thumbnail_url: z.string().optional(), - thumbnail_comparison_url: z.string().optional(), - publish_time: z.string().datetime().nullish(), - profile: zHubProfileSummary, - metadata: z.record(z.unknown()).optional(), - tutorial_url: z.string().optional(), - sample_image_urls: z.array(z.string()).optional() -}) + share_id: z.string(), + name: z.string(), + status: zHubWorkflowStatus, + description: z.string().optional(), + tags: z.array(zLabelRef).optional(), + models: z.array(zLabelRef).optional(), + custom_nodes: z.array(zLabelRef).optional(), + thumbnail_type: z.enum([ + 'image', + 'video', + 'image_comparison' + ]).optional(), + thumbnail_url: z.string().optional(), + thumbnail_comparison_url: z.string().optional(), + publish_time: z.string().datetime().nullish(), + profile: zHubProfileSummary, + metadata: z.record(z.unknown()).optional(), + tutorial_url: z.string().optional(), + sample_image_urls: z.array(z.string()).optional() +}); /** * Paginated list of Hub workflows matching search criteria. */ export const zHubWorkflowListResponse = z.object({ - workflows: z.array(z.union([zHubWorkflowSummary, zHubWorkflowDetail])), - next_cursor: z.string().optional() -}) + workflows: z.array(z.union([zHubWorkflowSummary, zHubWorkflowDetail])), + next_cursor: z.string().optional() +}); /** * Metadata for a single Hub label. */ export const zHubLabelInfo = z.object({ - name: z.string(), - display_name: z.string(), - description: z.string().optional(), - type: z.enum(['tag', 'model', 'custom_node']) -}) + name: z.string(), + display_name: z.string(), + description: z.string().optional(), + type: z.enum([ + 'tag', + 'model', + 'custom_node' + ]) +}); /** * List of available Hub labels for categorizing workflows. */ export const zHubLabelListResponse = z.object({ - labels: z.array(zHubLabelInfo) -}) + labels: z.array(zHubLabelInfo) +}); /** * Entry in the curated workflow template gallery shown on the home page. */ export const zHubWorkflowTemplateEntry = z.object({ - name: z.string(), - title: z.string(), - status: zHubWorkflowStatus, - description: z.string().optional(), - tags: z.array(z.string()).optional(), - models: z.array(z.string()).optional(), - requiresCustomNodes: z.array(z.string()).optional(), - thumbnailVariant: z.string().optional(), - mediaType: z.string().optional(), - mediaSubtype: z.string().optional(), - size: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional(), - vram: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional(), - usage: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional(), - searchRank: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional(), - isEssential: z.boolean().optional(), - openSource: z.boolean().optional(), - profile: zHubProfileSummary.optional(), - tutorialUrl: z.string().optional(), - logos: z.array(z.record(z.unknown())).optional(), - date: z.string().optional(), - io: z - .object({ - inputs: z.array(z.record(z.unknown())).optional(), - outputs: z.array(z.record(z.unknown())).optional() - }) - .optional(), - includeOnDistributions: z.array(z.string()).optional(), - thumbnailUrl: z.string().optional(), - thumbnailComparisonUrl: z.string().optional(), - shareId: z.string().optional(), - extendedDescription: z.string().optional(), - metaDescription: z.string().optional(), - howToUse: z.array(z.string()).optional(), - suggestedUseCases: z.array(z.string()).optional(), - faqItems: z - .array( - z.object({ + name: z.string(), + title: z.string(), + status: zHubWorkflowStatus, + description: z.string().optional(), + tags: z.array(z.string()).optional(), + models: z.array(z.string()).optional(), + requiresCustomNodes: z.array(z.string()).optional(), + thumbnailVariant: z.string().optional(), + mediaType: z.string().optional(), + mediaSubtype: z.string().optional(), + size: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional(), + vram: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional(), + usage: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional(), + searchRank: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional(), + isEssential: z.boolean().optional(), + openSource: z.boolean().optional(), + profile: zHubProfileSummary.optional(), + tutorialUrl: z.string().optional(), + logos: z.array(z.record(z.unknown())).optional(), + date: z.string().optional(), + io: z.object({ + inputs: z.array(z.record(z.unknown())).optional(), + outputs: z.array(z.record(z.unknown())).optional() + }).optional(), + includeOnDistributions: z.array(z.string()).optional(), + thumbnailUrl: z.string().optional(), + thumbnailComparisonUrl: z.string().optional(), + shareId: z.string().optional(), + extendedDescription: z.string().optional(), + metaDescription: z.string().optional(), + howToUse: z.array(z.string()).optional(), + suggestedUseCases: z.array(z.string()).optional(), + faqItems: z.array(z.object({ question: z.string(), answer: z.string() - }) - ) - .optional(), - contentTemplate: z.string().optional() -}) + })).optional(), + contentTemplate: z.string().optional() +}); /** * Request body for updating an existing Hub profile. */ export const zUpdateHubProfileRequest = z.object({ - display_name: z.string().optional(), - description: z.string().optional(), - avatar_token: z.string().nullish(), - website_urls: z.array(z.string()).optional() -}) + display_name: z.string().optional(), + description: z.string().optional(), + avatar_token: z.string().nullish(), + website_urls: z.array(z.string()).optional() +}); /** * Request body for creating a new Hub profile. */ export const zCreateHubProfileRequest = z.object({ - workspace_id: z.string(), - username: z.string(), - display_name: z.string().optional(), - description: z.string().optional(), - avatar_token: z.string().optional(), - website_urls: z.array(z.string()).optional() -}) + workspace_id: z.string(), + username: z.string(), + display_name: z.string().optional(), + description: z.string().optional(), + avatar_token: z.string().optional(), + website_urls: z.array(z.string()).optional() +}); /** * Full public profile for a Hub creator. */ export const zHubProfile = z.object({ - username: z.string(), - display_name: z.string().optional(), - description: z.string().optional(), - avatar_url: z.string().optional(), - website_urls: z.array(z.string()).optional() -}) + username: z.string(), + display_name: z.string().optional(), + description: z.string().optional(), + avatar_url: z.string().optional(), + website_urls: z.array(z.string()).optional() +}); /** * Response after importing published workflow assets. */ export const zImportPublishedAssetsResponse = z.object({ - assets: z.array(zAssetInfo) -}) + assets: z.array(zAssetInfo) +}); /** * Request body for importing assets from a published workflow. */ export const zImportPublishedAssetsRequest = z.object({ - published_asset_ids: z.array(z.string()), - share_id: z.string().nullish() -}) + published_asset_ids: z.array(z.string()), + share_id: z.string().nullish() +}); /** * Full detail of a publicly published workflow on the Hub. */ export const zPublishedWorkflowDetail = z.object({ - share_id: z.string(), - workflow_id: z.string(), - name: z.string(), - listed: z.boolean(), - publish_time: z.string().datetime().nullish(), - workflow_json: z.record(z.unknown()), - assets: z.array(zAssetInfo) -}) + share_id: z.string(), + workflow_id: z.string(), + name: z.string(), + listed: z.boolean(), + publish_time: z.string().datetime().nullish(), + workflow_json: z.record(z.unknown()), + assets: z.array(zAssetInfo) +}); /** * Response containing assets associated with a workflow. */ export const zWorkflowApiAssetsResponse = z.object({ - assets: z.array(zAssetInfo) -}) + assets: z.array(zAssetInfo) +}); /** * Request body for querying assets associated with a workflow. */ export const zWorkflowApiAssetsRequest = z.object({ - workflow_api_json: z.record(z.unknown()) -}) + workflow_api_json: z.record(z.unknown()) +}); /** * Request body for publishing workflow assets to the Hub. */ export const zPublishWorkflowAssetsRequest = z.object({ - asset_ids: z.array(z.string()) -}) + asset_ids: z.array(z.string()) +}); /** * Publishing metadata for a workflow shared to the Hub. */ export const zWorkflowPublishInfo = z.object({ - workflow_id: z.string(), - share_id: z.string(), - publish_time: z.string().datetime().nullish(), - listed: z.boolean(), - assets: z.array(zAssetInfo) -}) + workflow_id: z.string(), + share_id: z.string(), + publish_time: z.string().datetime().nullish(), + listed: z.boolean(), + assets: z.array(zAssetInfo) +}); /** * Request body for forking an existing workflow into the user's account. */ export const zForkWorkflowRequest = z.object({ - source_version: z.number().int(), - name: z.string().optional() -}) + source_version: z.number().int(), + name: z.string().optional() +}); /** * Full workflow version including the serialized workflow JSON. */ export const zWorkflowVersionContentResponse = z.object({ - id: z.string(), - version: z.number().int(), - workflow_json: z.record(z.unknown()), - created_by: z.string(), - created_at: z.string().datetime(), - dependency_asset_ids: z.array(z.string()).optional() -}) + id: z.string(), + version: z.number().int(), + workflow_json: z.record(z.unknown()), + created_by: z.string(), + created_at: z.string().datetime(), + dependency_asset_ids: z.array(z.string()).optional() +}); /** * Metadata for a single workflow version. */ export const zWorkflowVersionResponse = z.object({ - id: z.string(), - version: z.number().int(), - latest_version: z.number().int(), - created_by: z.string(), - created_at: z.string().datetime() -}) + id: z.string(), + version: z.number().int(), + latest_version: z.number().int(), + created_by: z.string(), + created_at: z.string().datetime() +}); /** * Request body for creating a new version of a saved workflow. */ export const zCreateWorkflowVersionRequest = z.object({ - base_version: z.number().int(), - workflow_json: z.record(z.unknown()) -}) + base_version: z.number().int(), + workflow_json: z.record(z.unknown()) +}); /** * Offset/limit-based pagination metadata included in list responses. */ export const zPaginationInfo = z.object({ - offset: z.number().int().gte(0), - limit: z.number().int().gte(1), - total: z.number().int().gte(0), - has_more: z.boolean() -}) + offset: z.number().int().gte(0), + limit: z.number().int().gte(1), + total: z.number().int().gte(0), + has_more: z.boolean() +}); /** * Reference to the parent workflow from which this workflow was forked. */ export const zWorkflowForkedFrom = z.object({ - workflow_id: z.string().optional(), - workflow_version_id: z.string().optional() -}) + workflow_id: z.string().optional(), + workflow_version_id: z.string().optional() +}); /** * Full workflow entity including metadata and version history. */ export const zWorkflowResponse = z.object({ - id: z.string(), - name: z.string().optional(), - description: z.string().optional(), - default_view: z.enum(['workflow', 'app']).optional(), - latest_version: z.number().int(), - forked_from: zWorkflowForkedFrom.optional(), - created_by: z.string(), - created_at: z.string().datetime(), - updated_at: z.string().datetime() -}) + id: z.string(), + name: z.string().optional(), + description: z.string().optional(), + default_view: z.enum(['workflow', 'app']).optional(), + latest_version: z.number().int(), + forked_from: zWorkflowForkedFrom.optional(), + created_by: z.string(), + created_at: z.string().datetime(), + updated_at: z.string().datetime() +}); /** * Paginated list of saved workflows. */ export const zWorkflowListResponse = z.object({ - data: z.array(zWorkflowResponse), - pagination: zPaginationInfo -}) + data: z.array(zWorkflowResponse), + pagination: zPaginationInfo +}); /** * Request body for updating an existing saved workflow. */ export const zUpdateWorkflowRequest = z.object({ - name: z.string().optional(), - description: z.string().optional(), - default_view: z.enum(['workflow', 'app']).optional() -}) + name: z.string().optional(), + description: z.string().optional(), + default_view: z.enum(['workflow', 'app']).optional() +}); /** * Request body for creating a new saved workflow. */ export const zCreateWorkflowRequest = z.object({ - name: z.string().optional(), - description: z.string().optional(), - default_view: z.enum(['workflow', 'app']).optional(), - workflow_json: z.record(z.unknown()), - forked_from_workflow_id: z.string().optional(), - forked_from_workflow_version_id: z.string().optional() -}) + name: z.string().optional(), + description: z.string().optional(), + default_view: z.enum(['workflow', 'app']).optional(), + workflow_json: z.record(z.unknown()), + forked_from_workflow_id: z.string().optional(), + forked_from_workflow_version_id: z.string().optional() +}); /** * Response after recording partner usage data. */ export const zPartnerUsageResponse = z.object({ - status: z.string() -}) + status: z.string() +}); /** * Request body for reporting partner resource usage (admin endpoint). */ export const zPartnerUsageRequest = z.object({ - workspace_id: z.string().min(1), - user_id: z.string().optional(), - transaction_id: z.string().min(1), - event_type: z.string().min(1), - timestamp: z.string().datetime().optional(), - properties: z.record(z.unknown()).optional() -}) + workspace_id: z.string().min(1), + user_id: z.string().optional(), + transaction_id: z.string().min(1), + event_type: z.string().min(1), + timestamp: z.string().datetime().optional(), + properties: z.record(z.unknown()).optional() +}); /** * Status of an asynchronous billing operation. */ export const zBillingOpStatusResponse = z.object({ - id: z.string(), - status: z.enum(['pending', 'succeeded', 'failed']), - error_message: z.string().optional(), - started_at: z.string().datetime(), - completed_at: z.string().datetime().optional() -}) + id: z.string(), + status: z.enum([ + 'pending', + 'succeeded', + 'failed' + ]), + error_message: z.string().optional(), + started_at: z.string().datetime(), + completed_at: z.string().datetime().optional() +}); /** * Response after successfully purchasing a credit top-up. */ export const zCreateTopupResponse = z.object({ - billing_op_id: z.string(), - topup_id: z.string(), - status: z.enum(['pending', 'completed', 'failed']), - amount_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) -}) + billing_op_id: z.string(), + topup_id: z.string(), + status: z.enum([ + 'pending', + 'completed', + 'failed' + ]), + amount_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }) +}); /** * Request body for purchasing a one-time credit top-up. */ export const zCreateTopupRequest = z.object({ - amount_cents: z.coerce - .bigint() - .gte(BigInt(500)) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - idempotency_key: z.string().optional() -}) + amount_cents: z.coerce.bigint().gte(BigInt(500)).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + idempotency_key: z.string().optional() +}); /** * Response containing a redirect URL to the payment portal. */ export const zPaymentPortalResponse = z.object({ - url: z.string() -}) + url: z.string() +}); /** * Request body for generating a payment portal session URL. */ export const zPaymentPortalRequest = z.object({ - return_url: z.string().optional() -}) + return_url: z.string().optional() +}); /** * Response after successfully resubscribing to a billing plan. */ export const zResubscribeResponse = z.object({ - billing_op_id: z.string(), - status: z.enum(['active']), - message: z.string().optional() -}) + billing_op_id: z.string(), + status: z.enum(['active']), + message: z.string().optional() +}); /** * Request body for reactivating a previously cancelled subscription. */ export const zResubscribeRequest = z.object({ - idempotency_key: z.string().optional() -}) + idempotency_key: z.string().optional() +}); /** * Response after successfully cancelling a subscription. */ export const zCancelSubscriptionResponse = z.object({ - billing_op_id: z.string(), - cancel_at: z.string().datetime() -}) + billing_op_id: z.string(), + cancel_at: z.string().datetime() +}); /** * Request body for cancelling the current subscription. */ export const zCancelSubscriptionRequest = z.object({ - idempotency_key: z.string().optional() -}) + idempotency_key: z.string().optional() +}); /** * Response after successfully subscribing to a billing plan. */ export const zSubscribeResponse = z.object({ - billing_op_id: z.string(), - status: z.enum(['subscribed', 'needs_payment_method', 'pending_payment']), - effective_at: z.string().datetime().optional(), - payment_method_url: z.string().optional() -}) + billing_op_id: z.string(), + status: z.enum([ + 'subscribed', + 'needs_payment_method', + 'pending_payment' + ]), + effective_at: z.string().datetime().optional(), + payment_method_url: z.string().optional() +}); /** * Request body for subscribing a workspace to a billing plan. */ export const zSubscribeRequest = z.object({ - plan_slug: z.string(), - idempotency_key: z.string().optional(), - return_url: z.string().optional(), - cancel_url: z.string().optional() -}) + plan_slug: z.string(), + idempotency_key: z.string().optional(), + return_url: z.string().optional(), + cancel_url: z.string().optional() +}); /** * Summary of seat costs based on current workspace members */ export const zPlanSeatSummary = z.object({ - seat_count: z.number().int(), - total_cost_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - total_credits_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) -}) + seat_count: z.number().int(), + total_cost_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + total_credits_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }) +}); /** * Billing period (uppercase to match comfy-api) */ -export const zSubscriptionDuration = z.enum(['MONTHLY', 'ANNUAL']) +export const zSubscriptionDuration = z.enum(['MONTHLY', 'ANNUAL']); /** * Subscription tier (uppercase to match comfy-api) */ export const zSubscriptionTier = z.enum([ - 'FREE', - 'STANDARD', - 'CREATOR', - 'PRO', - 'FOUNDERS_EDITION' -]) + 'FREE', + 'STANDARD', + 'CREATOR', + 'PRO', + 'FOUNDERS_EDITION' +]); /** * Plan information for preview display */ export const zPreviewPlanInfo = z.object({ - slug: z.string(), - tier: zSubscriptionTier, - duration: zSubscriptionDuration, - price_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - credits_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - seat_summary: zPlanSeatSummary, - period_start: z.string().datetime().optional(), - period_end: z.string().datetime().optional() -}) + slug: z.string(), + tier: zSubscriptionTier, + duration: zSubscriptionDuration, + price_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + credits_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + seat_summary: zPlanSeatSummary, + period_start: z.string().datetime().optional(), + period_end: z.string().datetime().optional() +}); /** * Itemized cost preview for a pending subscription change. */ export const zPreviewSubscribeResponse = z.object({ - allowed: z.boolean(), - reason: z.string().optional(), - transition_type: z.enum([ - 'new_subscription', - 'upgrade', - 'downgrade', - 'duration_change' - ]), - effective_at: z.string().datetime(), - is_immediate: z.boolean(), - cost_today_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - cost_next_period_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - credits_today_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - credits_next_period_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - current_plan: zPreviewPlanInfo.optional(), - new_plan: zPreviewPlanInfo -}) + allowed: z.boolean(), + reason: z.string().optional(), + transition_type: z.enum([ + 'new_subscription', + 'upgrade', + 'downgrade', + 'duration_change' + ]), + effective_at: z.string().datetime(), + is_immediate: z.boolean(), + cost_today_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + cost_next_period_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + credits_today_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + credits_next_period_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + current_plan: zPreviewPlanInfo.optional(), + new_plan: zPreviewPlanInfo +}); /** * Request body for previewing the cost of a plan subscription change. */ export const zPreviewSubscribeRequest = z.object({ - plan_slug: z.string() -}) + plan_slug: z.string() +}); /** * Reason why a plan is unavailable */ export const zPlanAvailabilityReason = z.enum([ - 'same_plan', - 'incompatible_transition', - 'requires_team', - 'requires_personal', - 'exceeds_max_seats' -]) + 'same_plan', + 'incompatible_transition', + 'requires_team', + 'requires_personal', + 'exceeds_max_seats' +]); /** * Availability and eligibility information for a billing plan. */ export const zPlanAvailability = z.object({ - available: z.boolean(), - reason: zPlanAvailabilityReason.optional() -}) + available: z.boolean(), + reason: zPlanAvailabilityReason.optional() +}); /** * Billing plan details including pricing, limits, and features. */ export const zPlan = z.object({ - slug: z.string(), - tier: zSubscriptionTier, - duration: zSubscriptionDuration, - price_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - credits_cents: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - max_seats: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - availability: zPlanAvailability, - seat_summary: zPlanSeatSummary -}) + slug: z.string(), + tier: zSubscriptionTier, + duration: zSubscriptionDuration, + price_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + credits_cents: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + max_seats: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + availability: zPlanAvailability, + seat_summary: zPlanSeatSummary +}); /** * List of available billing plans for subscription. */ export const zBillingPlansResponse = z.object({ - current_plan_slug: z.string().optional(), - plans: z.array(zPlan) -}) + current_plan_slug: z.string().optional(), + plans: z.array(zPlan) +}); /** * User secret metadata (the secret value itself is never returned after creation). */ export const zSecretResponse = z.object({ - id: z.string().uuid(), - name: z.string(), - provider: z.string().optional(), - last_used_at: z.string().datetime().optional(), - created_at: z.string().datetime(), - updated_at: z.string().datetime() -}) + id: z.string().uuid(), + name: z.string(), + provider: z.string().optional(), + last_used_at: z.string().datetime().optional(), + created_at: z.string().datetime(), + updated_at: z.string().datetime() +}); /** * List of user secrets with metadata only. */ export const zSecretListResponse = z.object({ - data: z.array(zSecretResponse) -}) + data: z.array(zSecretResponse) +}); /** * Request body for updating an existing user secret. */ export const zUpdateSecretRequest = z.object({ - name: z.string().min(1).max(255).optional(), - secret_value: z.string().min(1).optional() -}) + name: z.string().min(1).max(255).optional(), + secret_value: z.string().min(1).optional() +}); /** * Request body for creating a new user secret. */ export const zCreateSecretRequest = z.object({ - name: z.string().min(1).max(255), - provider: z.string().max(64).optional(), - secret_value: z.string().min(1) -}) + name: z.string().min(1).max(255), + provider: z.string().max(64).optional(), + secret_value: z.string().min(1) +}); /** * A single billing event such as a charge, credit, or adjustment. */ export const zBillingEvent = z.object({ - event_type: z.string(), - event_id: z.string(), - params: z.record(z.unknown()).optional(), - createdAt: z.string().datetime() -}) + event_type: z.string(), + event_id: z.string(), + params: z.record(z.unknown()).optional(), + createdAt: z.string().datetime() +}); /** * Paginated list of billing events for a workspace. */ export const zBillingEventsResponse = z.object({ - total: z.number().int(), - events: z.array(zBillingEvent), - page: z.number().int(), - limit: z.number().int(), - totalPages: z.number().int() -}) + total: z.number().int(), + events: z.array(zBillingEvent), + page: z.number().int(), + limit: z.number().int(), + totalPages: z.number().int() +}); /** * Current credit balance and usage details for a workspace. */ export const zBillingBalanceResponse = z.object({ - amount_micros: z.number(), - prepaid_balance_micros: z.number().optional(), - cloud_credit_balance_micros: z.number().optional(), - pending_charges_micros: z.number().optional(), - effective_balance_micros: z.number().optional(), - currency: z.string() -}) + amount_micros: z.number(), + prepaid_balance_micros: z.number().optional(), + cloud_credit_balance_micros: z.number().optional(), + pending_charges_micros: z.number().optional(), + effective_balance_micros: z.number().optional(), + currency: z.string() +}); /** * Payment lifecycle status */ export const zBillingStatus = z.enum([ - 'awaiting_payment_method', - 'pending_payment', - 'paid', - 'payment_failed', - 'inactive' -]) + 'awaiting_payment_method', + 'pending_payment', + 'paid', + 'payment_failed', + 'inactive' +]); /** * Current billing and subscription status for a workspace. */ export const zBillingStatusResponse = z.object({ - is_active: z.boolean(), - subscription_status: z.enum(['active', 'ended', 'canceled']).optional(), - subscription_tier: zSubscriptionTier.optional(), - subscription_duration: zSubscriptionDuration.optional(), - plan_slug: z.string().optional(), - billing_status: zBillingStatus.optional(), - has_funds: z.boolean(), - cancel_at: z.string().datetime().optional(), - renewal_date: z.string().datetime().optional() -}) + is_active: z.boolean(), + subscription_status: z.enum([ + 'active', + 'ended', + 'canceled' + ]).optional(), + subscription_tier: zSubscriptionTier.optional(), + subscription_duration: zSubscriptionDuration.optional(), + plan_slug: z.string().optional(), + billing_status: zBillingStatus.optional(), + has_funds: z.boolean(), + cancel_at: z.string().datetime().optional(), + renewal_date: z.string().datetime().optional() +}); /** * A single JSON Web Key entry within a JWKS response. */ export const zJwkKey = z.object({ - kty: z.string(), - crv: z.string(), - kid: z.string(), - use: z.string(), - alg: z.string(), - x: z.string(), - y: z.string() -}) + kty: z.string(), + crv: z.string(), + kid: z.string(), + use: z.string(), + alg: z.string(), + x: z.string(), + y: z.string() +}); + +/** + * RFC 6749 §5.2 error response. + */ +export const zOAuthTokenError = z.object({ + error: z.string(), + error_description: z.string().optional() +}); + +/** + * RFC 6749 §5.1 successful token response. + */ +export const zOAuthTokenResponse = z.object({ + access_token: z.string(), + token_type: z.enum(['Bearer']), + expires_in: z.number().int(), + refresh_token: z.string(), + scope: z.string() +}); + +/** + * One workspace option presented in the OAuth consent challenge. Promoted to a named schema so the generated Go type is referenceable in handlers and tests rather than re-declared as an anonymous struct at every callsite. + * + */ +export const zOAuthConsentChallengeWorkspace = z.object({ + id: z.string(), + name: z.string(), + type: z.enum(['personal', 'team']), + role: z.enum(['owner', 'member']) +}); + +/** + * Redirect target produced after a JSON consent submission. The frontend must navigate the browser to this URL so custom-scheme client callbacks work without relying on fetch-visible 302 headers. + */ +export const zOAuthAuthorizeRedirectResponse = z.object({ + redirect_url: z.string().url() +}); + +/** + * Server-side state describing the OAuth consent decision the user is being asked to make. Returned by GET /oauth/authorize when a valid Cloud session exists; the frontend renders the consent UI from this payload and POSTs the decision back. Browser never sees the original OAuth params on resume. + * + */ +export const zOAuthConsentChallenge = z.object({ + oauth_request_id: z.string().uuid(), + csrf_token: z.string(), + client_display_name: z.string(), + resource_display_name: z.string(), + scopes: z.array(z.string()), + workspaces: z.array(zOAuthConsentChallengeWorkspace) +}); + +/** + * OAuth 2.1 protected-resource metadata (RFC 9728). + */ +export const zOAuthProtectedResourceMetadata = z.object({ + resource: z.string().url(), + authorization_servers: z.array(z.string().url()), + scopes_supported: z.array(z.string()), + bearer_methods_supported: z.array(z.string()).optional() +}); + +/** + * RFC 7591 §3.2.2 error response. + */ +export const zOAuthRegisterError = z.object({ + error: z.enum(['invalid_redirect_uri', 'invalid_client_metadata']), + error_description: z.string().nullish() +}); + +/** + * Error shape returned when request binding or validation fails before the handler runs. + */ +export const zBindingErrorResponse = z.object({ + message: z.string() +}); + +/** + * Union of the two 400 shapes /oauth/register can emit. `OAuthRegisterError` is the handler-shaped RFC 7591 §3.2.2 error; `BindingErrorResponse` is the strict-server binding-layer error fired when the request body fails OpenAPI-schema validation before the handler runs. + * + */ +export const zOAuthRegisterBadRequestResponse = z.union([ + zOAuthRegisterError, + zBindingErrorResponse +]); + +/** + * RFC 7591 §3.2.1 successful registration response. + */ +export const zOAuthRegisterResponse = z.object({ + client_id: z.string(), + client_id_issued_at: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + client_name: z.string().optional(), + redirect_uris: z.array(z.string()), + grant_types: z.array(z.string()), + response_types: z.array(z.string()), + token_endpoint_auth_method: z.enum(['none']), + application_type: z.enum(['native', 'web']) +}); + +/** + * RFC 7591 §2 client metadata document. Only the fields the server honors are listed; presence of `scope` or `resource_grants` in the request is rejected (`invalid_client_metadata`) because those are server-owned for dynamic clients. `additionalProperties: false` mirrors the runtime middleware that rejects any unknown metadata key. + * + */ +export const zOAuthRegisterRequest = z.object({ + redirect_uris: z.array(z.string()).min(1).max(5), + client_name: z.string().max(100).optional(), + application_type: z.enum(['native', 'web']), + token_endpoint_auth_method: z.enum(['none']).optional(), + grant_types: z.array(z.enum(['authorization_code', 'refresh_token'])).optional(), + response_types: z.array(z.enum(['code'])).optional(), + scope: z.string().nullish(), + resource_grants: z.record(z.array(z.string())).nullish(), + client_uri: z.string().nullish(), + logo_uri: z.string().nullish(), + tos_uri: z.string().nullish(), + policy_uri: z.string().nullish(), + software_id: z.string().nullish(), + software_version: z.string().nullish(), + contacts: z.array(z.string()).nullish(), + jwks: z.record(z.unknown()).nullish(), + jwks_uri: z.string().nullish() +}); + +/** + * OAuth 2.1 authorization-server metadata (RFC 8414). + */ +export const zOAuthAuthorizationServerMetadata = z.object({ + issuer: z.string().url(), + authorization_endpoint: z.string().url(), + token_endpoint: z.string().url(), + jwks_uri: z.string().url(), + registration_endpoint: z.string().url().optional(), + response_types_supported: z.array(z.string()), + grant_types_supported: z.array(z.string()), + code_challenge_methods_supported: z.array(z.string()), + token_endpoint_auth_methods_supported: z.array(z.string()), + scopes_supported: z.array(z.string()).optional() +}); /** * JSON Web Key Set containing the public keys used to verify Cloud JWTs. */ export const zJwksResponse = z.object({ - keys: z.array(zJwkKey) -}) + keys: z.array(zJwkKey) +}); /** * Response after synchronizing an API key into the local database. */ export const zSyncApiKeyResponse = z.object({ - result: z.enum(['revoked', 'already_revoked', 'no_op']) -}) + result: z.enum([ + 'revoked', + 'already_revoked', + 'no_op' + ]) +}); /** * Request body for synchronizing an API key from the external registry. */ export const zSyncApiKeyRequest = z.object({ - event: z.enum(['delete']), - key_hash: z.string().regex(/^[0-9a-fA-F]{64}$/), - customer_id: z.string().min(1) -}) + event: z.enum(['delete']), + key_hash: z.string().regex(/^[0-9a-fA-F]{64}$/), + customer_id: z.string().min(1) +}); /** * Response confirming the validity and scope of a workspace API key. */ export const zVerifyApiKeyResponse = z.object({ - user_id: z.string(), - email: z.string(), - name: z.string(), - is_admin: z.boolean(), - workspace_id: z.string(), - workspace_type: z.enum(['personal', 'team']), - role: z.enum(['owner', 'member']), - has_funds: z.boolean(), - is_active: z.boolean(), - permissions: z.array(z.string()) -}) + user_id: z.string(), + email: z.string(), + name: z.string(), + is_admin: z.boolean(), + workspace_id: z.string(), + workspace_type: z.enum(['personal', 'team']), + role: z.enum(['owner', 'member']), + has_funds: z.boolean(), + is_active: z.boolean(), + permissions: z.array(z.string()) +}); /** * Request body for verifying a workspace API key (admin endpoint). */ export const zVerifyApiKeyRequest = z.object({ - api_key: z.string() -}) + api_key: z.string() +}); /** * Response after bulk-revoking API keys for a workspace member. */ export const zBulkRevokeApiKeysResponse = z.object({ - revoked_count: z.number().int().gte(0) -}) + revoked_count: z.number().int().gte(0) +}); /** * Metadata for a workspace-scoped API key (secret is never returned). */ export const zWorkspaceApiKeyInfo = z.object({ - id: z.string().uuid(), - workspace_id: z.string(), - user_id: z.string(), - name: z.string(), - key_prefix: z.string(), - expires_at: z.string().datetime().optional(), - last_used_at: z.string().datetime().optional(), - revoked_at: z.string().datetime().optional(), - created_at: z.string().datetime() -}) + id: z.string().uuid(), + workspace_id: z.string(), + user_id: z.string(), + name: z.string(), + description: z.string().max(5000), + key_prefix: z.string(), + expires_at: z.string().datetime().optional(), + last_used_at: z.string().datetime().optional(), + revoked_at: z.string().datetime().optional(), + created_at: z.string().datetime() +}); /** * List of API keys associated with the current workspace. */ export const zListWorkspaceApiKeysResponse = z.object({ - api_keys: z.array(zWorkspaceApiKeyInfo) -}) + api_keys: z.array(zWorkspaceApiKeyInfo) +}); /** * Response containing the newly created workspace API key. */ export const zCreateWorkspaceApiKeyResponse = z.object({ - id: z.string().uuid(), - name: z.string(), - key: z.string(), - key_prefix: z.string(), - expires_at: z.string().datetime().optional(), - created_at: z.string().datetime() -}) + id: z.string().uuid(), + name: z.string(), + description: z.string().max(5000), + key: z.string(), + key_prefix: z.string(), + expires_at: z.string().datetime().optional(), + created_at: z.string().datetime() +}); /** * Request body for creating a new workspace-scoped API key. */ export const zCreateWorkspaceApiKeyRequest = z.object({ - name: z.string(), - expires_at: z.string().datetime().optional() -}) + name: z.string(), + description: z.string().max(5000).optional(), + expires_at: z.string().datetime().optional() +}); /** * Response returned after successfully accepting a workspace invitation. */ export const zAcceptInviteResponse = z.object({ - workspace_id: z.string(), - workspace_name: z.string() -}) + workspace_id: z.string(), + workspace_name: z.string() +}); /** * Request body for inviting a user to a workspace. */ export const zCreateInviteRequest = z.object({ - email: z.string().email() -}) + email: z.string().email() +}); /** * An outstanding workspace invitation that has not yet been accepted. */ export const zPendingInvite = z.object({ - id: z.string(), - email: z.string().email(), - token: z.string().optional(), - invited_at: z.string().datetime(), - expires_at: z.string().datetime() -}) + id: z.string(), + email: z.string().email(), + token: z.string().optional(), + invited_at: z.string().datetime(), + expires_at: z.string().datetime() +}); /** * List of pending invitations for the current workspace. */ export const zListInvitesResponse = z.object({ - invites: z.array(zPendingInvite) -}) + invites: z.array(zPendingInvite) +}); /** * Workspace member with profile and role information. */ export const zMember = z.object({ - id: z.string(), - name: z.string(), - email: z.string().email(), - role: z.enum(['owner', 'member']), - joined_at: z.string().datetime() -}) + id: z.string(), + name: z.string(), + email: z.string().email(), + role: z.enum(['owner', 'member']), + joined_at: z.string().datetime() +}); /** * List of members in the current workspace. */ export const zListMembersResponse = z.object({ - members: z.array(zMember), - pagination: zPaginationInfo -}) + members: z.array(zMember), + pagination: zPaginationInfo +}); /** * Request body for updating an existing workspace's settings. */ export const zUpdateWorkspaceRequest = z.object({ - name: z.string().min(1).max(100).optional() -}) + name: z.string().min(1).max(100).optional() +}); /** * Request body for creating a new workspace. */ export const zCreateWorkspaceRequest = z.object({ - name: z.string().min(1).max(100) -}) + name: z.string().min(1).max(100) +}); /** * Workspace entity annotated with the requesting user's role. */ export const zWorkspaceWithRole = z.object({ - id: z.string(), - name: z.string(), - type: z.enum(['personal', 'team']), - role: z.enum(['owner', 'member']), - created_at: z.string().datetime(), - joined_at: z.string().datetime(), - subscription_tier: zSubscriptionTier.optional() -}) + id: z.string(), + name: z.string(), + type: z.enum(['personal', 'team']), + role: z.enum(['owner', 'member']), + created_at: z.string().datetime(), + joined_at: z.string().datetime(), + subscription_tier: zSubscriptionTier.optional() +}); /** * Paginated list of workspaces the authenticated user belongs to. */ export const zListWorkspacesResponse = z.object({ - workspaces: z.array(zWorkspaceWithRole) -}) + workspaces: z.array(zWorkspaceWithRole) +}); /** * Full workspace entity with configuration and ownership details. */ export const zWorkspace = z.object({ - id: z.string(), - name: z.string(), - type: z.enum(['personal', 'team']), - created_at: z.string().datetime() -}) + id: z.string(), + name: z.string(), + type: z.enum(['personal', 'team']), + created_at: z.string().datetime() +}); /** * Abbreviated workspace metadata used in list responses. */ export const zWorkspaceSummary = z.object({ - id: z.string(), - name: z.string(), - type: z.enum(['personal', 'team']) -}) + id: z.string(), + name: z.string(), + type: z.enum(['personal', 'team']) +}); /** * Response containing the issued Cloud JWT and its expiry. */ export const zExchangeTokenResponse = z.object({ - token: z.string(), - expires_at: z.string().datetime(), - workspace: zWorkspaceSummary, - role: z.enum(['owner', 'member']), - permissions: z.array(z.string()) -}) + token: z.string(), + expires_at: z.string().datetime(), + workspace: zWorkspaceSummary, + role: z.enum(['owner', 'member']), + permissions: z.array(z.string()) +}); /** * Optional request body for the token exchange endpoint. The Firebase JWT @@ -1097,587 +1151,527 @@ export const zExchangeTokenResponse = z.object({ * */ export const zExchangeTokenRequest = z.object({ - workspace_id: z.string().optional() -}) + workspace_id: z.string().optional() +}); /** * Full task details including payload and result */ export const zTaskResponse = z.object({ - id: z.string().uuid(), - idempotency_key: z.string(), - task_name: z.string(), - payload: z.record(z.unknown()), - status: z.enum(['created', 'running', 'completed', 'failed']), - result: z.record(z.unknown()).optional(), - error_message: z.string().optional(), - create_time: z.string().datetime(), - update_time: z.string().datetime(), - started_at: z.string().datetime().optional(), - completed_at: z.string().datetime().optional() -}) + id: z.string().uuid(), + idempotency_key: z.string(), + task_name: z.string(), + payload: z.record(z.unknown()), + status: z.enum([ + 'created', + 'running', + 'completed', + 'failed' + ]), + result: z.record(z.unknown()).optional(), + error_message: z.string().optional(), + create_time: z.string().datetime(), + update_time: z.string().datetime(), + started_at: z.string().datetime().optional(), + completed_at: z.string().datetime().optional() +}); /** * Task data for list views */ export const zTaskEntry = z.object({ - id: z.string().uuid(), - task_name: z.string(), - status: z.enum(['created', 'running', 'completed', 'failed']), - create_time: z.string().datetime(), - started_at: z.string().datetime().optional(), - completed_at: z.string().datetime().optional() -}) + id: z.string().uuid(), + task_name: z.string(), + status: z.enum([ + 'created', + 'running', + 'completed', + 'failed' + ]), + create_time: z.string().datetime(), + started_at: z.string().datetime().optional(), + completed_at: z.string().datetime().optional() +}); /** * Paginated list of background tasks for the authenticated user. */ export const zTasksListResponse = z.object({ - tasks: z.array(zTaskEntry), - pagination: zPaginationInfo -}) + tasks: z.array(zTaskEntry), + pagination: zPaginationInfo +}); /** * Current status of a user data deletion request. */ export const zDeletionStatus = z.object({ - status_name: z.string(), - status_details: z.string() -}) + status_name: z.string(), + status_details: z.string() +}); /** * Details of a pending or completed user data deletion request. */ export const zDeletionRequest = z.object({ - id: z.string(), - firebase_id: z.string(), - create_time: z.string().datetime(), - deletion_status: z.array(zDeletionStatus) -}) + id: z.string(), + firebase_id: z.string(), + create_time: z.string().datetime(), + deletion_status: z.array(zDeletionStatus) +}); /** * Detailed execution error information from ComfyUI */ export const zExecutionError = z.object({ - node_id: z.string(), - node_type: z.string(), - exception_message: z.string(), - exception_type: z.string(), - traceback: z.array(z.string()), - current_inputs: z.record(z.unknown()), - current_outputs: z.record(z.unknown()) -}) + node_id: z.string(), + node_type: z.string(), + exception_message: z.string(), + exception_type: z.string(), + traceback: z.array(z.string()), + current_inputs: z.record(z.unknown()), + current_outputs: z.record(z.unknown()) +}); /** * Full job details including workflow and outputs */ export const zJobDetailResponse = z.object({ - id: z.string().uuid(), - status: z.enum([ - 'pending', - 'in_progress', - 'completed', - 'failed', - 'cancelled' - ]), - workflow: z.record(z.unknown()).optional(), - execution_error: zExecutionError.optional(), - create_time: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - update_time: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - outputs: z.record(z.unknown()).optional(), - preview_output: z.record(z.unknown()).optional(), - outputs_count: z.number().int().optional(), - workflow_id: z.string().optional(), - execution_status: z.record(z.unknown()).optional(), - execution_meta: z.record(z.unknown()).optional() -}) + id: z.string().uuid(), + status: z.enum([ + 'pending', + 'in_progress', + 'completed', + 'failed', + 'cancelled' + ]), + workflow: z.record(z.unknown()).optional(), + execution_error: zExecutionError.optional(), + create_time: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + update_time: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + outputs: z.record(z.unknown()).optional(), + preview_output: z.record(z.unknown()).optional(), + outputs_count: z.number().int().optional(), + workflow_id: z.string().optional(), + execution_status: z.record(z.unknown()).optional(), + execution_meta: z.record(z.unknown()).optional() +}); /** * Response for POST /api/jobs/{job_id}/cancel. Returned on both fresh cancels and idempotent no-ops. */ export const zJobCancelResponse = z.object({ - cancelled: z.boolean() -}) + cancelled: z.boolean() +}); /** * Lightweight job data for list views (workflow and full outputs excluded) */ export const zJobEntry = z.object({ - id: z.string().uuid(), - status: z.enum([ - 'pending', - 'in_progress', - 'completed', - 'failed', - 'cancelled' - ]), - execution_error: zExecutionError.optional(), - create_time: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - preview_output: z.record(z.unknown()).optional(), - outputs_count: z.number().int().optional(), - workflow_id: z.string().optional(), - execution_start_time: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional(), - execution_end_time: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional() -}) + id: z.string().uuid(), + status: z.enum([ + 'pending', + 'in_progress', + 'completed', + 'failed', + 'cancelled' + ]), + execution_error: zExecutionError.optional(), + create_time: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + preview_output: z.record(z.unknown()).optional(), + outputs_count: z.number().int().optional(), + workflow_id: z.string().optional(), + execution_start_time: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional(), + execution_end_time: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional() +}); /** * Paginated list of jobs for the authenticated user. */ export const zJobsListResponse = z.object({ - jobs: z.array(zJobEntry), - pagination: zPaginationInfo -}) + jobs: z.array(zJobEntry), + pagination: zPaginationInfo +}); /** * Response after adding, updating, or removing tags on an asset. */ export const zTagsModificationResponse = z.object({ - added: z.array(z.string()).optional(), - removed: z.array(z.string()).optional(), - already_present: z.array(z.string()).optional(), - not_present: z.array(z.string()).optional(), - total_tags: z.array(z.string()) -}) + added: z.array(z.string()).optional(), + removed: z.array(z.string()).optional(), + already_present: z.array(z.string()).optional(), + not_present: z.array(z.string()).optional(), + total_tags: z.array(z.string()) +}); /** * Details of a single validation error encountered during asset operations. */ export const zValidationError = z.object({ - code: z.string(), - message: z.string(), - field: z.string() -}) + code: z.string(), + message: z.string(), + field: z.string() +}); /** * Result of validating a set of asset operations. */ export const zValidationResult = z.object({ - is_valid: z.boolean(), - errors: z.array(zValidationError).optional(), - warnings: z.array(zValidationError).optional() -}) + is_valid: z.boolean(), + errors: z.array(zValidationError).optional(), + warnings: z.array(zValidationError).optional() +}); /** * Acknowledgement of an async asset download task; clients poll GET /api/tasks/{task_id} for status. */ export const zAssetDownloadResponse = z.object({ - task_id: z.string().uuid(), - status: z.enum(['created', 'running', 'completed', 'failed']), - message: z.string().optional() -}) + task_id: z.string().uuid(), + status: z.enum([ + 'created', + 'running', + 'completed', + 'failed' + ]), + message: z.string().optional() +}); /** * Metadata for a remotely hosted asset resolved by URL. */ export const zAssetMetadataResponse = z.object({ - content_length: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - content_type: z.string().optional(), - filename: z.string().optional(), - name: z.string().optional(), - tags: z.array(z.string()).optional(), - preview_image: z.string().optional(), - validation: zValidationResult.optional() -}) + content_length: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + content_type: z.string().optional(), + filename: z.string().optional(), + name: z.string().optional(), + tags: z.array(z.string()).optional(), + preview_image: z.string().optional(), + validation: zValidationResult.optional() +}); /** * Histogram of tag counts used for refining asset search results. */ export const zAssetTagHistogramResponse = z.object({ - tag_counts: z.record(z.number().int()) -}) + tag_counts: z.record(z.number().int()) +}); /** * Metadata for a single tag that can be applied to assets. */ export const zTagInfo = z.object({ - name: z.string(), - count: z.number().int() -}) + name: z.string(), + count: z.number().int() +}); /** * Paginated list of available asset tags. */ export const zListTagsResponse = z.object({ - tags: z.array(zTagInfo), - total: z.number().int(), - has_more: z.boolean() -}) + tags: z.array(zTagInfo), + total: z.number().int(), + has_more: z.boolean() +}); /** * Represents a user-owned asset (image, video, or other generated output). */ export const zAsset = z.object({ - id: z.string().uuid(), - name: z.string(), - asset_hash: z - .string() - .regex(/^blake3:[a-f0-9]{64}$/) - .optional(), - size: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - mime_type: z.string().optional(), - tags: z.array(z.string()).optional(), - user_metadata: z.record(z.unknown()).optional(), - metadata: z.record(z.unknown()).readonly().optional(), - preview_url: z.string().url().optional(), - preview_id: z.string().uuid().nullish(), - prompt_id: z.string().uuid().nullish(), - job_id: z.string().uuid().nullish(), - created_at: z.string().datetime(), - updated_at: z.string().datetime(), - last_access_time: z.string().datetime().optional(), - is_immutable: z.boolean().optional() -}) + id: z.string().uuid(), + name: z.string(), + display_name: z.string().nullish(), + asset_hash: z.string().regex(/^blake3:[a-f0-9]{64}$/).optional(), + size: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + mime_type: z.string().optional(), + tags: z.array(z.string()).optional(), + user_metadata: z.record(z.unknown()).optional(), + metadata: z.record(z.unknown()).readonly().optional(), + preview_url: z.string().url().optional(), + preview_id: z.string().uuid().nullish(), + prompt_id: z.string().uuid().nullish(), + job_id: z.string().uuid().nullish(), + created_at: z.string().datetime(), + updated_at: z.string().datetime(), + last_access_time: z.string().datetime().optional(), + is_immutable: z.boolean().optional() +}); /** * Paginated list of assets belonging to the authenticated user. */ export const zListAssetsResponse = z.object({ - assets: z.array(zAsset), - total: z.number().int(), - has_more: z.boolean() -}) + assets: z.array(zAsset), + total: z.number().int(), + has_more: z.boolean(), + next_cursor: z.string().optional() +}); /** * Response returned when an existing asset is successfully updated. */ export const zAssetUpdated = z.object({ - id: z.string().uuid(), - name: z.string().optional(), - asset_hash: z - .string() - .regex(/^blake3:[a-f0-9]{64}$/) - .optional(), - tags: z.array(z.string()).optional(), - mime_type: z.string().optional(), - user_metadata: z.record(z.unknown()).optional(), - updated_at: z.string().datetime() -}) + id: z.string().uuid(), + name: z.string().optional(), + display_name: z.string().nullish(), + asset_hash: z.string().regex(/^blake3:[a-f0-9]{64}$/).optional(), + tags: z.array(z.string()).optional(), + mime_type: z.string().optional(), + user_metadata: z.record(z.unknown()).optional(), + updated_at: z.string().datetime() +}); /** * Response returned when a new asset is successfully created. */ -export const zAssetCreated = zAsset.and( - z.object({ +export const zAssetCreated = zAsset.and(z.object({ created_new: z.boolean() - }) -) +})); /** * Response after updating the review status of a Hub workflow. */ export const zSetReviewStatusResponse = z.object({ - share_ids: z.array(z.string()), - status: z.enum(['approved', 'rejected']) -}) + share_ids: z.array(z.string()), + status: z.enum(['approved', 'rejected']) +}); /** * Request body for setting the review status of a Hub workflow. */ export const zSetReviewStatusRequest = z.object({ - share_ids: z.array(z.string()).min(1), - status: z.enum(['approved', 'rejected']) -}) + share_ids: z.array(z.string()).min(1), + status: z.enum(['approved', 'rejected']) +}); /** * Response after deleting a session cookie */ export const zDeleteSessionResponse = z.object({ - success: z.boolean() -}) + success: z.boolean() +}); /** * Response after creating a session cookie */ export const zCreateSessionResponse = z.object({ - success: z.boolean(), - expiresIn: z.number().int().optional() -}) + success: z.boolean(), + expiresIn: z.number().int().optional() +}); /** * User information response */ export const zUserResponse = z.object({ - id: z.string(), - status: z.string() -}) + id: z.string(), + status: z.string() +}); /** * System statistics response */ export const zSystemStatsResponse = z.object({ - system: z.object({ - os: z.string(), - python_version: z.string(), - embedded_python: z.boolean(), - comfyui_version: z.string(), - comfyui_frontend_version: z.string().optional(), - workflow_templates_version: z.string().optional(), - cloud_version: z.string().optional(), - pytorch_version: z.string(), - argv: z.array(z.string()), - ram_total: z.number(), - ram_free: z.number() - }), - devices: z.array( - z.object({ - name: z.string(), - type: z.string(), - vram_total: z.number().optional(), - vram_free: z.number().optional() - }) - ) -}) + system: z.object({ + os: z.string(), + python_version: z.string(), + embedded_python: z.boolean(), + comfyui_version: z.string(), + comfyui_frontend_version: z.string().optional(), + workflow_templates_version: z.string().optional(), + cloud_version: z.string().optional(), + pytorch_version: z.string(), + argv: z.array(z.string()), + ram_total: z.number(), + ram_free: z.number() + }), + devices: z.array(z.object({ + name: z.string(), + type: z.string(), + vram_total: z.number().optional(), + vram_free: z.number().optional() + })) +}); /** * System logs response */ -export const zLogsResponse = z.array( - z.object({ +export const zLogsResponse = z.array(z.object({ timestamp: z.string().datetime().optional(), - level: z.enum(['debug', 'info', 'warn', 'error']).optional(), + level: z.enum([ + 'debug', + 'info', + 'warn', + 'error' + ]).optional(), message: z.string().optional(), source: z.string().optional(), metadata: z.record(z.unknown()).optional() - }) -) +})); /** * Response after submitting feedback */ -export const zFeedbackResponse = z.record(z.unknown()) +export const zFeedbackResponse = z.record(z.unknown()); /** * Request to submit user feedback */ export const zFeedbackRequest = z.object({ - type: z.enum(['missing_nodes', 'general', 'missing_models']), - content: z.string().optional(), - rating: z.number().int().gte(1).lte(5).optional(), - metadata: z.record(z.unknown()).optional() -}) + type: z.enum([ + 'missing_nodes', + 'general', + 'missing_models' + ]), + content: z.string().optional(), + rating: z.number().int().gte(1).lte(5).optional(), + metadata: z.record(z.unknown()).optional() +}); /** * Represents a model file with metadata */ export const zModelFile = z.object({ - name: z.string(), - pathIndex: z.number().int() -}) + name: z.string(), + pathIndex: z.number().int() +}); /** * Represents a folder containing models */ export const zModelFolder = z.object({ - name: z.string(), - folders: z.array(z.string()) -}) + name: z.string(), + folders: z.array(z.string()) +}); /** * Error response for ComfyUI prompt execution. */ -export const zPromptErrorResponse = z.record(z.unknown()) +export const zPromptErrorResponse = z.record(z.unknown()); /** * Individual file entry within a full user data response. */ export const zGetUserDataResponseFullFile = z.object({ - path: z.string().optional(), - size: z.number().int().optional(), - modified: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional() -}) + path: z.string().optional(), + size: z.number().int().optional(), + modified: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional() +}); /** * List of user data file entries (each with path, size, and modification time) returned when full_info=true. */ -export const zGetUserDataResponseFull = z.array(zGetUserDataResponseFullFile) +export const zGetUserDataResponseFull = z.array(zGetUserDataResponseFullFile); /** * User data listing entry with file metadata (path, size, modification time). */ export const zUserDataResponseFull = z.object({ - path: z.string().optional(), - size: z.number().int().optional(), - modified: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional() -}) + path: z.string().optional(), + size: z.number().int().optional(), + modified: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional() +}); /** * Request to manage history operations */ export const zHistoryManageRequest = z.object({ - delete: z.array(z.string()).optional(), - clear: z.boolean().optional() -}) + delete: z.array(z.string()).optional(), + clear: z.boolean().optional() +}); /** * Job status information */ export const zJobStatusResponse = z.object({ - id: z.string().uuid(), - status: z.enum([ - 'waiting_to_dispatch', - 'pending', - 'in_progress', - 'completed', - 'error', - 'cancelled' - ]), - created_at: z.string().datetime(), - updated_at: z.string().datetime(), - last_state_update: z.string().datetime().optional(), - assigned_inference: z.string().nullish(), - error_message: z.string().nullish() -}) + id: z.string().uuid(), + status: z.enum([ + 'waiting_to_dispatch', + 'pending', + 'in_progress', + 'completed', + 'error', + 'cancelled' + ]), + created_at: z.string().datetime(), + updated_at: z.string().datetime(), + last_state_update: z.string().datetime().optional(), + assigned_inference: z.string().nullish(), + error_message: z.string().nullish() +}); /** * Response after a queue management action (delete or clear). */ export const zQueueManageResponse = z.object({ - deleted: z.array(z.string()).optional(), - cleared: z.boolean().optional() -}) + deleted: z.array(z.string()).optional(), + cleared: z.boolean().optional() +}); /** * Request to manage queue operations */ export const zQueueManageRequest = z.object({ - delete: z.array(z.string()).optional(), - clear: z.boolean().optional() -}) + delete: z.array(z.string()).optional(), + clear: z.boolean().optional() +}); /** * Queue information with pending and running jobs */ export const zQueueInfo = z.object({ - queue_running: z - .array( - z.tuple([z.unknown(), z.unknown(), z.unknown(), z.unknown(), z.unknown()]) - ) - .optional(), - queue_pending: z - .array( - z.tuple([z.unknown(), z.unknown(), z.unknown(), z.unknown(), z.unknown()]) - ) - .optional() -}) + queue_running: z.array(z.tuple([ + z.unknown(), + z.unknown(), + z.unknown(), + z.unknown(), + z.unknown() + ])).optional(), + queue_pending: z.array(z.tuple([ + z.unknown(), + z.unknown(), + z.unknown(), + z.unknown(), + z.unknown() + ])).optional() +}); /** * History entry with full prompt data */ export const zHistoryDetailEntry = z.object({ - prompt: z - .object({ - priority: z.number().optional(), - prompt_id: z.string().optional(), - prompt: z.record(z.unknown()).optional(), - extra_data: z.record(z.unknown()).optional(), - outputs_to_execute: z.array(z.string()).optional() - }) - .optional(), - outputs: z.record(z.unknown()).optional(), - status: z.record(z.unknown()).optional(), - meta: z.record(z.unknown()).optional() -}) + prompt: z.object({ + priority: z.number().optional(), + prompt_id: z.string().optional(), + prompt: z.record(z.unknown()).optional(), + extra_data: z.record(z.unknown()).optional(), + outputs_to_execute: z.array(z.string()).optional() + }).optional(), + outputs: z.record(z.unknown()).optional(), + status: z.record(z.unknown()).optional(), + meta: z.record(z.unknown()).optional() +}); /** * Detailed execution history response for a specific prompt. * Returns a dictionary with prompt_id as key and full history data as value. * */ -export const zHistoryDetailResponse = z.record(zHistoryDetailEntry) +export const zHistoryDetailResponse = z.record(zHistoryDetailEntry); /** * History entry with prompt_id and execution data */ export const zHistoryEntry = z.object({ - prompt_id: z.string(), - create_time: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }) - .optional(), - workflow_id: z.string().optional(), - prompt: z - .object({ - priority: z.number().optional(), - prompt_id: z.string().optional(), - extra_data: z.record(z.unknown()).optional() - }) - .optional(), - outputs: z.record(z.unknown()).optional(), - status: z.record(z.unknown()).optional(), - meta: z.record(z.unknown()).optional() -}) + prompt_id: z.string(), + create_time: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional(), + workflow_id: z.string().optional(), + prompt: z.object({ + priority: z.number().optional(), + prompt_id: z.string().optional(), + extra_data: z.record(z.unknown()).optional() + }).optional(), + outputs: z.record(z.unknown()).optional(), + status: z.record(z.unknown()).optional(), + meta: z.record(z.unknown()).optional() +}); /** * Execution history response with history array. @@ -1686,2149 +1680,2200 @@ export const zHistoryEntry = z.object({ * */ export const zHistoryResponse = z.object({ - history: z.array(zHistoryEntry) -}) + history: z.array(zHistoryEntry) +}); /** * Full data for a global subgraph blueprint */ export const zGlobalSubgraphData = z.object({ - source: z.string(), - name: z.string(), - info: z.object({ - node_pack: z.string() - }), - data: z.string() -}) + source: z.string(), + name: z.string(), + info: z.object({ + node_pack: z.string() + }), + data: z.string() +}); /** * Metadata for a global subgraph blueprint (without full data) */ export const zGlobalSubgraphInfo = z.object({ - source: z.string(), - name: z.string(), - info: z.object({ - node_pack: z.string() - }), - data: z.string().optional() -}) + source: z.string(), + name: z.string(), + info: z.object({ + node_pack: z.string() + }), + data: z.string().optional() +}); /** * Metadata describing a single ComfyUI node type and its inputs/outputs. */ export const zNodeInfo = z.object({ - input: z.record(z.unknown()).optional(), - input_order: z.record(z.array(z.string())).optional(), - output: z.array(z.string()).optional(), - output_is_list: z.array(z.boolean()).optional(), - output_name: z.array(z.string()).optional(), - name: z.string().optional(), - display_name: z.string().optional(), - description: z.string().optional(), - python_module: z.string().optional(), - category: z.string().optional(), - output_node: z.boolean().optional(), - output_tooltips: z.array(z.string()).optional(), - deprecated: z.boolean().optional(), - experimental: z.boolean().optional(), - api_node: z.boolean().optional() -}) + input: z.record(z.unknown()).optional(), + input_order: z.record(z.array(z.string())).optional(), + output: z.array(z.string()).optional(), + output_is_list: z.array(z.boolean()).optional(), + output_name: z.array(z.string()).optional(), + name: z.string().optional(), + display_name: z.string().optional(), + description: z.string().optional(), + python_module: z.string().optional(), + category: z.string().optional(), + output_node: z.boolean().optional(), + output_tooltips: z.array(z.string()).optional(), + deprecated: z.boolean().optional(), + experimental: z.boolean().optional(), + api_node: z.boolean().optional() +}); /** * Metadata about the currently running and queued prompts. */ export const zPromptInfo = z.object({ - exec_info: z - .object({ - queue_remaining: z.number().int().optional() - }) - .optional() -}) + exec_info: z.object({ + queue_remaining: z.number().int().optional() + }).optional() +}); /** * Response containing a signed download URL for an exported asset archive. */ export const zExportDownloadUrlResponse = z.object({ - url: z.string(), - expires_at: z.string().datetime().optional() -}) - -/** - * Error shape returned when request binding or validation fails before the handler runs. - */ -export const zBindingErrorResponse = z.object({ - message: z.string() -}) + url: z.string(), + expires_at: z.string().datetime().optional() +}); /** * Standard error response with a machine-readable code and human-readable message. */ export const zErrorResponse = z.object({ - code: z.string(), - message: z.string() -}) + code: z.string(), + message: z.string() +}); /** * Response returned after successfully queuing a workflow prompt. */ export const zPromptResponse = z.object({ - prompt_id: z.string().uuid().optional(), - number: z.number().optional(), - node_errors: z.record(z.unknown()).optional() -}) + prompt_id: z.string().uuid().optional(), + number: z.number().optional(), + node_errors: z.record(z.unknown()).optional() +}); /** * Request body for submitting a ComfyUI workflow prompt for execution. */ export const zPromptRequest = z.object({ - prompt: z.record(z.unknown()), - number: z.number().optional(), - front: z.boolean().optional(), - extra_data: z.record(z.unknown()).optional(), - partial_execution_targets: z.array(z.string()).optional(), - workflow_id: z.string().optional(), - workflow_version_id: z.string().optional() -}) + prompt: z.record(z.unknown()), + number: z.number().optional(), + front: z.boolean().optional(), + extra_data: z.record(z.unknown()).optional(), + partial_execution_targets: z.array(z.string()).optional(), + workflow_id: z.string().optional(), + workflow_version_id: z.string().optional() +}); /** * Represents a user-owned asset (image, video, or other generated output). */ export const zAssetWritable = z.object({ - id: z.string().uuid(), - name: z.string(), - asset_hash: z - .string() - .regex(/^blake3:[a-f0-9]{64}$/) - .optional(), - size: z.coerce - .bigint() - .min(BigInt('-9223372036854775808'), { - message: 'Invalid value: Expected int64 to be >= -9223372036854775808' - }) - .max(BigInt('9223372036854775807'), { - message: 'Invalid value: Expected int64 to be <= 9223372036854775807' - }), - mime_type: z.string().optional(), - tags: z.array(z.string()).optional(), - user_metadata: z.record(z.unknown()).optional(), - preview_url: z.string().url().optional(), - preview_id: z.string().uuid().nullish(), - prompt_id: z.string().uuid().nullish(), - job_id: z.string().uuid().nullish(), - created_at: z.string().datetime(), - updated_at: z.string().datetime(), - last_access_time: z.string().datetime().optional(), - is_immutable: z.boolean().optional() -}) + id: z.string().uuid(), + name: z.string(), + display_name: z.string().nullish(), + asset_hash: z.string().regex(/^blake3:[a-f0-9]{64}$/).optional(), + size: z.coerce.bigint().min(BigInt('-9223372036854775808'), { message: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { message: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + mime_type: z.string().optional(), + tags: z.array(z.string()).optional(), + user_metadata: z.record(z.unknown()).optional(), + preview_url: z.string().url().optional(), + preview_id: z.string().uuid().nullish(), + prompt_id: z.string().uuid().nullish(), + job_id: z.string().uuid().nullish(), + created_at: z.string().datetime(), + updated_at: z.string().datetime(), + last_access_time: z.string().datetime().optional(), + is_immutable: z.boolean().optional() +}); /** * Paginated list of assets belonging to the authenticated user. */ export const zListAssetsResponseWritable = z.object({ - assets: z.array(zAssetWritable), - total: z.number().int(), - has_more: z.boolean() -}) + assets: z.array(zAssetWritable), + total: z.number().int(), + has_more: z.boolean(), + next_cursor: z.string().optional() +}); /** * Response returned when a new asset is successfully created. */ -export const zAssetCreatedWritable = zAssetWritable.and( - z.object({ +export const zAssetCreatedWritable = zAssetWritable.and(z.object({ created_new: z.boolean() - }) -) +})); /** * Response after submitting feedback */ -export const zFeedbackResponseWritable = z.record(z.unknown()) +export const zFeedbackResponseWritable = z.record(z.unknown()); export const zGetPromptInfoData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetPromptInfoResponse = zPromptInfo +export const zGetPromptInfoResponse = zPromptInfo; export const zExecutePromptData = z.object({ - body: zPromptRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zPromptRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Success - Prompt accepted */ -export const zExecutePromptResponse = zPromptResponse +export const zExecutePromptResponse = zPromptResponse; export const zGetNodeInfoData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetNodeInfoResponse = z.record(zNodeInfo) +export const zGetNodeInfoResponse = z.record(zNodeInfo); export const zGetFeaturesData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ export const zGetFeaturesResponse = z.object({ - supports_preview_metadata: z.boolean().optional(), - max_upload_size: z.number().int().optional() -}) + supports_preview_metadata: z.boolean().optional(), + max_upload_size: z.number().int().optional() +}); export const zGetNodeReplacementsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success - Node replacement mappings */ -export const zGetNodeReplacementsResponse = z.record(z.unknown()) +export const zGetNodeReplacementsResponse = z.record(z.unknown()); export const zGetWorkflowTemplatesData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Empty object for workflow templates */ -export const zGetWorkflowTemplatesResponse = z.record(z.unknown()) +export const zGetWorkflowTemplatesResponse = z.record(z.unknown()); export const zGetGlobalSubgraphsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success - Map of subgraph IDs to their metadata */ -export const zGetGlobalSubgraphsResponse = z.record(zGlobalSubgraphInfo) +export const zGetGlobalSubgraphsResponse = z.record(zGlobalSubgraphInfo); export const zGetGlobalSubgraphData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Success - Full subgraph data */ -export const zGetGlobalSubgraphResponse = zGlobalSubgraphData +export const zGetGlobalSubgraphResponse = zGlobalSubgraphData; export const zGetModelFoldersData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success - List of model folders */ -export const zGetModelFoldersResponse = z.array(zModelFolder) +export const zGetModelFoldersResponse = z.array(zModelFolder); export const zGetModelsInFolderData = z.object({ - body: z.never().optional(), - path: z.object({ - folder: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + folder: z.string() + }), + query: z.never().optional() +}); /** * Success - List of models in the folder */ -export const zGetModelsInFolderResponse = z.array(zModelFile) +export const zGetModelsInFolderResponse = z.array(zModelFile); export const zGetModelPreviewData = z.object({ - body: z.never().optional(), - path: z.object({ - folder: z.string(), - path_index: z.number().int(), - filename: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + folder: z.string(), + path_index: z.number().int(), + filename: z.string() + }), + query: z.never().optional() +}); /** * Success - Model preview image */ -export const zGetModelPreviewResponse = z.string() +export const zGetModelPreviewResponse = z.string(); export const zGetLegacyHistoryData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zManageHistoryData = z.object({ - body: zHistoryManageRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zHistoryManageRequest, + path: z.never().optional(), + query: z.never().optional() +}); export const zGetHistoryData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - max_items: z.number().int().optional(), - offset: z.number().int().optional().default(0) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + max_items: z.number().int().optional(), + offset: z.number().int().optional().default(0) + }).optional() +}); /** * Success - Execution history retrieved */ -export const zGetHistoryResponse = zHistoryResponse +export const zGetHistoryResponse = zHistoryResponse; export const zGetHistoryForPromptData = z.object({ - body: z.never().optional(), - path: z.object({ - prompt_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + prompt_id: z.string() + }), + query: z.never().optional() +}); /** * Success - History for prompt retrieved */ -export const zGetHistoryForPromptResponse = zHistoryDetailResponse +export const zGetHistoryForPromptResponse = zHistoryDetailResponse; export const zListJobsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - status: z.string().optional(), - workflow_id: z.string().optional(), - output_type: z.enum(['image', 'video', 'audio', '3d']).optional(), - sort_by: z.enum(['create_time', 'execution_time']).optional(), - sort_order: z.enum(['asc', 'desc']).optional(), - offset: z.number().int().gte(0).optional().default(0), - limit: z.number().int().gte(1).lte(1000).optional().default(100) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + status: z.string().optional(), + workflow_id: z.string().optional(), + output_type: z.enum([ + 'image', + 'video', + 'audio', + '3d' + ]).optional(), + sort_by: z.enum(['create_time', 'execution_time']).optional(), + sort_order: z.enum(['asc', 'desc']).optional(), + offset: z.number().int().gte(0).optional().default(0), + limit: z.number().int().gte(1).lte(1000).optional().default(100) + }).optional() +}); /** * Success - Jobs retrieved */ -export const zListJobsResponse = zJobsListResponse +export const zListJobsResponse = zJobsListResponse; export const zGetJobDetailData = z.object({ - body: z.never().optional(), - path: z.object({ - job_id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + job_id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Success - Job details retrieved */ -export const zGetJobDetailResponse = zJobDetailResponse +export const zGetJobDetailResponse = zJobDetailResponse; export const zCancelJobData = z.object({ - body: z.never().optional(), - path: z.object({ - job_id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + job_id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Success - Cancel request accepted (or job was already terminal) */ -export const zCancelJobResponse = zJobCancelResponse +export const zCancelJobResponse = zJobCancelResponse; export const zViewFileData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string(), - subfolder: z.string().optional(), - type: z.string().optional(), - fullpath: z.string().optional(), - format: z.string().optional(), - frame_rate: z.number().int().optional(), - workflow: z.string().optional(), - timestamp: z.number().int().optional(), - channel: z.string().optional(), - res: z.number().int().gte(64).lte(1024).optional() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string(), + subfolder: z.string().optional(), + type: z.string().optional(), + fullpath: z.string().optional(), + format: z.string().optional(), + frame_rate: z.number().int().optional(), + workflow: z.string().optional(), + timestamp: z.number().int().optional(), + channel: z.string().optional(), + res: z.number().int().gte(64).lte(1024).optional() + }) +}); /** * Processed PNG image with extracted channel */ -export const zViewFileResponse = z.string() +export const zViewFileResponse = z.string(); export const zGetMaskLayersData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string() + }) +}); /** * Success - Related mask layers returned */ export const zGetMaskLayersResponse = z.object({ - mask: z.string().nullish(), - paint: z.string().nullish(), - painted: z.string().nullish(), - painted_masked: z.string().nullish() -}) + mask: z.string().nullish(), + paint: z.string().nullish(), + painted: z.string().nullish(), + painted_masked: z.string().nullish() +}); export const zGetFilesData = z.object({ - body: z.never().optional(), - path: z.object({ - directory_type: z.enum(['output', 'input', 'temp']) - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + directory_type: z.enum([ + 'output', + 'input', + 'temp' + ]) + }), + query: z.never().optional() +}); /** * Array of file names sorted by modification time (newest first) */ -export const zGetFilesResponse = z.array(z.string()) +export const zGetFilesResponse = z.array(z.string()); export const zListAssetsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - include_tags: z.array(z.string()).optional(), - exclude_tags: z.array(z.string()).optional(), - name_contains: z.string().optional(), - metadata_filter: z.string().optional(), - limit: z.number().int().gte(1).lte(500).optional().default(20), - offset: z.number().int().gte(0).optional().default(0), - sort: z - .enum(['name', 'created_at', 'updated_at', 'size', 'last_access_time']) - .optional(), - order: z.enum(['asc', 'desc']).optional(), - job_ids: z.array(z.string().uuid()).optional(), - include_public: z.boolean().optional().default(true), - asset_hash: z.string().optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + include_tags: z.array(z.string()).optional(), + exclude_tags: z.array(z.string()).optional(), + name_contains: z.string().optional(), + metadata_filter: z.string().optional(), + limit: z.number().int().gte(1).lte(500).optional().default(20), + offset: z.number().int().gte(0).optional().default(0), + sort: z.enum([ + 'name', + 'created_at', + 'updated_at', + 'size', + 'last_access_time' + ]).optional(), + order: z.enum(['asc', 'desc']).optional(), + include_public: z.boolean().optional().default(true), + asset_hash: z.string().optional(), + after: z.string().optional() + }).optional() +}); /** * Success - Assets returned */ -export const zListAssetsResponse2 = zListAssetsResponse +export const zListAssetsResponse2 = zListAssetsResponse; export const zUploadAssetData = z.object({ - body: z.object({ - url: z.string().url(), - name: z.string(), - tags: z.array(z.string()).optional(), - user_metadata: z.record(z.unknown()).optional(), - preview_id: z.string().uuid().optional() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + url: z.string().url(), + name: z.string(), + tags: z.array(z.string()).optional(), + user_metadata: z.record(z.unknown()).optional(), + preview_id: z.string().uuid().optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Asset already exists (returned existing asset) */ -export const zUploadAssetResponse = zAssetCreated +export const zUploadAssetResponse = zAssetCreated; export const zCreateAssetFromHashData = z.object({ - body: z.object({ - hash: z.string().regex(/^(blake3|sha256):[a-f0-9]{64}$/), - name: z.string().optional(), - tags: z.array(z.string()).min(1), - mime_type: z.string().optional(), - user_metadata: z.record(z.unknown()).optional() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + hash: z.string().regex(/^(blake3|sha256):[a-f0-9]{64}$/), + name: z.string().optional(), + tags: z.array(z.string()).min(1), + mime_type: z.string().optional(), + user_metadata: z.record(z.unknown()).optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Asset reference already exists (returned existing) */ -export const zCreateAssetFromHashResponse = zAssetCreated +export const zCreateAssetFromHashResponse = zAssetCreated; export const zGetRemoteAssetMetadataData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - url: z.string().url() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + url: z.string().url() + }) +}); /** * Metadata retrieved successfully */ -export const zGetRemoteAssetMetadataResponse = zAssetMetadataResponse +export const zGetRemoteAssetMetadataResponse = zAssetMetadataResponse; export const zCreateAssetDownloadData = z.object({ - body: z.object({ - source_url: z.string().url(), - tags: z.array(z.string()).optional(), - user_metadata: z.record(z.unknown()).optional(), - preview_id: z.string().uuid().optional() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + source_url: z.string().url(), + tags: z.array(z.string()).optional(), + user_metadata: z.record(z.unknown()).optional(), + preview_id: z.string().uuid().optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); export const zCreateAssetDownloadResponse = z.union([ - zAssetCreated, - zAssetDownloadResponse -]) + zAssetCreated, + zAssetDownloadResponse +]); export const zCreateAssetExportData = z.object({ - body: z.object({ - job_ids: z.array(z.string()).optional(), - asset_ids: z.array(z.string()).optional(), - naming_strategy: z - .enum(['group_by_job_id', 'preserve', 'asset_id', 'group_by_job_time']) - .optional(), - job_asset_name_filters: z.record(z.array(z.string()).min(1)).optional() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + job_ids: z.array(z.string()).optional(), + asset_ids: z.array(z.string()).optional(), + naming_strategy: z.enum([ + 'group_by_job_id', + 'preserve', + 'asset_id', + 'group_by_job_time' + ]).optional(), + job_asset_name_filters: z.record(z.array(z.string()).min(1)).optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Accepted - Export task created and processing in background */ -export const zCreateAssetExportResponse = zAssetDownloadResponse +export const zCreateAssetExportResponse = zAssetDownloadResponse; export const zDownloadExportData = z.object({ - body: z.never().optional(), - path: z.object({ - exportName: z.string().regex(/^[a-zA-Z0-9_-]+\.zip$/) - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + exportName: z.string().regex(/^[a-zA-Z0-9_-]+\.zip$/) + }), + query: z.never().optional() +}); /** * Signed URL for downloading the export */ -export const zDownloadExportResponse = zExportDownloadUrlResponse +export const zDownloadExportResponse = zExportDownloadUrlResponse; export const zDeleteAssetData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Asset deleted successfully */ -export const zDeleteAssetResponse = z.void() +export const zDeleteAssetResponse = z.void(); export const zGetAssetByIdData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Asset details retrieved successfully */ -export const zGetAssetByIdResponse = zAsset +export const zGetAssetByIdResponse = zAsset; export const zUpdateAssetData = z.object({ - body: z.object({ - name: z.string().optional(), - mime_type: z.string().optional(), - preview_id: z.string().uuid().optional(), - user_metadata: z.record(z.unknown()).optional() - }), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.object({ + name: z.string().optional(), + mime_type: z.string().optional(), + preview_id: z.string().uuid().optional(), + user_metadata: z.record(z.unknown()).optional() + }), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Asset updated successfully */ -export const zUpdateAssetResponse = zAssetUpdated +export const zUpdateAssetResponse = zAssetUpdated; export const zRemoveAssetTagsData = z.object({ - body: z.object({ - tags: z.array(z.string()).min(1) - }), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.object({ + tags: z.array(z.string()).min(1) + }), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Tags removed successfully */ -export const zRemoveAssetTagsResponse = zTagsModificationResponse +export const zRemoveAssetTagsResponse = zTagsModificationResponse; export const zAddAssetTagsData = z.object({ - body: z.object({ - tags: z.array(z.string()).min(1) - }), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.object({ + tags: z.array(z.string()).min(1) + }), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Tags added successfully */ -export const zAddAssetTagsResponse = zTagsModificationResponse +export const zAddAssetTagsResponse = zTagsModificationResponse; export const zUpdateAssetTagsData = z.object({ - body: z.object({ - add: z.array(z.string()).optional(), - remove: z.array(z.string()).optional() - }), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.object({ + add: z.array(z.string()).optional(), + remove: z.array(z.string()).optional() + }), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Tags updated successfully */ -export const zUpdateAssetTagsResponse = zTagsModificationResponse +export const zUpdateAssetTagsResponse = zTagsModificationResponse; export const zListTagsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - prefix: z.string().optional(), - limit: z.number().int().gte(1).lte(1000).optional().default(100), - offset: z.number().int().gte(0).optional().default(0), - order: z.enum(['count_desc', 'name_asc']).optional(), - include_zero: z.boolean().optional().default(false), - include_public: z.boolean().optional().default(true) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + prefix: z.string().optional(), + limit: z.number().int().gte(1).lte(1000).optional().default(100), + offset: z.number().int().gte(0).optional().default(0), + order: z.enum(['count_desc', 'name_asc']).optional(), + include_zero: z.boolean().optional().default(false), + include_public: z.boolean().optional().default(true) + }).optional() +}); /** * Tags retrieved successfully */ -export const zListTagsResponse2 = zListTagsResponse +export const zListTagsResponse2 = zListTagsResponse; export const zGetAssetTagHistogramData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - include_tags: z.array(z.string()).optional(), - exclude_tags: z.array(z.string()).optional(), - name_contains: z.string().optional(), - metadata_filter: z.string().optional(), - limit: z.number().int().gte(1).lte(1000).optional().default(100), - include_public: z.boolean().optional().default(true) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + include_tags: z.array(z.string()).optional(), + exclude_tags: z.array(z.string()).optional(), + name_contains: z.string().optional(), + metadata_filter: z.string().optional(), + limit: z.number().int().gte(1).lte(1000).optional().default(100), + include_public: z.boolean().optional().default(true) + }).optional() +}); /** * Success - Tag histogram returned */ -export const zGetAssetTagHistogramResponse = zAssetTagHistogramResponse +export const zGetAssetTagHistogramResponse = zAssetTagHistogramResponse; export const zCheckAssetByHashData = z.object({ - body: z.never().optional(), - path: z.object({ - hash: z.string().regex(/^blake3:[a-f0-9]{64}$/) - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + hash: z.string().regex(/^blake3:[a-f0-9]{64}$/) + }), + query: z.never().optional() +}); export const zPostAssetsFromWorkflowData = z.object({ - body: zWorkflowApiAssetsRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zWorkflowApiAssetsRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zPostAssetsFromWorkflowResponse = zWorkflowApiAssetsResponse +export const zPostAssetsFromWorkflowResponse = zWorkflowApiAssetsResponse; export const zImportPublishedAssetsData = z.object({ - body: zImportPublishedAssetsRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zImportPublishedAssetsRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Successfully imported assets */ -export const zImportPublishedAssetsResponse2 = zImportPublishedAssetsResponse +export const zImportPublishedAssetsResponse2 = zImportPublishedAssetsResponse; export const zGetQueueInfoData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetQueueInfoResponse = zQueueInfo +export const zGetQueueInfoResponse = zQueueInfo; export const zManageQueueData = z.object({ - body: zQueueManageRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zQueueManageRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zManageQueueResponse = zQueueManageResponse +export const zManageQueueResponse = zQueueManageResponse; export const zInterruptJobData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zListSecretsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zListSecretsResponse = zSecretListResponse +export const zListSecretsResponse = zSecretListResponse; export const zCreateSecretData = z.object({ - body: zCreateSecretRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateSecretRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Secret created successfully */ -export const zCreateSecretResponse = zSecretResponse +export const zCreateSecretResponse = zSecretResponse; export const zDeleteSecretData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Secret deleted successfully */ -export const zDeleteSecretResponse = z.void() +export const zDeleteSecretResponse = z.void(); export const zGetSecretData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Success */ -export const zGetSecretResponse = zSecretResponse +export const zGetSecretResponse = zSecretResponse; export const zUpdateSecretData = z.object({ - body: zUpdateSecretRequest, - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: zUpdateSecretRequest, + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Secret updated successfully */ -export const zUpdateSecretResponse = zSecretResponse +export const zUpdateSecretResponse = zSecretResponse; export const zGetAllSettingsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * User settings as key-value pairs */ -export const zGetAllSettingsResponse = z.record(z.unknown()) +export const zGetAllSettingsResponse = z.record(z.unknown()); export const zUpdateMultipleSettingsData = z.object({ - body: z.record(z.unknown()), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.record(z.unknown()), + path: z.never().optional(), + query: z.never().optional() +}); /** * Updated user settings */ -export const zUpdateMultipleSettingsResponse = z.record(z.unknown()) +export const zUpdateMultipleSettingsResponse = z.record(z.unknown()); -export const zGetSettingByKeyData = z.object({ - body: z.never().optional(), - path: z.object({ - key: z.string() - }), - query: z.never().optional() -}) +export const zGetSettingByIdData = z.object({ + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Setting value response */ -export const zGetSettingByKeyResponse = z.object({ - value: z.unknown().optional() -}) +export const zGetSettingByIdResponse = z.object({ + value: z.unknown().optional() +}); -export const zUpdateSettingByKeyData = z.object({ - body: z.unknown(), - path: z.object({ - key: z.string() - }), - query: z.never().optional() -}) +export const zUpdateSettingByIdData = z.object({ + body: z.unknown(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Updated setting value response */ -export const zUpdateSettingByKeyResponse = z.object({ - value: z.unknown().optional() -}) +export const zUpdateSettingByIdResponse = z.object({ + value: z.unknown().optional() +}); export const zSubmitFeedbackData = z.object({ - body: zFeedbackRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zFeedbackRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Feedback submitted successfully */ -export const zSubmitFeedbackResponse = zFeedbackResponse +export const zSubmitFeedbackResponse = zFeedbackResponse; export const zGetUserdataData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - dir: z.string().optional(), - recurse: z.boolean().optional().default(false), - split: z.boolean().optional().default(false), - full_info: z.boolean().optional().default(false) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + dir: z.string().optional(), + recurse: z.boolean().optional().default(false), + split: z.boolean().optional().default(false), + full_info: z.boolean().optional().default(false) + }).optional() +}); /** * A list of user data files. */ -export const zGetUserdataResponse = zGetUserDataResponseFull +export const zGetUserdataResponse = zGetUserDataResponseFull; export const zGetUserdataFilePublishData = z.object({ - body: z.never().optional(), - path: z.object({ - file: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + file: z.string() + }), + query: z.never().optional() +}); /** * Publish info (publish_time is null if never published) */ -export const zGetUserdataFilePublishResponse = zWorkflowPublishInfo +export const zGetUserdataFilePublishResponse = zWorkflowPublishInfo; export const zPostUserdataFilePublishData = z.object({ - body: zPublishWorkflowAssetsRequest, - path: z.object({ - file: z.string() - }), - query: z.never().optional() -}) + body: zPublishWorkflowAssetsRequest, + path: z.object({ + file: z.string() + }), + query: z.never().optional() +}); /** * Workflow published */ -export const zPostUserdataFilePublishResponse = zWorkflowPublishInfo +export const zPostUserdataFilePublishResponse = zWorkflowPublishInfo; export const zDeleteUserdataFileData = z.object({ - body: z.never().optional(), - path: z.object({ - file: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + file: z.string() + }), + query: z.never().optional() +}); /** * File deleted successfully (No Content). */ -export const zDeleteUserdataFileResponse = z.void() +export const zDeleteUserdataFileResponse = z.void(); export const zGetUserdataFileData = z.object({ - body: z.never().optional(), - path: z.object({ - file: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + file: z.string() + }), + query: z.never().optional() +}); /** * Successfully retrieved the file. */ -export const zGetUserdataFileResponse = z.string() +export const zGetUserdataFileResponse = z.string(); export const zPostUserdataFileData = z.object({ - body: z.string(), - path: z.object({ - file: z.string() - }), - query: z - .object({ - overwrite: z.enum(['true', 'false']).optional(), - full_info: z.enum(['true', 'false']).optional() - }) - .optional() -}) + body: z.string(), + path: z.object({ + file: z.string() + }), + query: z.object({ + overwrite: z.enum(['true', 'false']).optional(), + full_info: z.enum(['true', 'false']).optional() + }).optional() +}); /** * File uploaded successfully. */ -export const zPostUserdataFileResponse = zUserDataResponseFull +export const zPostUserdataFileResponse = zUserDataResponseFull; export const zMoveUserdataFileData = z.object({ - body: z.never().optional(), - path: z.object({ - file: z.string(), - dest: z.string() - }), - query: z - .object({ - overwrite: z.enum(['true', 'false']).optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.object({ + file: z.string(), + dest: z.string() + }), + query: z.object({ + overwrite: z.enum(['true', 'false']).optional() + }).optional() +}); /** * File moved successfully. */ -export const zMoveUserdataFileResponse = zUserDataResponseFull +export const zMoveUserdataFileResponse = zUserDataResponseFull; export const zUploadImageData = z.object({ - body: z.object({ - image: z.string(), - overwrite: z.string().optional(), - subfolder: z.string().optional(), - type: z.string().optional() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + image: z.string(), + overwrite: z.string().optional(), + subfolder: z.string().optional(), + type: z.string().optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Image uploaded successfully */ export const zUploadImageResponse = z.object({ - name: z.string().optional(), - subfolder: z.string().optional(), - type: z.string().optional() -}) + name: z.string().optional(), + subfolder: z.string().optional(), + type: z.string().optional() +}); export const zUploadMaskData = z.object({ - body: z.object({ - image: z.string(), - original_ref: z.string() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + image: z.string(), + original_ref: z.string() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Mask uploaded successfully */ export const zUploadMaskResponse = z.object({ - name: z.string().optional(), - subfolder: z.string().optional(), - type: z.string().optional(), - metadata: z - .object({ - is_mask: z.boolean().optional(), - original_hash: z.string().optional(), - mask_type: z.string().optional(), - related_files: z - .object({ - mask: z.string().optional(), - paint: z.string().optional(), - painted: z.string().optional() - }) - .optional() - }) - .optional() -}) + name: z.string().optional(), + subfolder: z.string().optional(), + type: z.string().optional(), + metadata: z.object({ + is_mask: z.boolean().optional(), + original_hash: z.string().optional(), + mask_type: z.string().optional(), + related_files: z.object({ + mask: z.string().optional(), + paint: z.string().optional(), + painted: z.string().optional() + }).optional() + }).optional() +}); export const zGetLogsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetLogsResponse = zLogsResponse +export const zGetLogsResponse = zLogsResponse; export const zGetSystemStatsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetSystemStatsResponse = zSystemStatsResponse +export const zGetSystemStatsResponse = zSystemStatsResponse; export const zDeleteSessionData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Session deleted successfully */ -export const zDeleteSessionResponse2 = zDeleteSessionResponse +export const zDeleteSessionResponse2 = zDeleteSessionResponse; export const zCreateSessionData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Session created successfully */ -export const zCreateSessionResponse2 = zCreateSessionResponse +export const zCreateSessionResponse2 = zCreateSessionResponse; export const zExchangeTokenData = z.object({ - body: zExchangeTokenRequest.optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: zExchangeTokenRequest.optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Token exchanged successfully */ -export const zExchangeTokenResponse2 = zExchangeTokenResponse +export const zExchangeTokenResponse2 = zExchangeTokenResponse; export const zGetJwksData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * JWKS response */ -export const zGetJwksResponse = zJwksResponse +export const zGetJwksResponse = zJwksResponse; + +export const zGetOAuthAuthorizationServerData = z.object({ + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); + +/** + * Authorization-server metadata + */ +export const zGetOAuthAuthorizationServerResponse = zOAuthAuthorizationServerMetadata; + +export const zGetOAuthProtectedResourceData = z.object({ + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); + +/** + * Protected-resource metadata + */ +export const zGetOAuthProtectedResourceResponse = zOAuthProtectedResourceMetadata; + +export const zGetOAuthAuthorizeData = z.object({ + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + response_type: z.string().optional(), + client_id: z.string().optional(), + redirect_uri: z.string().optional(), + scope: z.string().optional(), + state: z.string().optional(), + code_challenge: z.string().optional(), + code_challenge_method: z.string().optional(), + resource: z.string().optional(), + oauth_request_id: z.string().optional() + }).optional() +}); + +/** + * Consent challenge payload (cookie present, email verified). Frontend renders the consent UI from this payload and POSTs back to /oauth/authorize. + * + */ +export const zGetOAuthAuthorizeResponse = zOAuthConsentChallenge; + +export const zPostOAuthAuthorizeData = z.object({ + body: z.object({ + oauth_request_id: z.string().uuid(), + csrf_token: z.string(), + decision: z.enum(['allow', 'deny']), + workspace_id: z.string() + }), + path: z.never().optional(), + query: z.never().optional() +}); + +/** + * Redirect URL for the frontend to navigate to (allow → with code+state; deny → with error+state) + */ +export const zPostOAuthAuthorizeResponse = zOAuthAuthorizeRedirectResponse; + +export const zPostOAuthTokenData = z.object({ + body: z.object({ + grant_type: z.enum(['authorization_code', 'refresh_token']), + client_id: z.string(), + code: z.string().optional(), + redirect_uri: z.string().optional(), + code_verifier: z.string().optional(), + refresh_token: z.string().optional(), + scope: z.string().optional(), + client_secret: z.string().optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); + +/** + * New token pair + */ +export const zPostOAuthTokenResponse = zOAuthTokenResponse; + +export const zPostOAuthRegisterData = z.object({ + body: zOAuthRegisterRequest, + path: z.never().optional(), + query: z.never().optional() +}); + +/** + * Registered. Body echoes the metadata RFC 7591 §3.2.1 requires. + */ +export const zPostOAuthRegisterResponse = zOAuthRegisterResponse; export const zListWorkspacesData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * List of workspaces */ -export const zListWorkspacesResponse2 = zListWorkspacesResponse +export const zListWorkspacesResponse2 = zListWorkspacesResponse; export const zCreateWorkspaceData = z.object({ - body: zCreateWorkspaceRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateWorkspaceRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Workspace created */ -export const zCreateWorkspaceResponse = zWorkspace +export const zCreateWorkspaceResponse = zWorkspace; export const zDeleteWorkspaceData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Workspace deleted */ -export const zDeleteWorkspaceResponse = z.void() +export const zDeleteWorkspaceResponse = z.void(); export const zGetWorkspaceData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Workspace details */ -export const zGetWorkspaceResponse = zWorkspace +export const zGetWorkspaceResponse = zWorkspace; export const zUpdateWorkspaceData = z.object({ - body: zUpdateWorkspaceRequest, - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: zUpdateWorkspaceRequest, + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Workspace updated */ -export const zUpdateWorkspaceResponse = zWorkspace +export const zUpdateWorkspaceResponse = zWorkspace; export const zListWorkspaceMembersData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - offset: z.number().int().gte(0).optional().default(0), - limit: z.number().int().gte(1).lte(100).optional().default(20) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + offset: z.number().int().gte(0).optional().default(0), + limit: z.number().int().gte(1).lte(100).optional().default(20) + }).optional() +}); /** * List of members */ -export const zListWorkspaceMembersResponse = zListMembersResponse +export const zListWorkspaceMembersResponse = zListMembersResponse; export const zListWorkspaceInvitesData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * List of pending invites */ -export const zListWorkspaceInvitesResponse = zListInvitesResponse +export const zListWorkspaceInvitesResponse = zListInvitesResponse; export const zCreateWorkspaceInviteData = z.object({ - body: zCreateInviteRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateInviteRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Invite created */ -export const zCreateWorkspaceInviteResponse = zPendingInvite +export const zCreateWorkspaceInviteResponse = zPendingInvite; export const zAcceptWorkspaceInviteData = z.object({ - body: z.never().optional(), - path: z.object({ - token: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + token: z.string() + }), + query: z.never().optional() +}); /** * Invite accepted, user is now a member */ -export const zAcceptWorkspaceInviteResponse = zAcceptInviteResponse +export const zAcceptWorkspaceInviteResponse = zAcceptInviteResponse; export const zLeaveWorkspaceData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Successfully left workspace */ -export const zLeaveWorkspaceResponse = z.void() +export const zLeaveWorkspaceResponse = z.void(); export const zRevokeWorkspaceInviteData = z.object({ - body: z.never().optional(), - path: z.object({ - inviteId: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + inviteId: z.string() + }), + query: z.never().optional() +}); /** * Invite revoked */ -export const zRevokeWorkspaceInviteResponse = z.void() +export const zRevokeWorkspaceInviteResponse = z.void(); export const zRemoveWorkspaceMemberData = z.object({ - body: z.never().optional(), - path: z.object({ - userId: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + userId: z.string() + }), + query: z.never().optional() +}); /** * Member removed */ -export const zRemoveWorkspaceMemberResponse = z.void() +export const zRemoveWorkspaceMemberResponse = z.void(); export const zListWorkspaceApiKeysData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * List of API keys */ -export const zListWorkspaceApiKeysResponse2 = zListWorkspaceApiKeysResponse +export const zListWorkspaceApiKeysResponse2 = zListWorkspaceApiKeysResponse; export const zCreateWorkspaceApiKeyData = z.object({ - body: zCreateWorkspaceApiKeyRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateWorkspaceApiKeyRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * API key created (plaintext returned once) */ -export const zCreateWorkspaceApiKeyResponse2 = zCreateWorkspaceApiKeyResponse +export const zCreateWorkspaceApiKeyResponse2 = zCreateWorkspaceApiKeyResponse; export const zRevokeWorkspaceApiKeyData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string().uuid() + }), + query: z.never().optional() +}); /** * API key revoked */ -export const zRevokeWorkspaceApiKeyResponse = z.void() +export const zRevokeWorkspaceApiKeyResponse = z.void(); export const zBulkRevokeWorkspaceMemberApiKeysData = z.object({ - body: z.never().optional(), - path: z.object({ - user_id: z.string().min(1) - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + user_id: z.string().min(1) + }), + query: z.never().optional() +}); /** * Keys revoked successfully */ -export const zBulkRevokeWorkspaceMemberApiKeysResponse = - zBulkRevokeApiKeysResponse +export const zBulkRevokeWorkspaceMemberApiKeysResponse = zBulkRevokeApiKeysResponse; export const zVerifyWorkspaceApiKeyData = z.object({ - body: zVerifyApiKeyRequest, - path: z.never().optional(), - query: z - .object({ - include_billing: z.boolean().optional().default(false) - }) - .optional() -}) + body: zVerifyApiKeyRequest, + path: z.never().optional(), + query: z.object({ + include_billing: z.boolean().optional().default(false) + }).optional() +}); /** * Key is valid */ -export const zVerifyWorkspaceApiKeyResponse = zVerifyApiKeyResponse +export const zVerifyWorkspaceApiKeyResponse = zVerifyApiKeyResponse; export const zGetUserData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetUserResponse = zUserResponse +export const zGetUserResponse = zUserResponse; export const zSetReviewStatusData = z.object({ - body: zSetReviewStatusRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zSetReviewStatusRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Status updated successfully */ -export const zSetReviewStatusResponse2 = zSetReviewStatusResponse +export const zSetReviewStatusResponse2 = zSetReviewStatusResponse; export const zUpdateHubWorkflowData = z.object({ - body: zUpdateHubWorkflowRequest, - path: z.object({ - share_id: z.string() - }), - query: z.never().optional() -}) + body: zUpdateHubWorkflowRequest, + path: z.object({ + share_id: z.string() + }), + query: z.never().optional() +}); /** * Updated hub workflow detail */ -export const zUpdateHubWorkflowResponse = zHubWorkflowDetail +export const zUpdateHubWorkflowResponse = zHubWorkflowDetail; export const zGetDeletionRequestData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - firebase_id: z.string() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + firebase_id: z.string() + }) +}); /** * Success - deletion request found */ -export const zGetDeletionRequestResponse = z.array(zDeletionRequest) +export const zGetDeletionRequestResponse = z.array(zDeletionRequest); export const zCreateDeletionRequestData = z.object({ - body: z.object({ - firebase_id: z.string() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + firebase_id: z.string() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Created - deletion request created or already exists */ export const zCreateDeletionRequestResponse = z.object({ - user_found_in_cloud: z.boolean() -}) + user_found_in_cloud: z.boolean() +}); export const zReportPartnerUsageData = z.object({ - body: zPartnerUsageRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zPartnerUsageRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Usage reported successfully */ -export const zReportPartnerUsageResponse = zPartnerUsageResponse +export const zReportPartnerUsageResponse = zPartnerUsageResponse; export const zUpdateSubscriptionCacheData = z.object({ - body: z.object({ - user_id: z.string(), - is_active: z.boolean(), - tier: z.string().optional() - }), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.object({ + user_id: z.string(), + is_active: z.boolean(), + tier: z.string().optional() + }), + path: z.never().optional(), + query: z.never().optional() +}); /** * Cache updated successfully */ export const zUpdateSubscriptionCacheResponse = z.object({ - status: z.string().optional() -}) + status: z.string().optional() +}); export const zSyncApiKeyData = z.object({ - body: zSyncApiKeyRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zSyncApiKeyRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Sync processed — see `result` field */ -export const zSyncApiKeyResponse2 = zSyncApiKeyResponse +export const zSyncApiKeyResponse2 = zSyncApiKeyResponse; export const zGetJobStatusData = z.object({ - body: z.never().optional(), - path: z.object({ - job_id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + job_id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Success - Job status returned */ -export const zGetJobStatusResponse = zJobStatusResponse +export const zGetJobStatusResponse = zJobStatusResponse; export const zListTasksData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - task_name: z.string().optional(), - idempotency_key: z.string().optional(), - status: z.string().optional(), - created_after: z.string().datetime().optional(), - created_before: z.string().datetime().optional(), - sort_order: z.enum(['asc', 'desc']).optional(), - offset: z.number().int().gte(0).optional().default(0), - limit: z.number().int().gte(1).lte(100).optional().default(20) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + task_name: z.string().optional(), + idempotency_key: z.string().optional(), + status: z.string().optional(), + created_after: z.string().datetime().optional(), + created_before: z.string().datetime().optional(), + sort_order: z.enum(['asc', 'desc']).optional(), + offset: z.number().int().gte(0).optional().default(0), + limit: z.number().int().gte(1).lte(100).optional().default(20) + }).optional() +}); /** * Success - Tasks retrieved */ -export const zListTasksResponse = zTasksListResponse +export const zListTasksResponse = zTasksListResponse; export const zGetTaskData = z.object({ - body: z.never().optional(), - path: z.object({ - task_id: z.string().uuid() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + task_id: z.string().uuid() + }), + query: z.never().optional() +}); /** * Success - Task details retrieved */ -export const zGetTaskResponse = zTaskResponse +export const zGetTaskResponse = zTaskResponse; export const zGetBillingStatusData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Billing status */ -export const zGetBillingStatusResponse = zBillingStatusResponse +export const zGetBillingStatusResponse = zBillingStatusResponse; export const zGetBillingBalanceData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Credit balance */ -export const zGetBillingBalanceResponse = zBillingBalanceResponse +export const zGetBillingBalanceResponse = zBillingBalanceResponse; export const zGetBillingEventsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - page: z.number().int().gte(1).optional().default(1), - limit: z.number().int().gte(1).lte(100).optional().default(20) - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + page: z.number().int().gte(1).optional().default(1), + limit: z.number().int().gte(1).lte(100).optional().default(20) + }).optional() +}); /** * Paginated billing events */ -export const zGetBillingEventsResponse = zBillingEventsResponse +export const zGetBillingEventsResponse = zBillingEventsResponse; export const zGetBillingPlansData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Available plans with pricing */ -export const zGetBillingPlansResponse = zBillingPlansResponse +export const zGetBillingPlansResponse = zBillingPlansResponse; export const zPreviewSubscribeData = z.object({ - body: zPreviewSubscribeRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zPreviewSubscribeRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Subscription preview */ -export const zPreviewSubscribeResponse2 = zPreviewSubscribeResponse +export const zPreviewSubscribeResponse2 = zPreviewSubscribeResponse; export const zSubscribeData = z.object({ - body: zSubscribeRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zSubscribeRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Subscription created or payment method needed */ -export const zSubscribeResponse2 = zSubscribeResponse +export const zSubscribeResponse2 = zSubscribeResponse; export const zCancelSubscriptionData = z.object({ - body: zCancelSubscriptionRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCancelSubscriptionRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Subscription cancellation scheduled */ -export const zCancelSubscriptionResponse2 = zCancelSubscriptionResponse +export const zCancelSubscriptionResponse2 = zCancelSubscriptionResponse; export const zResubscribeData = z.object({ - body: zResubscribeRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zResubscribeRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Subscription resumed successfully */ -export const zResubscribeResponse2 = zResubscribeResponse +export const zResubscribeResponse2 = zResubscribeResponse; export const zGetPaymentPortalData = z.object({ - body: zPaymentPortalRequest.optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: zPaymentPortalRequest.optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Success */ -export const zGetPaymentPortalResponse = zPaymentPortalResponse +export const zGetPaymentPortalResponse = zPaymentPortalResponse; export const zCreateTopupData = z.object({ - body: zCreateTopupRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateTopupRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Top-up initiated successfully */ -export const zCreateTopupResponse2 = zCreateTopupResponse +export const zCreateTopupResponse2 = zCreateTopupResponse; export const zGetBillingOpStatusData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); /** * Billing operation status */ -export const zGetBillingOpStatusResponse = zBillingOpStatusResponse +export const zGetBillingOpStatusResponse = zBillingOpStatusResponse; export const zListWorkflowsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - limit: z.number().int().lte(100).optional().default(20), - offset: z.number().int().optional().default(0), - name: z.string().optional(), - default_view: z.enum(['workflow', 'app']).optional(), - sort: z.enum(['create_time', 'update_time', 'name']).optional(), - order: z.enum(['asc', 'desc']).optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + limit: z.number().int().lte(100).optional().default(20), + offset: z.number().int().optional().default(0), + name: z.string().optional(), + default_view: z.enum(['workflow', 'app']).optional(), + sort: z.enum([ + 'create_time', + 'update_time', + 'name' + ]).optional(), + order: z.enum(['asc', 'desc']).optional() + }).optional() +}); /** * Success */ -export const zListWorkflowsResponse = zWorkflowListResponse +export const zListWorkflowsResponse = zWorkflowListResponse; export const zCreateWorkflowData = z.object({ - body: zCreateWorkflowRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateWorkflowRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Workflow created successfully */ -export const zCreateWorkflowResponse = zWorkflowResponse +export const zCreateWorkflowResponse = zWorkflowResponse; export const zDeleteWorkflowData = z.object({ - body: z.never().optional(), - path: z.object({ - workflow_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + workflow_id: z.string() + }), + query: z.never().optional() +}); /** * Workflow deleted successfully */ -export const zDeleteWorkflowResponse = z.void() +export const zDeleteWorkflowResponse = z.void(); export const zGetWorkflowData = z.object({ - body: z.never().optional(), - path: z.object({ - workflow_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + workflow_id: z.string() + }), + query: z.never().optional() +}); /** * Success */ -export const zGetWorkflowResponse = zWorkflowResponse +export const zGetWorkflowResponse = zWorkflowResponse; export const zUpdateWorkflowData = z.object({ - body: zUpdateWorkflowRequest, - path: z.object({ - workflow_id: z.string() - }), - query: z.never().optional() -}) + body: zUpdateWorkflowRequest, + path: z.object({ + workflow_id: z.string() + }), + query: z.never().optional() +}); /** * Success */ -export const zUpdateWorkflowResponse = zWorkflowResponse +export const zUpdateWorkflowResponse = zWorkflowResponse; export const zCreateWorkflowVersionData = z.object({ - body: zCreateWorkflowVersionRequest, - path: z.object({ - workflow_id: z.string() - }), - query: z.never().optional() -}) + body: zCreateWorkflowVersionRequest, + path: z.object({ + workflow_id: z.string() + }), + query: z.never().optional() +}); /** * Version created successfully */ -export const zCreateWorkflowVersionResponse = zWorkflowVersionResponse +export const zCreateWorkflowVersionResponse = zWorkflowVersionResponse; export const zGetWorkflowContentData = z.object({ - body: z.never().optional(), - path: z.object({ - workflow_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + workflow_id: z.string() + }), + query: z.never().optional() +}); /** * Success */ -export const zGetWorkflowContentResponse = zWorkflowVersionContentResponse +export const zGetWorkflowContentResponse = zWorkflowVersionContentResponse; export const zForkWorkflowData = z.object({ - body: zForkWorkflowRequest, - path: z.object({ - workflow_id: z.string() - }), - query: z.never().optional() -}) + body: zForkWorkflowRequest, + path: z.object({ + workflow_id: z.string() + }), + query: z.never().optional() +}); /** * Workflow forked successfully */ -export const zForkWorkflowResponse = zWorkflowResponse +export const zForkWorkflowResponse = zWorkflowResponse; export const zCreateHubProfileData = z.object({ - body: zCreateHubProfileRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zCreateHubProfileRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Hub profile created */ -export const zCreateHubProfileResponse = zHubProfile +export const zCreateHubProfileResponse = zHubProfile; export const zGetMyHubProfileData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Hub profile */ -export const zGetMyHubProfileResponse = zHubProfile +export const zGetMyHubProfileResponse = zHubProfile; export const zCheckHubUsernameData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - username: z.string() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + username: z.string() + }) +}); /** * Username availability result */ -export const zCheckHubUsernameResponse = zHubUsernameCheckResponse +export const zCheckHubUsernameResponse = zHubUsernameCheckResponse; export const zGetHubProfileByUsernameData = z.object({ - body: z.never().optional(), - path: z.object({ - username: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + username: z.string() + }), + query: z.never().optional() +}); /** * Hub profile */ -export const zGetHubProfileByUsernameResponse = zHubProfile +export const zGetHubProfileByUsernameResponse = zHubProfile; export const zUpdateHubProfileData = z.object({ - body: zUpdateHubProfileRequest, - path: z.object({ - username: z.string() - }), - query: z.never().optional() -}) + body: zUpdateHubProfileRequest, + path: z.object({ + username: z.string() + }), + query: z.never().optional() +}); /** * Hub profile updated */ -export const zUpdateHubProfileResponse = zHubProfile +export const zUpdateHubProfileResponse = zHubProfile; export const zCreateHubAssetUploadUrlData = z.object({ - body: zHubAssetUploadUrlRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zHubAssetUploadUrlRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Presigned upload URL and token */ -export const zCreateHubAssetUploadUrlResponse = zHubAssetUploadUrlResponse +export const zCreateHubAssetUploadUrlResponse = zHubAssetUploadUrlResponse; export const zListHubLabelsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - type: z.enum(['tag', 'model', 'custom_node']).optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + type: z.enum([ + 'tag', + 'model', + 'custom_node' + ]).optional() + }).optional() +}); /** * List of labels */ -export const zListHubLabelsResponse = zHubLabelListResponse +export const zListHubLabelsResponse = zHubLabelListResponse; export const zListHubWorkflowsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - cursor: z.string().optional(), - limit: z.number().int().gte(1).lte(100).optional().default(20), - search: z.string().optional(), - tag: z.string().optional(), - username: z.string().optional(), - detail: z.boolean().optional().default(false), - status: z.array(zHubWorkflowStatus).optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + cursor: z.string().optional(), + limit: z.number().int().gte(1).lte(100).optional().default(20), + search: z.string().optional(), + tag: z.string().optional(), + username: z.string().optional(), + detail: z.boolean().optional().default(false), + status: z.array(zHubWorkflowStatus).optional() + }).optional() +}); /** * Paginated list of hub workflows */ -export const zListHubWorkflowsResponse = zHubWorkflowListResponse +export const zListHubWorkflowsResponse = zHubWorkflowListResponse; export const zPublishHubWorkflowData = z.object({ - body: zPublishHubWorkflowRequest, - path: z.never().optional(), - query: z.never().optional() -}) + body: zPublishHubWorkflowRequest, + path: z.never().optional(), + query: z.never().optional() +}); /** * Workflow published to hub */ -export const zPublishHubWorkflowResponse = zHubWorkflowDetail +export const zPublishHubWorkflowResponse = zHubWorkflowDetail; export const zListHubWorkflowIndexData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - status: z.array(zHubWorkflowStatus).optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + status: z.array(zHubWorkflowStatus).optional() + }).optional() +}); /** * List of hub workflow template entries */ -export const zListHubWorkflowIndexResponse = z.array(zHubWorkflowTemplateEntry) +export const zListHubWorkflowIndexResponse = z.array(zHubWorkflowTemplateEntry); export const zDeleteHubWorkflowData = z.object({ - body: z.never().optional(), - path: z.object({ - share_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + share_id: z.string() + }), + query: z.never().optional() +}); /** * Successfully unpublished */ -export const zDeleteHubWorkflowResponse = z.void() +export const zDeleteHubWorkflowResponse = z.void(); export const zGetHubWorkflowData = z.object({ - body: z.never().optional(), - path: z.object({ - share_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + share_id: z.string() + }), + query: z.never().optional() +}); /** * Hub workflow detail */ -export const zGetHubWorkflowResponse = zHubWorkflowDetail +export const zGetHubWorkflowResponse = zHubWorkflowDetail; export const zGetPublishedWorkflowData = z.object({ - body: z.never().optional(), - path: z.object({ - share_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + share_id: z.string() + }), + query: z.never().optional() +}); /** * Published workflow details with asset statuses */ -export const zGetPublishedWorkflowResponse = zPublishedWorkflowDetail +export const zGetPublishedWorkflowResponse = zPublishedWorkflowDetail; export const zGetExtensionsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * URL paths (relative to web root) of available extension JS files */ -export const zGetExtensionsResponse = z.array(z.string()) +export const zGetExtensionsResponse = z.array(z.string()); export const zGetNodeInfoSchemaData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zGetNodeByIdData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); export const zGetVhsViewVideoData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string(), - type: z.string().optional(), - subfolder: z.string().optional() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string(), + type: z.string().optional(), + subfolder: z.string().optional() + }) +}); export const zGetVhsViewAudioData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string(), - type: z.string().optional(), - subfolder: z.string().optional() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string(), + type: z.string().optional(), + subfolder: z.string().optional() + }) +}); export const zGetVhsQueryVideoData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string() + }) +}); /** * Video metadata */ export const zGetVhsQueryVideoResponse = z.object({ - source: z.object({ - size: z.tuple([z.number().int(), z.number().int()]), - fps: z.number(), - frames: z.number().int(), - duration: z.number() - }) -}) + source: z.object({ + size: z.tuple([z.number().int(), z.number().int()]), + fps: z.number(), + frames: z.number().int(), + duration: z.number() + }) +}); export const zGetUsersInfoData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Userdata storage information */ export const zGetUsersInfoResponse = z.object({ - storage: z.string(), - migrated: z.boolean() -}) + storage: z.string(), + migrated: z.boolean() +}); export const zGetApiViewVideoAliasData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string() + }) +}); export const zGetViewCompatAliasData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.object({ - filename: z.string() - }) -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + filename: z.string() + }) +}); export const zGetWebsocketData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z - .object({ - clientId: z.string().optional() - }) - .optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.object({ + clientId: z.string().optional() + }).optional() +}); export const zGetTemplateProxyData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zGetHealthData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); /** * Service is healthy */ -export const zGetHealthResponse = z.string() - -export const zGetOpenapiSpecData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) +export const zGetHealthResponse = z.string(); export const zGetMonitoringTasksData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zDeleteMonitoringTasksSubpathData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zGetMonitoringTasksSubpathData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zPostMonitoringTasksSubpathData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zGetPprofData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zGetPprofProfileData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zGetPprofTraceData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zPostPprofSymbolData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zGetStaticExtensionsData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zGetCustomNodeProxyData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zPostCustomNodeProxyData = z.object({ - body: z.never().optional(), - path: z.object({ - path: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + path: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyPromptByIdData = z.object({ - body: z.never().optional(), - path: z.object({ - prompt_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + prompt_id: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyHistoryByIdData = z.object({ - body: z.never().optional(), - path: z.object({ - prompt_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + prompt_id: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyJobByIdData = z.object({ - body: z.never().optional(), - path: z.object({ - job_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + job_id: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyJobOutputsData = z.object({ - body: z.never().optional(), - path: z.object({ - job_id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + job_id: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyModelsData = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zGetLegacyModelsByFolderData = z.object({ - body: z.never().optional(), - path: z.object({ - folder: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + folder: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyObjectInfoByNodeClassData = z.object({ - body: z.never().optional(), - path: z.object({ - node_class: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + node_class: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyUserdataV2Data = z.object({ - body: z.never().optional(), - path: z.never().optional(), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.never().optional(), + query: z.never().optional() +}); export const zGetLegacyAssetContentData = z.object({ - body: z.never().optional(), - path: z.object({ - id: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + id: z.string() + }), + query: z.never().optional() +}); export const zGetLegacyViewMetadataData = z.object({ - body: z.never().optional(), - path: z.object({ - folder_name: z.string() - }), - query: z.never().optional() -}) + body: z.never().optional(), + path: z.object({ + folder_name: z.string() + }), + query: z.never().optional() +});