From defde2bca98f5d3a339b784e8622ec7766162476 Mon Sep 17 00:00:00 2001 From: zhenyi <434836402@qq.com> Date: Sun, 7 Jun 2026 21:20:51 +0800 Subject: [PATCH] feat(schemas): add new API schema definitions for invitation, deployment, and issue management - Add AcceptInvitationParams and AcceptInvitationRequest schemas - Add AddDeployKeyParams, AddDomainParams, AddGpgKeyParams, AddMemberParams, AddReplyParams, AddRepoMemberParams, and AddSshKeyParams schemas - Add ApiEmptyResponse and ApiErrorResponse schemas - Add ApiResponse schemas for BranchMergeCheck, BranchProtectionRule, CaptchaResponse, ContextMe, CreateInvitationResponse, EmailResponse, Enable2FAResponse, Get2FAStatusResponse - Add ApiResponse schemas for Issue, IssueAssignee, IssueComment, IssueEvent, IssueLabel, IssueLabelRelation, IssueMilestone, IssuePrRelation, IssueReaction, IssueRepoRelation, IssueSubscriber, and IssueTemplate - Add ApiResponse schemas for Option_BranchProtectionRule, PrAssignee, PrCheckRun, PrCommit, PrEvent, PrFile, and PrLabel --- .gitignore | 24 + README.md | 28 + bun.lock | 419 + genapi.js | 35 + index.html | 13 + openapi.json | 38500 ++++++++++++++++ package.json | 40 + public/favicon.svg | 1 + public/icons.svg | 24 + src/App.css | 184 + src/App.tsx | 1 + src/app/auth/auth.css | 579 + src/app/auth/components/AuthLayout.tsx | 61 + src/app/auth/components/CaptchaBox.tsx | 31 + src/app/auth/components/FormElements.tsx | 135 + src/app/auth/components/PinCodeInput.tsx | 87 + src/app/auth/hooks/useCaptcha.ts | 46 + src/app/auth/lib/password.ts | 22 + src/app/auth/lib/rsa.ts | 91 + src/app/auth/pages/ForgotPassword.tsx | 106 + src/app/auth/pages/Login.tsx | 192 + src/app/auth/pages/Register.tsx | 262 + src/app/auth/pages/ResetPassword.tsx | 158 + src/assets/hero.png | Bin 0 -> 13057 bytes src/assets/solid.svg | 1 + src/assets/vite.svg | 1 + src/client/core/ApiError.ts | 25 + src/client/core/ApiRequestOptions.ts | 17 + src/client/core/ApiResult.ts | 11 + src/client/core/CancelablePromise.ts | 131 + src/client/core/OpenAPI.ts | 32 + src/client/core/request.ts | 323 + src/client/index.ts | 678 + src/client/models/AcceptInvitationParams.ts | 11 + src/client/models/AcceptInvitationRequest.ts | 11 + src/client/models/AddDeployKeyParams.ts | 11 + src/client/models/AddDomainParams.ts | 8 + src/client/models/AddGpgKeyParams.ts | 11 + src/client/models/AddMemberParams.ts | 9 + src/client/models/AddReplyParams.ts | 8 + src/client/models/AddRepoMemberParams.ts | 9 + src/client/models/AddSshKeyParams.ts | 11 + src/client/models/ApiEmptyResponse.ts | 11 + src/client/models/ApiErrorResponse.ts | 11 + .../models/ApiResponse_BranchMergeCheck.ts | 11 + .../ApiResponse_BranchProtectionRule.ts | 29 + .../models/ApiResponse_CaptchaResponse.ts | 14 + src/client/models/ApiResponse_ContextMe.ts | 16 + .../ApiResponse_CreateInvitationResponse.ts | 11 + .../models/ApiResponse_EmailResponse.ts | 10 + .../models/ApiResponse_Enable2FAResponse.ts | 12 + .../ApiResponse_Get2FAStatusResponse.ts | 12 + src/client/models/ApiResponse_Issue.ts | 29 + .../models/ApiResponse_IssueAssignee.ts | 14 + src/client/models/ApiResponse_IssueComment.ts | 18 + src/client/models/ApiResponse_IssueEvent.ts | 19 + src/client/models/ApiResponse_IssueLabel.ts | 17 + .../models/ApiResponse_IssueLabelRelation.ts | 14 + .../models/ApiResponse_IssueMilestone.ts | 20 + .../models/ApiResponse_IssuePrRelation.ts | 16 + .../models/ApiResponse_IssueReaction.ts | 17 + .../models/ApiResponse_IssueRepoRelation.ts | 16 + .../models/ApiResponse_IssueSubscriber.ts | 16 + .../models/ApiResponse_IssueTemplate.ts | 20 + ...ApiResponse_Option_BranchProtectionRule.ts | 29 + src/client/models/ApiResponse_PrAssignee.ts | 14 + src/client/models/ApiResponse_PrCheckRun.ts | 22 + src/client/models/ApiResponse_PrCommit.ts | 17 + src/client/models/ApiResponse_PrEvent.ts | 19 + src/client/models/ApiResponse_PrFile.ts | 21 + src/client/models/ApiResponse_PrLabel.ts | 17 + .../models/ApiResponse_PrLabelRelation.ts | 14 + .../models/ApiResponse_PrMergeStrategy.ts | 20 + src/client/models/ApiResponse_PrReaction.ts | 17 + src/client/models/ApiResponse_PrReview.ts | 21 + .../models/ApiResponse_PrReviewComment.ts | 24 + src/client/models/ApiResponse_PrStatus.ts | 21 + .../models/ApiResponse_PrSubscription.ts | 16 + src/client/models/ApiResponse_PullRequest.ts | 33 + ...sponse_Regenerate2FABackupCodesResponse.ts | 13 + .../ApiResponse_RegisterEmailCodeResponse.ts | 10 + .../models/ApiResponse_RegisterResponse.ts | 25 + src/client/models/ApiResponse_Repo.ts | 30 + src/client/models/ApiResponse_RepoBranch.ts | 20 + .../models/ApiResponse_RepoCommitComment.ts | 23 + .../models/ApiResponse_RepoCommitStatus.ts | 22 + .../models/ApiResponse_RepoDeployKey.ts | 23 + src/client/models/ApiResponse_RepoFork.ts | 14 + .../models/ApiResponse_RepoInvitation.ts | 21 + src/client/models/ApiResponse_RepoMember.ts | 21 + src/client/models/ApiResponse_RepoRelease.ts | 22 + src/client/models/ApiResponse_RepoStar.ts | 13 + src/client/models/ApiResponse_RepoStats.ts | 22 + src/client/models/ApiResponse_RepoTag.ts | 17 + src/client/models/ApiResponse_RepoWatch.ts | 16 + src/client/models/ApiResponse_RepoWebhook.ts | 21 + src/client/models/ApiResponse_RsaResponse.ts | 10 + src/client/models/ApiResponse_String.ts | 8 + src/client/models/ApiResponse_User.ts | 26 + .../models/ApiResponse_UserAppearance.ts | 23 + .../models/ApiResponse_UserAvatarResponse.ts | 11 + src/client/models/ApiResponse_UserDevice.ts | 21 + src/client/models/ApiResponse_UserGpgKey.ts | 20 + .../models/ApiResponse_UserNotifySetting.ts | 20 + .../models/ApiResponse_UserOAuthInfo.ts | 18 + ...ApiResponse_UserPersonalAccessTokenInfo.ts | 18 + src/client/models/ApiResponse_UserProfile.ts | 20 + .../models/ApiResponse_UserSecurityLog.ts | 19 + .../models/ApiResponse_UserSessionInfo.ts | 16 + src/client/models/ApiResponse_UserSshKey.ts | 21 + .../ApiResponse_Vec_BranchProtectionRule.ts | 29 + src/client/models/ApiResponse_Vec_Issue.ts | 29 + .../models/ApiResponse_Vec_IssueAssignee.ts | 14 + .../models/ApiResponse_Vec_IssueComment.ts | 18 + .../models/ApiResponse_Vec_IssueEvent.ts | 19 + .../models/ApiResponse_Vec_IssueLabel.ts | 17 + .../ApiResponse_Vec_IssueLabelRelation.ts | 14 + .../models/ApiResponse_Vec_IssueMilestone.ts | 20 + .../models/ApiResponse_Vec_IssuePrRelation.ts | 16 + .../models/ApiResponse_Vec_IssueReaction.ts | 17 + .../ApiResponse_Vec_IssueRepoRelation.ts | 16 + .../models/ApiResponse_Vec_IssueSubscriber.ts | 16 + .../models/ApiResponse_Vec_IssueTemplate.ts | 20 + .../models/ApiResponse_Vec_PrAssignee.ts | 14 + .../models/ApiResponse_Vec_PrCheckRun.ts | 22 + src/client/models/ApiResponse_Vec_PrCommit.ts | 17 + src/client/models/ApiResponse_Vec_PrEvent.ts | 19 + src/client/models/ApiResponse_Vec_PrFile.ts | 21 + src/client/models/ApiResponse_Vec_PrLabel.ts | 17 + .../models/ApiResponse_Vec_PrLabelRelation.ts | 14 + .../models/ApiResponse_Vec_PrReaction.ts | 17 + src/client/models/ApiResponse_Vec_PrReview.ts | 21 + .../models/ApiResponse_Vec_PrReviewComment.ts | 24 + .../models/ApiResponse_Vec_PrSubscription.ts | 16 + .../models/ApiResponse_Vec_PullRequest.ts | 33 + src/client/models/ApiResponse_Vec_Repo.ts | 30 + .../models/ApiResponse_Vec_RepoBranch.ts | 20 + .../ApiResponse_Vec_RepoCommitComment.ts | 23 + .../ApiResponse_Vec_RepoCommitStatus.ts | 22 + .../models/ApiResponse_Vec_RepoDeployKey.ts | 23 + src/client/models/ApiResponse_Vec_RepoFork.ts | 14 + .../models/ApiResponse_Vec_RepoInvitation.ts | 21 + .../models/ApiResponse_Vec_RepoMember.ts | 21 + .../models/ApiResponse_Vec_RepoRelease.ts | 22 + src/client/models/ApiResponse_Vec_RepoStar.ts | 13 + src/client/models/ApiResponse_Vec_RepoTag.ts | 17 + .../models/ApiResponse_Vec_RepoWatch.ts | 16 + .../models/ApiResponse_Vec_RepoWebhook.ts | 21 + .../models/ApiResponse_Vec_UserDevice.ts | 21 + .../models/ApiResponse_Vec_UserGpgKey.ts | 20 + .../models/ApiResponse_Vec_UserOAuthInfo.ts | 18 + ...esponse_Vec_UserPersonalAccessTokenInfo.ts | 18 + .../models/ApiResponse_Vec_UserSecurityLog.ts | 19 + .../models/ApiResponse_Vec_UserSessionInfo.ts | 16 + .../models/ApiResponse_Vec_UserSshKey.ts | 21 + src/client/models/ApiResponse_Vec_WikiPage.ts | 20 + .../ApiResponse_Vec_WikiPageRevision.ts | 17 + .../models/ApiResponse_Vec_Workspace.ts | 25 + .../ApiResponse_Vec_WorkspaceAuditLog.ts | 21 + .../models/ApiResponse_Vec_WorkspaceDomain.ts | 18 + .../ApiResponse_Vec_WorkspaceIntegration.ts | 21 + .../ApiResponse_Vec_WorkspaceInvitation.ts | 21 + .../models/ApiResponse_Vec_WorkspaceMember.ts | 21 + ...piResponse_Vec_WorkspacePendingApproval.ts | 22 + .../ApiResponse_Vec_WorkspaceWebhook.ts | 21 + .../models/ApiResponse_WikiCompareResult.ts | 21 + src/client/models/ApiResponse_WikiPage.ts | 20 + .../models/ApiResponse_WikiPageRevision.ts | 17 + src/client/models/ApiResponse_Workspace.ts | 25 + .../models/ApiResponse_WorkspaceBilling.ts | 23 + .../ApiResponse_WorkspaceCustomBranding.ts | 19 + .../models/ApiResponse_WorkspaceDomain.ts | 18 + .../ApiResponse_WorkspaceIntegration.ts | 21 + .../models/ApiResponse_WorkspaceInvitation.ts | 21 + .../models/ApiResponse_WorkspaceMember.ts | 21 + .../ApiResponse_WorkspacePendingApproval.ts | 22 + .../models/ApiResponse_WorkspaceSettings.ts | 20 + .../models/ApiResponse_WorkspaceStats.ts | 19 + .../models/ApiResponse_WorkspaceWebhook.ts | 21 + src/client/models/BranchMergeCheck.ts | 9 + src/client/models/BranchProtectionRule.ts | 27 + src/client/models/CaptchaQuery.ts | 11 + src/client/models/CaptchaResponse.ts | 12 + src/client/models/ColorScheme.ts | 5 + src/client/models/ContextMe.ts | 14 + src/client/models/CreateBranchParams.ts | 9 + src/client/models/CreateCheckRunParams.ts | 13 + src/client/models/CreateCommentParams.ts | 9 + .../models/CreateCommitCommentParams.ts | 12 + src/client/models/CreateCommitStatusParams.ts | 13 + src/client/models/CreateIntegrationParams.ts | 13 + src/client/models/CreateInvitationParams.ts | 9 + src/client/models/CreateInvitationResponse.ts | 9 + src/client/models/CreateIssueParams.ts | 16 + .../models/CreateIssueReactionParams.ts | 10 + src/client/models/CreateLabelParams.ts | 10 + src/client/models/CreateMilestoneParams.ts | 10 + src/client/models/CreatePrLabelParams.ts | 10 + src/client/models/CreatePrParams.ts | 15 + .../models/CreateProtectionRuleParams.ts | 22 + src/client/models/CreateReactionParams.ts | 10 + src/client/models/CreateReleaseParams.ts | 13 + .../models/CreateRepoInvitationParams.ts | 9 + src/client/models/CreateRepoParams.ts | 14 + src/client/models/CreateReviewParams.ts | 11 + src/client/models/CreateTagParams.ts | 10 + src/client/models/CreateTemplateParams.ts | 12 + src/client/models/CreateWebhookParams.ts | 12 + src/client/models/CreateWikiPageParams.ts | 9 + src/client/models/CreateWorkspaceParams.ts | 10 + src/client/models/Density.ts | 5 + src/client/models/DeviceType.ts | 5 + src/client/models/DigestFrequency.ts | 5 + src/client/models/Disable2FAParams.ts | 9 + src/client/models/DismissReviewParams.ts | 8 + src/client/models/EmailChangeRequest.ts | 9 + src/client/models/EmailResponse.ts | 8 + src/client/models/EmailVerifyRequest.ts | 8 + src/client/models/Enable2FAResponse.ts | 10 + src/client/models/EventType.ts | 5 + src/client/models/FontSize.ts | 5 + src/client/models/ForkRepoParams.ts | 9 + src/client/models/Get2FAStatusResponse.ts | 10 + src/client/models/GitService.ts | 5 + src/client/models/Issue.ts | 27 + src/client/models/IssueAssignee.ts | 12 + src/client/models/IssueComment.ts | 16 + src/client/models/IssueEvent.ts | 17 + src/client/models/IssueLabel.ts | 15 + src/client/models/IssueLabelRelation.ts | 12 + src/client/models/IssueListFilters.ts | 13 + src/client/models/IssueMilestone.ts | 18 + src/client/models/IssuePrRelation.ts | 14 + src/client/models/IssueReaction.ts | 15 + src/client/models/IssueRepoRelation.ts | 14 + src/client/models/IssueSubscriber.ts | 14 + src/client/models/IssueTemplate.ts | 18 + src/client/models/KeyType.ts | 5 + src/client/models/LinkPrParams.ts | 9 + src/client/models/LinkRepoParams.ts | 9 + src/client/models/LockIssueParams.ts | 11 + src/client/models/LockPrParams.ts | 11 + src/client/models/LoginParams.ts | 11 + src/client/models/MergePrParams.ts | 11 + src/client/models/MergeStrategyKind.ts | 5 + src/client/models/MuteIssueParams.ts | 11 + src/client/models/MutePrParams.ts | 11 + src/client/models/Permission.ts | 5 + src/client/models/PrAssignee.ts | 12 + src/client/models/PrCheckRun.ts | 20 + src/client/models/PrCommit.ts | 15 + src/client/models/PrEvent.ts | 17 + src/client/models/PrFile.ts | 19 + src/client/models/PrLabel.ts | 15 + src/client/models/PrLabelRelation.ts | 12 + src/client/models/PrListFilters.ts | 10 + src/client/models/PrMergeStrategy.ts | 18 + src/client/models/PrReaction.ts | 15 + src/client/models/PrReview.ts | 19 + src/client/models/PrReviewComment.ts | 22 + src/client/models/PrStatus.ts | 19 + src/client/models/PrSubscription.ts | 14 + src/client/models/Priority.ts | 5 + src/client/models/Provider.ts | 5 + src/client/models/PullRequest.ts | 31 + .../models/Regenerate2FABackupCodesRequest.ts | 11 + .../Regenerate2FABackupCodesResponse.ts | 11 + src/client/models/RegisterEmailCodeParams.ts | 9 + .../models/RegisterEmailCodeResponse.ts | 8 + src/client/models/RegisterParams.ts | 12 + src/client/models/RegisterResponse.ts | 23 + src/client/models/RelationType.ts | 5 + src/client/models/Repo.ts | 28 + src/client/models/RepoBranch.ts | 18 + src/client/models/RepoCommitComment.ts | 21 + src/client/models/RepoCommitStatus.ts | 20 + src/client/models/RepoDeployKey.ts | 21 + src/client/models/RepoFork.ts | 12 + src/client/models/RepoInvitation.ts | 19 + src/client/models/RepoMember.ts | 19 + src/client/models/RepoRelease.ts | 20 + src/client/models/RepoStar.ts | 11 + src/client/models/RepoStats.ts | 20 + src/client/models/RepoTag.ts | 15 + src/client/models/RepoWatch.ts | 14 + src/client/models/RepoWebhook.ts | 19 + src/client/models/RequestApprovalParams.ts | 9 + src/client/models/RequestType.ts | 5 + src/client/models/ResetPasswordRequest.ts | 8 + .../models/ResetPasswordVerifyParams.ts | 9 + src/client/models/ReviewApprovalRequest.ts | 11 + src/client/models/ReviewCommentParams.ts | 12 + src/client/models/Role.ts | 5 + src/client/models/RsaResponse.ts | 8 + src/client/models/Scope.ts | 5 + .../models/SetBranchProtectionParams.ts | 11 + src/client/models/State.ts | 5 + src/client/models/Status.ts | 8 + src/client/models/SubmitReviewParams.ts | 9 + src/client/models/SubscriptionLevel.ts | 5 + src/client/models/TargetType.ts | 5 + src/client/models/Theme.ts | 5 + src/client/models/TransferIssueParams.ts | 11 + src/client/models/TransferOwnerParams.ts | 11 + src/client/models/TransferOwnerRequest.ts | 11 + src/client/models/UpdateBillingParams.ts | 10 + src/client/models/UpdateBrandingParams.ts | 14 + src/client/models/UpdateCheckRunParams.ts | 10 + src/client/models/UpdateCommentParams.ts | 8 + src/client/models/UpdateIntegrationParams.ts | 12 + src/client/models/UpdateIssueParams.ts | 13 + src/client/models/UpdateLabelParams.ts | 10 + src/client/models/UpdateMemberRoleParams.ts | 8 + .../models/UpdateMergeStrategyParams.ts | 13 + src/client/models/UpdateMilestoneParams.ts | 11 + src/client/models/UpdatePrLabelParams.ts | 10 + src/client/models/UpdatePrParams.ts | 11 + .../models/UpdateProtectionRuleParams.ts | 21 + src/client/models/UpdateReleaseParams.ts | 11 + .../models/UpdateRepoMemberRoleParams.ts | 8 + src/client/models/UpdateRepoParams.ts | 11 + src/client/models/UpdateTemplateParams.ts | 13 + src/client/models/UpdateUserAccountParams.ts | 11 + .../models/UpdateUserAppearanceParams.ts | 14 + .../models/UpdateUserNotifySettingParams.ts | 14 + src/client/models/UpdateUserProfileParams.ts | 15 + src/client/models/UpdateWebhookParams.ts | 11 + src/client/models/UpdateWikiPageParams.ts | 10 + src/client/models/UpdateWorkspaceParams.ts | 11 + .../models/UpdateWorkspaceSettingsParams.ts | 15 + src/client/models/UploadUserAvatarParams.ts | 10 + src/client/models/User.ts | 24 + src/client/models/UserAppearance.ts | 21 + src/client/models/UserAvatarResponse.ts | 9 + src/client/models/UserDevice.ts | 19 + src/client/models/UserGpgKey.ts | 18 + src/client/models/UserNotifySetting.ts | 18 + src/client/models/UserOAuthInfo.ts | 16 + .../models/UserPersonalAccessTokenInfo.ts | 16 + src/client/models/UserProfile.ts | 18 + src/client/models/UserSecurityLog.ts | 17 + src/client/models/UserSessionInfo.ts | 14 + src/client/models/UserSshKey.ts | 19 + src/client/models/Value.ts | 7 + src/client/models/Verify2FAParams.ts | 8 + src/client/models/Visibility.ts | 5 + src/client/models/WatchParams.ts | 8 + src/client/models/WikiCompareResult.ts | 19 + src/client/models/WikiPage.ts | 18 + src/client/models/WikiPageRevision.ts | 15 + src/client/models/Workspace.ts | 23 + src/client/models/WorkspaceAuditLog.ts | 19 + src/client/models/WorkspaceBilling.ts | 21 + src/client/models/WorkspaceCustomBranding.ts | 17 + src/client/models/WorkspaceDomain.ts | 16 + src/client/models/WorkspaceIntegration.ts | 19 + .../models/WorkspaceIntegrationConfig.ts | 17 + src/client/models/WorkspaceInvitation.ts | 19 + src/client/models/WorkspaceMember.ts | 19 + src/client/models/WorkspacePendingApproval.ts | 20 + src/client/models/WorkspaceSettings.ts | 18 + src/client/models/WorkspaceStats.ts | 17 + src/client/models/WorkspaceWebhook.ts | 19 + src/client/schemas/$AcceptInvitationParams.ts | 13 + .../schemas/$AcceptInvitationRequest.ts | 13 + src/client/schemas/$AddDeployKeyParams.ts | 24 + src/client/schemas/$AddDomainParams.ts | 12 + src/client/schemas/$AddGpgKeyParams.ts | 25 + src/client/schemas/$AddMemberParams.ts | 17 + src/client/schemas/$AddReplyParams.ts | 12 + src/client/schemas/$AddRepoMemberParams.ts | 17 + src/client/schemas/$AddSshKeyParams.ts | 25 + src/client/schemas/$ApiEmptyResponse.ts | 13 + src/client/schemas/$ApiErrorResponse.ts | 13 + .../schemas/$ApiResponse_BranchMergeCheck.ts | 24 + .../$ApiResponse_BranchProtectionRule.ts | 110 + .../schemas/$ApiResponse_CaptchaResponse.ts | 29 + src/client/schemas/$ApiResponse_ContextMe.ts | 43 + .../$ApiResponse_CreateInvitationResponse.ts | 17 + .../schemas/$ApiResponse_EmailResponse.ts | 17 + .../schemas/$ApiResponse_Enable2FAResponse.ts | 28 + .../$ApiResponse_Get2FAStatusResponse.ts | 25 + src/client/schemas/$ApiResponse_Issue.ts | 92 + .../schemas/$ApiResponse_IssueAssignee.ts | 38 + .../schemas/$ApiResponse_IssueComment.ts | 57 + src/client/schemas/$ApiResponse_IssueEvent.ts | 61 + src/client/schemas/$ApiResponse_IssueLabel.ts | 50 + .../$ApiResponse_IssueLabelRelation.ts | 38 + .../schemas/$ApiResponse_IssueMilestone.ts | 60 + .../schemas/$ApiResponse_IssuePrRelation.ts | 42 + .../schemas/$ApiResponse_IssueReaction.ts | 46 + .../schemas/$ApiResponse_IssueRepoRelation.ts | 42 + .../schemas/$ApiResponse_IssueSubscriber.ts | 46 + .../schemas/$ApiResponse_IssueTemplate.ts | 65 + ...ApiResponse_Option_BranchProtectionRule.ts | 115 + src/client/schemas/$ApiResponse_PrAssignee.ts | 38 + src/client/schemas/$ApiResponse_PrCheckRun.ts | 71 + src/client/schemas/$ApiResponse_PrCommit.ts | 52 + src/client/schemas/$ApiResponse_PrEvent.ts | 61 + src/client/schemas/$ApiResponse_PrFile.ts | 64 + src/client/schemas/$ApiResponse_PrLabel.ts | 50 + .../schemas/$ApiResponse_PrLabelRelation.ts | 38 + .../schemas/$ApiResponse_PrMergeStrategy.ts | 57 + src/client/schemas/$ApiResponse_PrReaction.ts | 46 + src/client/schemas/$ApiResponse_PrReview.ts | 69 + .../schemas/$ApiResponse_PrReviewComment.ts | 85 + src/client/schemas/$ApiResponse_PrStatus.ts | 64 + .../schemas/$ApiResponse_PrSubscription.ts | 46 + .../schemas/$ApiResponse_PullRequest.ts | 118 + ...sponse_Regenerate2FABackupCodesResponse.ts | 20 + .../$ApiResponse_RegisterEmailCodeResponse.ts | 18 + .../schemas/$ApiResponse_RegisterResponse.ts | 34 + src/client/schemas/$ApiResponse_Repo.ts | 98 + src/client/schemas/$ApiResponse_RepoBranch.ts | 64 + .../schemas/$ApiResponse_RepoCommitComment.ts | 79 + .../schemas/$ApiResponse_RepoCommitStatus.ts | 68 + .../schemas/$ApiResponse_RepoDeployKey.ts | 73 + src/client/schemas/$ApiResponse_RepoFork.ts | 38 + .../schemas/$ApiResponse_RepoInvitation.ts | 65 + src/client/schemas/$ApiResponse_RepoMember.ts | 61 + .../schemas/$ApiResponse_RepoRelease.ts | 73 + src/client/schemas/$ApiResponse_RepoStar.ts | 33 + src/client/schemas/$ApiResponse_RepoStats.ts | 78 + src/client/schemas/$ApiResponse_RepoTag.ts | 49 + src/client/schemas/$ApiResponse_RepoWatch.ts | 42 + .../schemas/$ApiResponse_RepoWebhook.ts | 66 + .../schemas/$ApiResponse_RsaResponse.ts | 17 + src/client/schemas/$ApiResponse_String.ts | 12 + src/client/schemas/$ApiResponse_User.ts | 74 + .../schemas/$ApiResponse_UserAppearance.ts | 56 + .../$ApiResponse_UserAvatarResponse.ts | 21 + src/client/schemas/$ApiResponse_UserDevice.ts | 62 + src/client/schemas/$ApiResponse_UserGpgKey.ts | 64 + .../schemas/$ApiResponse_UserNotifySetting.ts | 56 + .../schemas/$ApiResponse_UserOAuthInfo.ts | 49 + ...ApiResponse_UserPersonalAccessTokenInfo.ts | 54 + .../schemas/$ApiResponse_UserProfile.ts | 60 + .../schemas/$ApiResponse_UserSecurityLog.ts | 52 + .../schemas/$ApiResponse_UserSessionInfo.ts | 46 + src/client/schemas/$ApiResponse_UserSshKey.ts | 64 + .../$ApiResponse_Vec_BranchProtectionRule.ts | 113 + src/client/schemas/$ApiResponse_Vec_Issue.ts | 95 + .../schemas/$ApiResponse_Vec_IssueAssignee.ts | 41 + .../schemas/$ApiResponse_Vec_IssueComment.ts | 60 + .../schemas/$ApiResponse_Vec_IssueEvent.ts | 64 + .../schemas/$ApiResponse_Vec_IssueLabel.ts | 53 + .../$ApiResponse_Vec_IssueLabelRelation.ts | 41 + .../$ApiResponse_Vec_IssueMilestone.ts | 63 + .../$ApiResponse_Vec_IssuePrRelation.ts | 45 + .../schemas/$ApiResponse_Vec_IssueReaction.ts | 49 + .../$ApiResponse_Vec_IssueRepoRelation.ts | 45 + .../$ApiResponse_Vec_IssueSubscriber.ts | 49 + .../schemas/$ApiResponse_Vec_IssueTemplate.ts | 68 + .../schemas/$ApiResponse_Vec_PrAssignee.ts | 41 + .../schemas/$ApiResponse_Vec_PrCheckRun.ts | 74 + .../schemas/$ApiResponse_Vec_PrCommit.ts | 55 + .../schemas/$ApiResponse_Vec_PrEvent.ts | 64 + src/client/schemas/$ApiResponse_Vec_PrFile.ts | 67 + .../schemas/$ApiResponse_Vec_PrLabel.ts | 53 + .../$ApiResponse_Vec_PrLabelRelation.ts | 41 + .../schemas/$ApiResponse_Vec_PrReaction.ts | 49 + .../schemas/$ApiResponse_Vec_PrReview.ts | 72 + .../$ApiResponse_Vec_PrReviewComment.ts | 88 + .../$ApiResponse_Vec_PrSubscription.ts | 49 + .../schemas/$ApiResponse_Vec_PullRequest.ts | 121 + src/client/schemas/$ApiResponse_Vec_Repo.ts | 101 + .../schemas/$ApiResponse_Vec_RepoBranch.ts | 67 + .../$ApiResponse_Vec_RepoCommitComment.ts | 82 + .../$ApiResponse_Vec_RepoCommitStatus.ts | 71 + .../schemas/$ApiResponse_Vec_RepoDeployKey.ts | 76 + .../schemas/$ApiResponse_Vec_RepoFork.ts | 41 + .../$ApiResponse_Vec_RepoInvitation.ts | 68 + .../schemas/$ApiResponse_Vec_RepoMember.ts | 64 + .../schemas/$ApiResponse_Vec_RepoRelease.ts | 76 + .../schemas/$ApiResponse_Vec_RepoStar.ts | 36 + .../schemas/$ApiResponse_Vec_RepoTag.ts | 52 + .../schemas/$ApiResponse_Vec_RepoWatch.ts | 45 + .../schemas/$ApiResponse_Vec_RepoWebhook.ts | 69 + .../schemas/$ApiResponse_Vec_UserDevice.ts | 65 + .../schemas/$ApiResponse_Vec_UserGpgKey.ts | 67 + .../schemas/$ApiResponse_Vec_UserOAuthInfo.ts | 52 + ...esponse_Vec_UserPersonalAccessTokenInfo.ts | 57 + .../$ApiResponse_Vec_UserSecurityLog.ts | 55 + .../$ApiResponse_Vec_UserSessionInfo.ts | 49 + .../schemas/$ApiResponse_Vec_UserSshKey.ts | 67 + .../schemas/$ApiResponse_Vec_WikiPage.ts | 68 + .../$ApiResponse_Vec_WikiPageRevision.ts | 53 + .../schemas/$ApiResponse_Vec_Workspace.ts | 78 + .../$ApiResponse_Vec_WorkspaceAuditLog.ts | 69 + .../$ApiResponse_Vec_WorkspaceDomain.ts | 57 + .../$ApiResponse_Vec_WorkspaceIntegration.ts | 67 + .../$ApiResponse_Vec_WorkspaceInvitation.ts | 68 + .../$ApiResponse_Vec_WorkspaceMember.ts | 64 + ...piResponse_Vec_WorkspacePendingApproval.ts | 68 + .../$ApiResponse_Vec_WorkspaceWebhook.ts | 69 + .../schemas/$ApiResponse_WikiCompareResult.ts | 24 + src/client/schemas/$ApiResponse_WikiPage.ts | 65 + .../schemas/$ApiResponse_WikiPageRevision.ts | 50 + src/client/schemas/$ApiResponse_Workspace.ts | 75 + .../schemas/$ApiResponse_WorkspaceBilling.ts | 73 + .../$ApiResponse_WorkspaceCustomBranding.ts | 56 + .../schemas/$ApiResponse_WorkspaceDomain.ts | 54 + .../$ApiResponse_WorkspaceIntegration.ts | 64 + .../$ApiResponse_WorkspaceInvitation.ts | 65 + .../schemas/$ApiResponse_WorkspaceMember.ts | 61 + .../$ApiResponse_WorkspacePendingApproval.ts | 65 + .../schemas/$ApiResponse_WorkspaceSettings.ts | 60 + .../schemas/$ApiResponse_WorkspaceStats.ts | 63 + .../schemas/$ApiResponse_WorkspaceWebhook.ts | 66 + src/client/schemas/$BranchMergeCheck.ts | 19 + src/client/schemas/$BranchProtectionRule.ts | 105 + src/client/schemas/$CaptchaQuery.ts | 26 + src/client/schemas/$CaptchaResponse.ts | 24 + src/client/schemas/$ColorScheme.ts | 7 + src/client/schemas/$ContextMe.ts | 38 + src/client/schemas/$CreateBranchParams.ts | 16 + src/client/schemas/$CreateCheckRunParams.ts | 32 + src/client/schemas/$CreateCommentParams.ts | 17 + .../schemas/$CreateCommitCommentParams.ts | 30 + .../schemas/$CreateCommitStatusParams.ts | 33 + .../schemas/$CreateIntegrationParams.ts | 32 + src/client/schemas/$CreateInvitationParams.ts | 16 + .../schemas/$CreateInvitationResponse.ts | 12 + src/client/schemas/$CreateIssueParams.ts | 58 + .../schemas/$CreateIssueReactionParams.ts | 21 + src/client/schemas/$CreateLabelParams.ts | 20 + src/client/schemas/$CreateMilestoneParams.ts | 21 + src/client/schemas/$CreatePrLabelParams.ts | 20 + src/client/schemas/$CreatePrParams.ts | 41 + .../schemas/$CreateProtectionRuleParams.ts | 69 + src/client/schemas/$CreateReactionParams.ts | 21 + src/client/schemas/$CreateReleaseParams.ts | 33 + .../schemas/$CreateRepoInvitationParams.ts | 16 + src/client/schemas/$CreateRepoParams.ts | 36 + src/client/schemas/$CreateReviewParams.ts | 24 + src/client/schemas/$CreateTagParams.ts | 20 + src/client/schemas/$CreateTemplateParams.ts | 31 + src/client/schemas/$CreateWebhookParams.ts | 27 + src/client/schemas/$CreateWikiPageParams.ts | 16 + src/client/schemas/$CreateWorkspaceParams.ts | 20 + src/client/schemas/$Density.ts | 7 + src/client/schemas/$DeviceType.ts | 7 + src/client/schemas/$DigestFrequency.ts | 7 + src/client/schemas/$Disable2FAParams.ts | 16 + src/client/schemas/$DismissReviewParams.ts | 12 + src/client/schemas/$EmailChangeRequest.ts | 16 + src/client/schemas/$EmailResponse.ts | 12 + src/client/schemas/$EmailVerifyRequest.ts | 12 + src/client/schemas/$Enable2FAResponse.ts | 23 + src/client/schemas/$EventType.ts | 7 + src/client/schemas/$FontSize.ts | 7 + src/client/schemas/$ForkRepoParams.ts | 16 + src/client/schemas/$Get2FAStatusResponse.ts | 20 + src/client/schemas/$GitService.ts | 7 + src/client/schemas/$Issue.ts | 87 + src/client/schemas/$IssueAssignee.ts | 33 + src/client/schemas/$IssueComment.ts | 52 + src/client/schemas/$IssueEvent.ts | 56 + src/client/schemas/$IssueLabel.ts | 45 + src/client/schemas/$IssueLabelRelation.ts | 33 + src/client/schemas/$IssueListFilters.ts | 36 + src/client/schemas/$IssueMilestone.ts | 55 + src/client/schemas/$IssuePrRelation.ts | 37 + src/client/schemas/$IssueReaction.ts | 41 + src/client/schemas/$IssueRepoRelation.ts | 37 + src/client/schemas/$IssueSubscriber.ts | 41 + src/client/schemas/$IssueTemplate.ts | 60 + src/client/schemas/$KeyType.ts | 7 + src/client/schemas/$LinkPrParams.ts | 17 + src/client/schemas/$LinkRepoParams.ts | 17 + src/client/schemas/$LockIssueParams.ts | 13 + src/client/schemas/$LockPrParams.ts | 13 + src/client/schemas/$LoginParams.ts | 24 + src/client/schemas/$MergePrParams.ts | 24 + src/client/schemas/$MergeStrategyKind.ts | 7 + src/client/schemas/$MuteIssueParams.ts | 13 + src/client/schemas/$MutePrParams.ts | 13 + src/client/schemas/$Permission.ts | 7 + src/client/schemas/$PrAssignee.ts | 33 + src/client/schemas/$PrCheckRun.ts | 66 + src/client/schemas/$PrCommit.ts | 47 + src/client/schemas/$PrEvent.ts | 56 + src/client/schemas/$PrFile.ts | 59 + src/client/schemas/$PrLabel.ts | 45 + src/client/schemas/$PrLabelRelation.ts | 33 + src/client/schemas/$PrListFilters.ts | 21 + src/client/schemas/$PrMergeStrategy.ts | 52 + src/client/schemas/$PrReaction.ts | 41 + src/client/schemas/$PrReview.ts | 64 + src/client/schemas/$PrReviewComment.ts | 80 + src/client/schemas/$PrStatus.ts | 59 + src/client/schemas/$PrSubscription.ts | 41 + src/client/schemas/$Priority.ts | 7 + src/client/schemas/$Provider.ts | 7 + src/client/schemas/$PullRequest.ts | 113 + .../$Regenerate2FABackupCodesRequest.ts | 13 + .../$Regenerate2FABackupCodesResponse.ts | 15 + .../schemas/$RegisterEmailCodeParams.ts | 16 + .../schemas/$RegisterEmailCodeResponse.ts | 13 + src/client/schemas/$RegisterParams.ts | 28 + src/client/schemas/$RegisterResponse.ts | 29 + src/client/schemas/$RelationType.ts | 7 + src/client/schemas/$Repo.ts | 93 + src/client/schemas/$RepoBranch.ts | 59 + src/client/schemas/$RepoCommitComment.ts | 74 + src/client/schemas/$RepoCommitStatus.ts | 63 + src/client/schemas/$RepoDeployKey.ts | 68 + src/client/schemas/$RepoFork.ts | 33 + src/client/schemas/$RepoInvitation.ts | 60 + src/client/schemas/$RepoMember.ts | 56 + src/client/schemas/$RepoRelease.ts | 68 + src/client/schemas/$RepoStar.ts | 28 + src/client/schemas/$RepoStats.ts | 73 + src/client/schemas/$RepoTag.ts | 44 + src/client/schemas/$RepoWatch.ts | 37 + src/client/schemas/$RepoWebhook.ts | 61 + src/client/schemas/$RequestApprovalParams.ts | 16 + src/client/schemas/$RequestType.ts | 7 + src/client/schemas/$ResetPasswordRequest.ts | 12 + .../schemas/$ResetPasswordVerifyParams.ts | 16 + src/client/schemas/$ReviewApprovalRequest.ts | 13 + src/client/schemas/$ReviewCommentParams.ts | 30 + src/client/schemas/$Role.ts | 7 + src/client/schemas/$RsaResponse.ts | 12 + src/client/schemas/$Scope.ts | 7 + .../schemas/$SetBranchProtectionParams.ts | 13 + src/client/schemas/$State.ts | 7 + src/client/schemas/$Status.ts | 7 + src/client/schemas/$SubmitReviewParams.ts | 16 + src/client/schemas/$SubscriptionLevel.ts | 7 + src/client/schemas/$TargetType.ts | 7 + src/client/schemas/$Theme.ts | 7 + src/client/schemas/$TransferIssueParams.ts | 13 + src/client/schemas/$TransferOwnerParams.ts | 14 + src/client/schemas/$TransferOwnerRequest.ts | 14 + src/client/schemas/$UpdateBillingParams.ts | 21 + src/client/schemas/$UpdateBrandingParams.ts | 36 + src/client/schemas/$UpdateCheckRunParams.ts | 20 + src/client/schemas/$UpdateCommentParams.ts | 12 + .../schemas/$UpdateIntegrationParams.ts | 28 + src/client/schemas/$UpdateIssueParams.ts | 34 + src/client/schemas/$UpdateLabelParams.ts | 20 + src/client/schemas/$UpdateMemberRoleParams.ts | 12 + .../schemas/$UpdateMergeStrategyParams.ts | 32 + src/client/schemas/$UpdateMilestoneParams.ts | 25 + src/client/schemas/$UpdatePrLabelParams.ts | 20 + src/client/schemas/$UpdatePrParams.ts | 24 + .../schemas/$UpdateProtectionRuleParams.ts | 65 + src/client/schemas/$UpdateReleaseParams.ts | 24 + .../schemas/$UpdateRepoMemberRoleParams.ts | 12 + src/client/schemas/$UpdateRepoParams.ts | 24 + src/client/schemas/$UpdateTemplateParams.ts | 32 + .../schemas/$UpdateUserAccountParams.ts | 24 + .../schemas/$UpdateUserAppearanceParams.ts | 36 + .../schemas/$UpdateUserNotifySettingParams.ts | 36 + .../schemas/$UpdateUserProfileParams.ts | 40 + src/client/schemas/$UpdateWebhookParams.ts | 24 + src/client/schemas/$UpdateWikiPageParams.ts | 20 + src/client/schemas/$UpdateWorkspaceParams.ts | 24 + .../schemas/$UpdateWorkspaceSettingsParams.ts | 40 + src/client/schemas/$UploadUserAvatarParams.ts | 24 + src/client/schemas/$User.ts | 69 + src/client/schemas/$UserAppearance.ts | 51 + src/client/schemas/$UserAvatarResponse.ts | 16 + src/client/schemas/$UserDevice.ts | 57 + src/client/schemas/$UserGpgKey.ts | 59 + src/client/schemas/$UserNotifySetting.ts | 51 + src/client/schemas/$UserOAuthInfo.ts | 44 + .../schemas/$UserPersonalAccessTokenInfo.ts | 49 + src/client/schemas/$UserProfile.ts | 55 + src/client/schemas/$UserSecurityLog.ts | 47 + src/client/schemas/$UserSessionInfo.ts | 41 + src/client/schemas/$UserSshKey.ts | 59 + src/client/schemas/$Value.ts | 8 + src/client/schemas/$Verify2FAParams.ts | 12 + src/client/schemas/$Visibility.ts | 7 + src/client/schemas/$WatchParams.ts | 12 + src/client/schemas/$WikiCompareResult.ts | 19 + src/client/schemas/$WikiPage.ts | 60 + src/client/schemas/$WikiPageRevision.ts | 45 + src/client/schemas/$Workspace.ts | 70 + src/client/schemas/$WorkspaceAuditLog.ts | 61 + src/client/schemas/$WorkspaceBilling.ts | 68 + .../schemas/$WorkspaceCustomBranding.ts | 51 + src/client/schemas/$WorkspaceDomain.ts | 49 + src/client/schemas/$WorkspaceIntegration.ts | 59 + .../schemas/$WorkspaceIntegrationConfig.ts | 56 + src/client/schemas/$WorkspaceInvitation.ts | 60 + src/client/schemas/$WorkspaceMember.ts | 56 + .../schemas/$WorkspacePendingApproval.ts | 60 + src/client/schemas/$WorkspaceSettings.ts | 55 + src/client/schemas/$WorkspaceStats.ts | 58 + src/client/schemas/$WorkspaceWebhook.ts | 61 + src/client/services/AuthService.ts | 428 + src/client/services/IssuesService.ts | 2121 + src/client/services/PullRequestsService.ts | 2185 + src/client/services/ReposService.ts | 3039 ++ src/client/services/UserService.ts | 835 + src/client/services/WikiService.ts | 488 + src/client/services/WorkspacesService.ts | 1451 + src/index.css | 113 + src/index.tsx | 38 + tsconfig.app.json | 30 + tsconfig.json | 7 + tsconfig.node.json | 24 + vite.config.ts | 11 + 706 files changed, 72213 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 bun.lock create mode 100644 genapi.js create mode 100644 index.html create mode 100644 openapi.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 public/icons.svg create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/app/auth/auth.css create mode 100644 src/app/auth/components/AuthLayout.tsx create mode 100644 src/app/auth/components/CaptchaBox.tsx create mode 100644 src/app/auth/components/FormElements.tsx create mode 100644 src/app/auth/components/PinCodeInput.tsx create mode 100644 src/app/auth/hooks/useCaptcha.ts create mode 100644 src/app/auth/lib/password.ts create mode 100644 src/app/auth/lib/rsa.ts create mode 100644 src/app/auth/pages/ForgotPassword.tsx create mode 100644 src/app/auth/pages/Login.tsx create mode 100644 src/app/auth/pages/Register.tsx create mode 100644 src/app/auth/pages/ResetPassword.tsx create mode 100644 src/assets/hero.png create mode 100644 src/assets/solid.svg create mode 100644 src/assets/vite.svg create mode 100644 src/client/core/ApiError.ts create mode 100644 src/client/core/ApiRequestOptions.ts create mode 100644 src/client/core/ApiResult.ts create mode 100644 src/client/core/CancelablePromise.ts create mode 100644 src/client/core/OpenAPI.ts create mode 100644 src/client/core/request.ts create mode 100644 src/client/index.ts create mode 100644 src/client/models/AcceptInvitationParams.ts create mode 100644 src/client/models/AcceptInvitationRequest.ts create mode 100644 src/client/models/AddDeployKeyParams.ts create mode 100644 src/client/models/AddDomainParams.ts create mode 100644 src/client/models/AddGpgKeyParams.ts create mode 100644 src/client/models/AddMemberParams.ts create mode 100644 src/client/models/AddReplyParams.ts create mode 100644 src/client/models/AddRepoMemberParams.ts create mode 100644 src/client/models/AddSshKeyParams.ts create mode 100644 src/client/models/ApiEmptyResponse.ts create mode 100644 src/client/models/ApiErrorResponse.ts create mode 100644 src/client/models/ApiResponse_BranchMergeCheck.ts create mode 100644 src/client/models/ApiResponse_BranchProtectionRule.ts create mode 100644 src/client/models/ApiResponse_CaptchaResponse.ts create mode 100644 src/client/models/ApiResponse_ContextMe.ts create mode 100644 src/client/models/ApiResponse_CreateInvitationResponse.ts create mode 100644 src/client/models/ApiResponse_EmailResponse.ts create mode 100644 src/client/models/ApiResponse_Enable2FAResponse.ts create mode 100644 src/client/models/ApiResponse_Get2FAStatusResponse.ts create mode 100644 src/client/models/ApiResponse_Issue.ts create mode 100644 src/client/models/ApiResponse_IssueAssignee.ts create mode 100644 src/client/models/ApiResponse_IssueComment.ts create mode 100644 src/client/models/ApiResponse_IssueEvent.ts create mode 100644 src/client/models/ApiResponse_IssueLabel.ts create mode 100644 src/client/models/ApiResponse_IssueLabelRelation.ts create mode 100644 src/client/models/ApiResponse_IssueMilestone.ts create mode 100644 src/client/models/ApiResponse_IssuePrRelation.ts create mode 100644 src/client/models/ApiResponse_IssueReaction.ts create mode 100644 src/client/models/ApiResponse_IssueRepoRelation.ts create mode 100644 src/client/models/ApiResponse_IssueSubscriber.ts create mode 100644 src/client/models/ApiResponse_IssueTemplate.ts create mode 100644 src/client/models/ApiResponse_Option_BranchProtectionRule.ts create mode 100644 src/client/models/ApiResponse_PrAssignee.ts create mode 100644 src/client/models/ApiResponse_PrCheckRun.ts create mode 100644 src/client/models/ApiResponse_PrCommit.ts create mode 100644 src/client/models/ApiResponse_PrEvent.ts create mode 100644 src/client/models/ApiResponse_PrFile.ts create mode 100644 src/client/models/ApiResponse_PrLabel.ts create mode 100644 src/client/models/ApiResponse_PrLabelRelation.ts create mode 100644 src/client/models/ApiResponse_PrMergeStrategy.ts create mode 100644 src/client/models/ApiResponse_PrReaction.ts create mode 100644 src/client/models/ApiResponse_PrReview.ts create mode 100644 src/client/models/ApiResponse_PrReviewComment.ts create mode 100644 src/client/models/ApiResponse_PrStatus.ts create mode 100644 src/client/models/ApiResponse_PrSubscription.ts create mode 100644 src/client/models/ApiResponse_PullRequest.ts create mode 100644 src/client/models/ApiResponse_Regenerate2FABackupCodesResponse.ts create mode 100644 src/client/models/ApiResponse_RegisterEmailCodeResponse.ts create mode 100644 src/client/models/ApiResponse_RegisterResponse.ts create mode 100644 src/client/models/ApiResponse_Repo.ts create mode 100644 src/client/models/ApiResponse_RepoBranch.ts create mode 100644 src/client/models/ApiResponse_RepoCommitComment.ts create mode 100644 src/client/models/ApiResponse_RepoCommitStatus.ts create mode 100644 src/client/models/ApiResponse_RepoDeployKey.ts create mode 100644 src/client/models/ApiResponse_RepoFork.ts create mode 100644 src/client/models/ApiResponse_RepoInvitation.ts create mode 100644 src/client/models/ApiResponse_RepoMember.ts create mode 100644 src/client/models/ApiResponse_RepoRelease.ts create mode 100644 src/client/models/ApiResponse_RepoStar.ts create mode 100644 src/client/models/ApiResponse_RepoStats.ts create mode 100644 src/client/models/ApiResponse_RepoTag.ts create mode 100644 src/client/models/ApiResponse_RepoWatch.ts create mode 100644 src/client/models/ApiResponse_RepoWebhook.ts create mode 100644 src/client/models/ApiResponse_RsaResponse.ts create mode 100644 src/client/models/ApiResponse_String.ts create mode 100644 src/client/models/ApiResponse_User.ts create mode 100644 src/client/models/ApiResponse_UserAppearance.ts create mode 100644 src/client/models/ApiResponse_UserAvatarResponse.ts create mode 100644 src/client/models/ApiResponse_UserDevice.ts create mode 100644 src/client/models/ApiResponse_UserGpgKey.ts create mode 100644 src/client/models/ApiResponse_UserNotifySetting.ts create mode 100644 src/client/models/ApiResponse_UserOAuthInfo.ts create mode 100644 src/client/models/ApiResponse_UserPersonalAccessTokenInfo.ts create mode 100644 src/client/models/ApiResponse_UserProfile.ts create mode 100644 src/client/models/ApiResponse_UserSecurityLog.ts create mode 100644 src/client/models/ApiResponse_UserSessionInfo.ts create mode 100644 src/client/models/ApiResponse_UserSshKey.ts create mode 100644 src/client/models/ApiResponse_Vec_BranchProtectionRule.ts create mode 100644 src/client/models/ApiResponse_Vec_Issue.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueAssignee.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueComment.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueEvent.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueLabel.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueLabelRelation.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueMilestone.ts create mode 100644 src/client/models/ApiResponse_Vec_IssuePrRelation.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueReaction.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueRepoRelation.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueSubscriber.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueTemplate.ts create mode 100644 src/client/models/ApiResponse_Vec_PrAssignee.ts create mode 100644 src/client/models/ApiResponse_Vec_PrCheckRun.ts create mode 100644 src/client/models/ApiResponse_Vec_PrCommit.ts create mode 100644 src/client/models/ApiResponse_Vec_PrEvent.ts create mode 100644 src/client/models/ApiResponse_Vec_PrFile.ts create mode 100644 src/client/models/ApiResponse_Vec_PrLabel.ts create mode 100644 src/client/models/ApiResponse_Vec_PrLabelRelation.ts create mode 100644 src/client/models/ApiResponse_Vec_PrReaction.ts create mode 100644 src/client/models/ApiResponse_Vec_PrReview.ts create mode 100644 src/client/models/ApiResponse_Vec_PrReviewComment.ts create mode 100644 src/client/models/ApiResponse_Vec_PrSubscription.ts create mode 100644 src/client/models/ApiResponse_Vec_PullRequest.ts create mode 100644 src/client/models/ApiResponse_Vec_Repo.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoBranch.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoCommitComment.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoCommitStatus.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoDeployKey.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoFork.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoInvitation.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoMember.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoRelease.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoStar.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoTag.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoWatch.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoWebhook.ts create mode 100644 src/client/models/ApiResponse_Vec_UserDevice.ts create mode 100644 src/client/models/ApiResponse_Vec_UserGpgKey.ts create mode 100644 src/client/models/ApiResponse_Vec_UserOAuthInfo.ts create mode 100644 src/client/models/ApiResponse_Vec_UserPersonalAccessTokenInfo.ts create mode 100644 src/client/models/ApiResponse_Vec_UserSecurityLog.ts create mode 100644 src/client/models/ApiResponse_Vec_UserSessionInfo.ts create mode 100644 src/client/models/ApiResponse_Vec_UserSshKey.ts create mode 100644 src/client/models/ApiResponse_Vec_WikiPage.ts create mode 100644 src/client/models/ApiResponse_Vec_WikiPageRevision.ts create mode 100644 src/client/models/ApiResponse_Vec_Workspace.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceAuditLog.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceDomain.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceIntegration.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceInvitation.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceMember.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspacePendingApproval.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceWebhook.ts create mode 100644 src/client/models/ApiResponse_WikiCompareResult.ts create mode 100644 src/client/models/ApiResponse_WikiPage.ts create mode 100644 src/client/models/ApiResponse_WikiPageRevision.ts create mode 100644 src/client/models/ApiResponse_Workspace.ts create mode 100644 src/client/models/ApiResponse_WorkspaceBilling.ts create mode 100644 src/client/models/ApiResponse_WorkspaceCustomBranding.ts create mode 100644 src/client/models/ApiResponse_WorkspaceDomain.ts create mode 100644 src/client/models/ApiResponse_WorkspaceIntegration.ts create mode 100644 src/client/models/ApiResponse_WorkspaceInvitation.ts create mode 100644 src/client/models/ApiResponse_WorkspaceMember.ts create mode 100644 src/client/models/ApiResponse_WorkspacePendingApproval.ts create mode 100644 src/client/models/ApiResponse_WorkspaceSettings.ts create mode 100644 src/client/models/ApiResponse_WorkspaceStats.ts create mode 100644 src/client/models/ApiResponse_WorkspaceWebhook.ts create mode 100644 src/client/models/BranchMergeCheck.ts create mode 100644 src/client/models/BranchProtectionRule.ts create mode 100644 src/client/models/CaptchaQuery.ts create mode 100644 src/client/models/CaptchaResponse.ts create mode 100644 src/client/models/ColorScheme.ts create mode 100644 src/client/models/ContextMe.ts create mode 100644 src/client/models/CreateBranchParams.ts create mode 100644 src/client/models/CreateCheckRunParams.ts create mode 100644 src/client/models/CreateCommentParams.ts create mode 100644 src/client/models/CreateCommitCommentParams.ts create mode 100644 src/client/models/CreateCommitStatusParams.ts create mode 100644 src/client/models/CreateIntegrationParams.ts create mode 100644 src/client/models/CreateInvitationParams.ts create mode 100644 src/client/models/CreateInvitationResponse.ts create mode 100644 src/client/models/CreateIssueParams.ts create mode 100644 src/client/models/CreateIssueReactionParams.ts create mode 100644 src/client/models/CreateLabelParams.ts create mode 100644 src/client/models/CreateMilestoneParams.ts create mode 100644 src/client/models/CreatePrLabelParams.ts create mode 100644 src/client/models/CreatePrParams.ts create mode 100644 src/client/models/CreateProtectionRuleParams.ts create mode 100644 src/client/models/CreateReactionParams.ts create mode 100644 src/client/models/CreateReleaseParams.ts create mode 100644 src/client/models/CreateRepoInvitationParams.ts create mode 100644 src/client/models/CreateRepoParams.ts create mode 100644 src/client/models/CreateReviewParams.ts create mode 100644 src/client/models/CreateTagParams.ts create mode 100644 src/client/models/CreateTemplateParams.ts create mode 100644 src/client/models/CreateWebhookParams.ts create mode 100644 src/client/models/CreateWikiPageParams.ts create mode 100644 src/client/models/CreateWorkspaceParams.ts create mode 100644 src/client/models/Density.ts create mode 100644 src/client/models/DeviceType.ts create mode 100644 src/client/models/DigestFrequency.ts create mode 100644 src/client/models/Disable2FAParams.ts create mode 100644 src/client/models/DismissReviewParams.ts create mode 100644 src/client/models/EmailChangeRequest.ts create mode 100644 src/client/models/EmailResponse.ts create mode 100644 src/client/models/EmailVerifyRequest.ts create mode 100644 src/client/models/Enable2FAResponse.ts create mode 100644 src/client/models/EventType.ts create mode 100644 src/client/models/FontSize.ts create mode 100644 src/client/models/ForkRepoParams.ts create mode 100644 src/client/models/Get2FAStatusResponse.ts create mode 100644 src/client/models/GitService.ts create mode 100644 src/client/models/Issue.ts create mode 100644 src/client/models/IssueAssignee.ts create mode 100644 src/client/models/IssueComment.ts create mode 100644 src/client/models/IssueEvent.ts create mode 100644 src/client/models/IssueLabel.ts create mode 100644 src/client/models/IssueLabelRelation.ts create mode 100644 src/client/models/IssueListFilters.ts create mode 100644 src/client/models/IssueMilestone.ts create mode 100644 src/client/models/IssuePrRelation.ts create mode 100644 src/client/models/IssueReaction.ts create mode 100644 src/client/models/IssueRepoRelation.ts create mode 100644 src/client/models/IssueSubscriber.ts create mode 100644 src/client/models/IssueTemplate.ts create mode 100644 src/client/models/KeyType.ts create mode 100644 src/client/models/LinkPrParams.ts create mode 100644 src/client/models/LinkRepoParams.ts create mode 100644 src/client/models/LockIssueParams.ts create mode 100644 src/client/models/LockPrParams.ts create mode 100644 src/client/models/LoginParams.ts create mode 100644 src/client/models/MergePrParams.ts create mode 100644 src/client/models/MergeStrategyKind.ts create mode 100644 src/client/models/MuteIssueParams.ts create mode 100644 src/client/models/MutePrParams.ts create mode 100644 src/client/models/Permission.ts create mode 100644 src/client/models/PrAssignee.ts create mode 100644 src/client/models/PrCheckRun.ts create mode 100644 src/client/models/PrCommit.ts create mode 100644 src/client/models/PrEvent.ts create mode 100644 src/client/models/PrFile.ts create mode 100644 src/client/models/PrLabel.ts create mode 100644 src/client/models/PrLabelRelation.ts create mode 100644 src/client/models/PrListFilters.ts create mode 100644 src/client/models/PrMergeStrategy.ts create mode 100644 src/client/models/PrReaction.ts create mode 100644 src/client/models/PrReview.ts create mode 100644 src/client/models/PrReviewComment.ts create mode 100644 src/client/models/PrStatus.ts create mode 100644 src/client/models/PrSubscription.ts create mode 100644 src/client/models/Priority.ts create mode 100644 src/client/models/Provider.ts create mode 100644 src/client/models/PullRequest.ts create mode 100644 src/client/models/Regenerate2FABackupCodesRequest.ts create mode 100644 src/client/models/Regenerate2FABackupCodesResponse.ts create mode 100644 src/client/models/RegisterEmailCodeParams.ts create mode 100644 src/client/models/RegisterEmailCodeResponse.ts create mode 100644 src/client/models/RegisterParams.ts create mode 100644 src/client/models/RegisterResponse.ts create mode 100644 src/client/models/RelationType.ts create mode 100644 src/client/models/Repo.ts create mode 100644 src/client/models/RepoBranch.ts create mode 100644 src/client/models/RepoCommitComment.ts create mode 100644 src/client/models/RepoCommitStatus.ts create mode 100644 src/client/models/RepoDeployKey.ts create mode 100644 src/client/models/RepoFork.ts create mode 100644 src/client/models/RepoInvitation.ts create mode 100644 src/client/models/RepoMember.ts create mode 100644 src/client/models/RepoRelease.ts create mode 100644 src/client/models/RepoStar.ts create mode 100644 src/client/models/RepoStats.ts create mode 100644 src/client/models/RepoTag.ts create mode 100644 src/client/models/RepoWatch.ts create mode 100644 src/client/models/RepoWebhook.ts create mode 100644 src/client/models/RequestApprovalParams.ts create mode 100644 src/client/models/RequestType.ts create mode 100644 src/client/models/ResetPasswordRequest.ts create mode 100644 src/client/models/ResetPasswordVerifyParams.ts create mode 100644 src/client/models/ReviewApprovalRequest.ts create mode 100644 src/client/models/ReviewCommentParams.ts create mode 100644 src/client/models/Role.ts create mode 100644 src/client/models/RsaResponse.ts create mode 100644 src/client/models/Scope.ts create mode 100644 src/client/models/SetBranchProtectionParams.ts create mode 100644 src/client/models/State.ts create mode 100644 src/client/models/Status.ts create mode 100644 src/client/models/SubmitReviewParams.ts create mode 100644 src/client/models/SubscriptionLevel.ts create mode 100644 src/client/models/TargetType.ts create mode 100644 src/client/models/Theme.ts create mode 100644 src/client/models/TransferIssueParams.ts create mode 100644 src/client/models/TransferOwnerParams.ts create mode 100644 src/client/models/TransferOwnerRequest.ts create mode 100644 src/client/models/UpdateBillingParams.ts create mode 100644 src/client/models/UpdateBrandingParams.ts create mode 100644 src/client/models/UpdateCheckRunParams.ts create mode 100644 src/client/models/UpdateCommentParams.ts create mode 100644 src/client/models/UpdateIntegrationParams.ts create mode 100644 src/client/models/UpdateIssueParams.ts create mode 100644 src/client/models/UpdateLabelParams.ts create mode 100644 src/client/models/UpdateMemberRoleParams.ts create mode 100644 src/client/models/UpdateMergeStrategyParams.ts create mode 100644 src/client/models/UpdateMilestoneParams.ts create mode 100644 src/client/models/UpdatePrLabelParams.ts create mode 100644 src/client/models/UpdatePrParams.ts create mode 100644 src/client/models/UpdateProtectionRuleParams.ts create mode 100644 src/client/models/UpdateReleaseParams.ts create mode 100644 src/client/models/UpdateRepoMemberRoleParams.ts create mode 100644 src/client/models/UpdateRepoParams.ts create mode 100644 src/client/models/UpdateTemplateParams.ts create mode 100644 src/client/models/UpdateUserAccountParams.ts create mode 100644 src/client/models/UpdateUserAppearanceParams.ts create mode 100644 src/client/models/UpdateUserNotifySettingParams.ts create mode 100644 src/client/models/UpdateUserProfileParams.ts create mode 100644 src/client/models/UpdateWebhookParams.ts create mode 100644 src/client/models/UpdateWikiPageParams.ts create mode 100644 src/client/models/UpdateWorkspaceParams.ts create mode 100644 src/client/models/UpdateWorkspaceSettingsParams.ts create mode 100644 src/client/models/UploadUserAvatarParams.ts create mode 100644 src/client/models/User.ts create mode 100644 src/client/models/UserAppearance.ts create mode 100644 src/client/models/UserAvatarResponse.ts create mode 100644 src/client/models/UserDevice.ts create mode 100644 src/client/models/UserGpgKey.ts create mode 100644 src/client/models/UserNotifySetting.ts create mode 100644 src/client/models/UserOAuthInfo.ts create mode 100644 src/client/models/UserPersonalAccessTokenInfo.ts create mode 100644 src/client/models/UserProfile.ts create mode 100644 src/client/models/UserSecurityLog.ts create mode 100644 src/client/models/UserSessionInfo.ts create mode 100644 src/client/models/UserSshKey.ts create mode 100644 src/client/models/Value.ts create mode 100644 src/client/models/Verify2FAParams.ts create mode 100644 src/client/models/Visibility.ts create mode 100644 src/client/models/WatchParams.ts create mode 100644 src/client/models/WikiCompareResult.ts create mode 100644 src/client/models/WikiPage.ts create mode 100644 src/client/models/WikiPageRevision.ts create mode 100644 src/client/models/Workspace.ts create mode 100644 src/client/models/WorkspaceAuditLog.ts create mode 100644 src/client/models/WorkspaceBilling.ts create mode 100644 src/client/models/WorkspaceCustomBranding.ts create mode 100644 src/client/models/WorkspaceDomain.ts create mode 100644 src/client/models/WorkspaceIntegration.ts create mode 100644 src/client/models/WorkspaceIntegrationConfig.ts create mode 100644 src/client/models/WorkspaceInvitation.ts create mode 100644 src/client/models/WorkspaceMember.ts create mode 100644 src/client/models/WorkspacePendingApproval.ts create mode 100644 src/client/models/WorkspaceSettings.ts create mode 100644 src/client/models/WorkspaceStats.ts create mode 100644 src/client/models/WorkspaceWebhook.ts create mode 100644 src/client/schemas/$AcceptInvitationParams.ts create mode 100644 src/client/schemas/$AcceptInvitationRequest.ts create mode 100644 src/client/schemas/$AddDeployKeyParams.ts create mode 100644 src/client/schemas/$AddDomainParams.ts create mode 100644 src/client/schemas/$AddGpgKeyParams.ts create mode 100644 src/client/schemas/$AddMemberParams.ts create mode 100644 src/client/schemas/$AddReplyParams.ts create mode 100644 src/client/schemas/$AddRepoMemberParams.ts create mode 100644 src/client/schemas/$AddSshKeyParams.ts create mode 100644 src/client/schemas/$ApiEmptyResponse.ts create mode 100644 src/client/schemas/$ApiErrorResponse.ts create mode 100644 src/client/schemas/$ApiResponse_BranchMergeCheck.ts create mode 100644 src/client/schemas/$ApiResponse_BranchProtectionRule.ts create mode 100644 src/client/schemas/$ApiResponse_CaptchaResponse.ts create mode 100644 src/client/schemas/$ApiResponse_ContextMe.ts create mode 100644 src/client/schemas/$ApiResponse_CreateInvitationResponse.ts create mode 100644 src/client/schemas/$ApiResponse_EmailResponse.ts create mode 100644 src/client/schemas/$ApiResponse_Enable2FAResponse.ts create mode 100644 src/client/schemas/$ApiResponse_Get2FAStatusResponse.ts create mode 100644 src/client/schemas/$ApiResponse_Issue.ts create mode 100644 src/client/schemas/$ApiResponse_IssueAssignee.ts create mode 100644 src/client/schemas/$ApiResponse_IssueComment.ts create mode 100644 src/client/schemas/$ApiResponse_IssueEvent.ts create mode 100644 src/client/schemas/$ApiResponse_IssueLabel.ts create mode 100644 src/client/schemas/$ApiResponse_IssueLabelRelation.ts create mode 100644 src/client/schemas/$ApiResponse_IssueMilestone.ts create mode 100644 src/client/schemas/$ApiResponse_IssuePrRelation.ts create mode 100644 src/client/schemas/$ApiResponse_IssueReaction.ts create mode 100644 src/client/schemas/$ApiResponse_IssueRepoRelation.ts create mode 100644 src/client/schemas/$ApiResponse_IssueSubscriber.ts create mode 100644 src/client/schemas/$ApiResponse_IssueTemplate.ts create mode 100644 src/client/schemas/$ApiResponse_Option_BranchProtectionRule.ts create mode 100644 src/client/schemas/$ApiResponse_PrAssignee.ts create mode 100644 src/client/schemas/$ApiResponse_PrCheckRun.ts create mode 100644 src/client/schemas/$ApiResponse_PrCommit.ts create mode 100644 src/client/schemas/$ApiResponse_PrEvent.ts create mode 100644 src/client/schemas/$ApiResponse_PrFile.ts create mode 100644 src/client/schemas/$ApiResponse_PrLabel.ts create mode 100644 src/client/schemas/$ApiResponse_PrLabelRelation.ts create mode 100644 src/client/schemas/$ApiResponse_PrMergeStrategy.ts create mode 100644 src/client/schemas/$ApiResponse_PrReaction.ts create mode 100644 src/client/schemas/$ApiResponse_PrReview.ts create mode 100644 src/client/schemas/$ApiResponse_PrReviewComment.ts create mode 100644 src/client/schemas/$ApiResponse_PrStatus.ts create mode 100644 src/client/schemas/$ApiResponse_PrSubscription.ts create mode 100644 src/client/schemas/$ApiResponse_PullRequest.ts create mode 100644 src/client/schemas/$ApiResponse_Regenerate2FABackupCodesResponse.ts create mode 100644 src/client/schemas/$ApiResponse_RegisterEmailCodeResponse.ts create mode 100644 src/client/schemas/$ApiResponse_RegisterResponse.ts create mode 100644 src/client/schemas/$ApiResponse_Repo.ts create mode 100644 src/client/schemas/$ApiResponse_RepoBranch.ts create mode 100644 src/client/schemas/$ApiResponse_RepoCommitComment.ts create mode 100644 src/client/schemas/$ApiResponse_RepoCommitStatus.ts create mode 100644 src/client/schemas/$ApiResponse_RepoDeployKey.ts create mode 100644 src/client/schemas/$ApiResponse_RepoFork.ts create mode 100644 src/client/schemas/$ApiResponse_RepoInvitation.ts create mode 100644 src/client/schemas/$ApiResponse_RepoMember.ts create mode 100644 src/client/schemas/$ApiResponse_RepoRelease.ts create mode 100644 src/client/schemas/$ApiResponse_RepoStar.ts create mode 100644 src/client/schemas/$ApiResponse_RepoStats.ts create mode 100644 src/client/schemas/$ApiResponse_RepoTag.ts create mode 100644 src/client/schemas/$ApiResponse_RepoWatch.ts create mode 100644 src/client/schemas/$ApiResponse_RepoWebhook.ts create mode 100644 src/client/schemas/$ApiResponse_RsaResponse.ts create mode 100644 src/client/schemas/$ApiResponse_String.ts create mode 100644 src/client/schemas/$ApiResponse_User.ts create mode 100644 src/client/schemas/$ApiResponse_UserAppearance.ts create mode 100644 src/client/schemas/$ApiResponse_UserAvatarResponse.ts create mode 100644 src/client/schemas/$ApiResponse_UserDevice.ts create mode 100644 src/client/schemas/$ApiResponse_UserGpgKey.ts create mode 100644 src/client/schemas/$ApiResponse_UserNotifySetting.ts create mode 100644 src/client/schemas/$ApiResponse_UserOAuthInfo.ts create mode 100644 src/client/schemas/$ApiResponse_UserPersonalAccessTokenInfo.ts create mode 100644 src/client/schemas/$ApiResponse_UserProfile.ts create mode 100644 src/client/schemas/$ApiResponse_UserSecurityLog.ts create mode 100644 src/client/schemas/$ApiResponse_UserSessionInfo.ts create mode 100644 src/client/schemas/$ApiResponse_UserSshKey.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_BranchProtectionRule.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_Issue.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueAssignee.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueComment.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueEvent.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueLabel.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueLabelRelation.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueMilestone.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssuePrRelation.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueReaction.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueRepoRelation.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueSubscriber.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueTemplate.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrAssignee.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrCheckRun.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrCommit.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrEvent.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrFile.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrLabel.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrLabelRelation.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrReaction.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrReview.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrReviewComment.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrSubscription.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PullRequest.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_Repo.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoBranch.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoCommitComment.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoCommitStatus.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoDeployKey.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoFork.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoInvitation.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoMember.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoRelease.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoStar.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoTag.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoWatch.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoWebhook.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserDevice.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserGpgKey.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserOAuthInfo.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserPersonalAccessTokenInfo.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserSecurityLog.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserSessionInfo.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserSshKey.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WikiPage.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WikiPageRevision.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_Workspace.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceAuditLog.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceDomain.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceIntegration.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceInvitation.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceMember.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspacePendingApproval.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceWebhook.ts create mode 100644 src/client/schemas/$ApiResponse_WikiCompareResult.ts create mode 100644 src/client/schemas/$ApiResponse_WikiPage.ts create mode 100644 src/client/schemas/$ApiResponse_WikiPageRevision.ts create mode 100644 src/client/schemas/$ApiResponse_Workspace.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceBilling.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceCustomBranding.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceDomain.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceIntegration.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceInvitation.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceMember.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspacePendingApproval.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceSettings.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceStats.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceWebhook.ts create mode 100644 src/client/schemas/$BranchMergeCheck.ts create mode 100644 src/client/schemas/$BranchProtectionRule.ts create mode 100644 src/client/schemas/$CaptchaQuery.ts create mode 100644 src/client/schemas/$CaptchaResponse.ts create mode 100644 src/client/schemas/$ColorScheme.ts create mode 100644 src/client/schemas/$ContextMe.ts create mode 100644 src/client/schemas/$CreateBranchParams.ts create mode 100644 src/client/schemas/$CreateCheckRunParams.ts create mode 100644 src/client/schemas/$CreateCommentParams.ts create mode 100644 src/client/schemas/$CreateCommitCommentParams.ts create mode 100644 src/client/schemas/$CreateCommitStatusParams.ts create mode 100644 src/client/schemas/$CreateIntegrationParams.ts create mode 100644 src/client/schemas/$CreateInvitationParams.ts create mode 100644 src/client/schemas/$CreateInvitationResponse.ts create mode 100644 src/client/schemas/$CreateIssueParams.ts create mode 100644 src/client/schemas/$CreateIssueReactionParams.ts create mode 100644 src/client/schemas/$CreateLabelParams.ts create mode 100644 src/client/schemas/$CreateMilestoneParams.ts create mode 100644 src/client/schemas/$CreatePrLabelParams.ts create mode 100644 src/client/schemas/$CreatePrParams.ts create mode 100644 src/client/schemas/$CreateProtectionRuleParams.ts create mode 100644 src/client/schemas/$CreateReactionParams.ts create mode 100644 src/client/schemas/$CreateReleaseParams.ts create mode 100644 src/client/schemas/$CreateRepoInvitationParams.ts create mode 100644 src/client/schemas/$CreateRepoParams.ts create mode 100644 src/client/schemas/$CreateReviewParams.ts create mode 100644 src/client/schemas/$CreateTagParams.ts create mode 100644 src/client/schemas/$CreateTemplateParams.ts create mode 100644 src/client/schemas/$CreateWebhookParams.ts create mode 100644 src/client/schemas/$CreateWikiPageParams.ts create mode 100644 src/client/schemas/$CreateWorkspaceParams.ts create mode 100644 src/client/schemas/$Density.ts create mode 100644 src/client/schemas/$DeviceType.ts create mode 100644 src/client/schemas/$DigestFrequency.ts create mode 100644 src/client/schemas/$Disable2FAParams.ts create mode 100644 src/client/schemas/$DismissReviewParams.ts create mode 100644 src/client/schemas/$EmailChangeRequest.ts create mode 100644 src/client/schemas/$EmailResponse.ts create mode 100644 src/client/schemas/$EmailVerifyRequest.ts create mode 100644 src/client/schemas/$Enable2FAResponse.ts create mode 100644 src/client/schemas/$EventType.ts create mode 100644 src/client/schemas/$FontSize.ts create mode 100644 src/client/schemas/$ForkRepoParams.ts create mode 100644 src/client/schemas/$Get2FAStatusResponse.ts create mode 100644 src/client/schemas/$GitService.ts create mode 100644 src/client/schemas/$Issue.ts create mode 100644 src/client/schemas/$IssueAssignee.ts create mode 100644 src/client/schemas/$IssueComment.ts create mode 100644 src/client/schemas/$IssueEvent.ts create mode 100644 src/client/schemas/$IssueLabel.ts create mode 100644 src/client/schemas/$IssueLabelRelation.ts create mode 100644 src/client/schemas/$IssueListFilters.ts create mode 100644 src/client/schemas/$IssueMilestone.ts create mode 100644 src/client/schemas/$IssuePrRelation.ts create mode 100644 src/client/schemas/$IssueReaction.ts create mode 100644 src/client/schemas/$IssueRepoRelation.ts create mode 100644 src/client/schemas/$IssueSubscriber.ts create mode 100644 src/client/schemas/$IssueTemplate.ts create mode 100644 src/client/schemas/$KeyType.ts create mode 100644 src/client/schemas/$LinkPrParams.ts create mode 100644 src/client/schemas/$LinkRepoParams.ts create mode 100644 src/client/schemas/$LockIssueParams.ts create mode 100644 src/client/schemas/$LockPrParams.ts create mode 100644 src/client/schemas/$LoginParams.ts create mode 100644 src/client/schemas/$MergePrParams.ts create mode 100644 src/client/schemas/$MergeStrategyKind.ts create mode 100644 src/client/schemas/$MuteIssueParams.ts create mode 100644 src/client/schemas/$MutePrParams.ts create mode 100644 src/client/schemas/$Permission.ts create mode 100644 src/client/schemas/$PrAssignee.ts create mode 100644 src/client/schemas/$PrCheckRun.ts create mode 100644 src/client/schemas/$PrCommit.ts create mode 100644 src/client/schemas/$PrEvent.ts create mode 100644 src/client/schemas/$PrFile.ts create mode 100644 src/client/schemas/$PrLabel.ts create mode 100644 src/client/schemas/$PrLabelRelation.ts create mode 100644 src/client/schemas/$PrListFilters.ts create mode 100644 src/client/schemas/$PrMergeStrategy.ts create mode 100644 src/client/schemas/$PrReaction.ts create mode 100644 src/client/schemas/$PrReview.ts create mode 100644 src/client/schemas/$PrReviewComment.ts create mode 100644 src/client/schemas/$PrStatus.ts create mode 100644 src/client/schemas/$PrSubscription.ts create mode 100644 src/client/schemas/$Priority.ts create mode 100644 src/client/schemas/$Provider.ts create mode 100644 src/client/schemas/$PullRequest.ts create mode 100644 src/client/schemas/$Regenerate2FABackupCodesRequest.ts create mode 100644 src/client/schemas/$Regenerate2FABackupCodesResponse.ts create mode 100644 src/client/schemas/$RegisterEmailCodeParams.ts create mode 100644 src/client/schemas/$RegisterEmailCodeResponse.ts create mode 100644 src/client/schemas/$RegisterParams.ts create mode 100644 src/client/schemas/$RegisterResponse.ts create mode 100644 src/client/schemas/$RelationType.ts create mode 100644 src/client/schemas/$Repo.ts create mode 100644 src/client/schemas/$RepoBranch.ts create mode 100644 src/client/schemas/$RepoCommitComment.ts create mode 100644 src/client/schemas/$RepoCommitStatus.ts create mode 100644 src/client/schemas/$RepoDeployKey.ts create mode 100644 src/client/schemas/$RepoFork.ts create mode 100644 src/client/schemas/$RepoInvitation.ts create mode 100644 src/client/schemas/$RepoMember.ts create mode 100644 src/client/schemas/$RepoRelease.ts create mode 100644 src/client/schemas/$RepoStar.ts create mode 100644 src/client/schemas/$RepoStats.ts create mode 100644 src/client/schemas/$RepoTag.ts create mode 100644 src/client/schemas/$RepoWatch.ts create mode 100644 src/client/schemas/$RepoWebhook.ts create mode 100644 src/client/schemas/$RequestApprovalParams.ts create mode 100644 src/client/schemas/$RequestType.ts create mode 100644 src/client/schemas/$ResetPasswordRequest.ts create mode 100644 src/client/schemas/$ResetPasswordVerifyParams.ts create mode 100644 src/client/schemas/$ReviewApprovalRequest.ts create mode 100644 src/client/schemas/$ReviewCommentParams.ts create mode 100644 src/client/schemas/$Role.ts create mode 100644 src/client/schemas/$RsaResponse.ts create mode 100644 src/client/schemas/$Scope.ts create mode 100644 src/client/schemas/$SetBranchProtectionParams.ts create mode 100644 src/client/schemas/$State.ts create mode 100644 src/client/schemas/$Status.ts create mode 100644 src/client/schemas/$SubmitReviewParams.ts create mode 100644 src/client/schemas/$SubscriptionLevel.ts create mode 100644 src/client/schemas/$TargetType.ts create mode 100644 src/client/schemas/$Theme.ts create mode 100644 src/client/schemas/$TransferIssueParams.ts create mode 100644 src/client/schemas/$TransferOwnerParams.ts create mode 100644 src/client/schemas/$TransferOwnerRequest.ts create mode 100644 src/client/schemas/$UpdateBillingParams.ts create mode 100644 src/client/schemas/$UpdateBrandingParams.ts create mode 100644 src/client/schemas/$UpdateCheckRunParams.ts create mode 100644 src/client/schemas/$UpdateCommentParams.ts create mode 100644 src/client/schemas/$UpdateIntegrationParams.ts create mode 100644 src/client/schemas/$UpdateIssueParams.ts create mode 100644 src/client/schemas/$UpdateLabelParams.ts create mode 100644 src/client/schemas/$UpdateMemberRoleParams.ts create mode 100644 src/client/schemas/$UpdateMergeStrategyParams.ts create mode 100644 src/client/schemas/$UpdateMilestoneParams.ts create mode 100644 src/client/schemas/$UpdatePrLabelParams.ts create mode 100644 src/client/schemas/$UpdatePrParams.ts create mode 100644 src/client/schemas/$UpdateProtectionRuleParams.ts create mode 100644 src/client/schemas/$UpdateReleaseParams.ts create mode 100644 src/client/schemas/$UpdateRepoMemberRoleParams.ts create mode 100644 src/client/schemas/$UpdateRepoParams.ts create mode 100644 src/client/schemas/$UpdateTemplateParams.ts create mode 100644 src/client/schemas/$UpdateUserAccountParams.ts create mode 100644 src/client/schemas/$UpdateUserAppearanceParams.ts create mode 100644 src/client/schemas/$UpdateUserNotifySettingParams.ts create mode 100644 src/client/schemas/$UpdateUserProfileParams.ts create mode 100644 src/client/schemas/$UpdateWebhookParams.ts create mode 100644 src/client/schemas/$UpdateWikiPageParams.ts create mode 100644 src/client/schemas/$UpdateWorkspaceParams.ts create mode 100644 src/client/schemas/$UpdateWorkspaceSettingsParams.ts create mode 100644 src/client/schemas/$UploadUserAvatarParams.ts create mode 100644 src/client/schemas/$User.ts create mode 100644 src/client/schemas/$UserAppearance.ts create mode 100644 src/client/schemas/$UserAvatarResponse.ts create mode 100644 src/client/schemas/$UserDevice.ts create mode 100644 src/client/schemas/$UserGpgKey.ts create mode 100644 src/client/schemas/$UserNotifySetting.ts create mode 100644 src/client/schemas/$UserOAuthInfo.ts create mode 100644 src/client/schemas/$UserPersonalAccessTokenInfo.ts create mode 100644 src/client/schemas/$UserProfile.ts create mode 100644 src/client/schemas/$UserSecurityLog.ts create mode 100644 src/client/schemas/$UserSessionInfo.ts create mode 100644 src/client/schemas/$UserSshKey.ts create mode 100644 src/client/schemas/$Value.ts create mode 100644 src/client/schemas/$Verify2FAParams.ts create mode 100644 src/client/schemas/$Visibility.ts create mode 100644 src/client/schemas/$WatchParams.ts create mode 100644 src/client/schemas/$WikiCompareResult.ts create mode 100644 src/client/schemas/$WikiPage.ts create mode 100644 src/client/schemas/$WikiPageRevision.ts create mode 100644 src/client/schemas/$Workspace.ts create mode 100644 src/client/schemas/$WorkspaceAuditLog.ts create mode 100644 src/client/schemas/$WorkspaceBilling.ts create mode 100644 src/client/schemas/$WorkspaceCustomBranding.ts create mode 100644 src/client/schemas/$WorkspaceDomain.ts create mode 100644 src/client/schemas/$WorkspaceIntegration.ts create mode 100644 src/client/schemas/$WorkspaceIntegrationConfig.ts create mode 100644 src/client/schemas/$WorkspaceInvitation.ts create mode 100644 src/client/schemas/$WorkspaceMember.ts create mode 100644 src/client/schemas/$WorkspacePendingApproval.ts create mode 100644 src/client/schemas/$WorkspaceSettings.ts create mode 100644 src/client/schemas/$WorkspaceStats.ts create mode 100644 src/client/schemas/$WorkspaceWebhook.ts create mode 100644 src/client/services/AuthService.ts create mode 100644 src/client/services/IssuesService.ts create mode 100644 src/client/services/PullRequestsService.ts create mode 100644 src/client/services/ReposService.ts create mode 100644 src/client/services/UserService.ts create mode 100644 src/client/services/WikiService.ts create mode 100644 src/client/services/WorkspacesService.ts create mode 100644 src/index.css create mode 100644 src/index.tsx create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..167c567 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +## Usage + +```bash +$ npm install # or pnpm install or yarn install +``` + +### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs) + +## Available Scripts + +In the project directory, you can run: + +### `npm run dev` + +Runs the app in the development mode.
+Open [http://localhost:5173](http://localhost:5173) to view it in the browser. + +### `npm run build` + +Builds the app for production to the `dist` folder.
+It correctly bundles Solid in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +## Deployment + +Learn more about deploying your application with the [documentations](https://vite.dev/guide/static-deploy.html) diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..9dce89c --- /dev/null +++ b/bun.lock @@ -0,0 +1,419 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "appwebks", + "dependencies": { + "@solid-primitives/history": "^0.2.3", + "@solid-primitives/i18n": "^2.2.1", + "@solid-primitives/keyboard": "^1.3.5", + "@solid-primitives/sse": "^0.0.102", + "@solid-primitives/storage": "^4.3.4", + "@solid-primitives/websocket": "^1.4.0", + "@solidjs/meta": "^0.29.4", + "@solidjs/router": "^0.16.1", + "@tailwindcss/vite": "^4.3.0", + "@tanstack/solid-query": "^5.101.0", + "axios": "^1.17.0", + "ky": "^2.0.2", + "solid-icons": "^1.2.0", + "solid-js": "^1.9.12", + "tailwindcss": "^4.3.0", + "zod": "^4.4.3", + }, + "devDependencies": { + "@types/node": "^24.12.3", + "openapi-typescript-codegen": "^0.30.0", + "typescript": "~6.0.2", + "vite": "^8.0.12", + "vite-plugin-solid": "^2.11.12", + }, + }, + }, + "packages": { + "@apidevtools/json-schema-ref-parser": ["@apidevtools/json-schema-ref-parser@14.2.1", "https://registry.npmmirror.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.2.1.tgz", { "dependencies": { "js-yaml": "^4.1.0" }, "peerDependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg=="], + + "@babel/code-frame": ["@babel/code-frame@7.29.7", "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.29.7.tgz", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.7", "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.29.7.tgz", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], + + "@babel/core": ["@babel/core@7.29.7", "https://registry.npmmirror.com/@babel/core/-/core-7.29.7.tgz", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], + + "@babel/generator": ["@babel/generator@7.29.7", "https://registry.npmmirror.com/@babel/generator/-/generator-7.29.7.tgz", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], + + "@babel/helpers": ["@babel/helpers@7.29.7", "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.29.7.tgz", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], + + "@babel/parser": ["@babel/parser@7.29.7", "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.29.7", "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A=="], + + "@babel/template": ["@babel/template@7.29.7", "https://registry.npmmirror.com/@babel/template/-/template-7.29.7.tgz", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], + + "@babel/traverse": ["@babel/traverse@7.29.7", "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.29.7.tgz", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="], + + "@babel/types": ["@babel/types@7.29.7", "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], + + "@emnapi/core": ["@emnapi/core@1.10.0", "https://registry.npmmirror.com/@emnapi/core/-/core-1.10.0.tgz", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.10.0.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + + "@oxc-project/types": ["@oxc-project/types@0.133.0", "https://registry.npmmirror.com/@oxc-project/types/-/types-0.133.0.tgz", {}, "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", { "os": "android", "cpu": "arm64" }, "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", { "os": "linux", "cpu": "arm" }, "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", { "os": "linux", "cpu": "ppc64" }, "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", { "os": "linux", "cpu": "s390x" }, "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", { "os": "linux", "cpu": "x64" }, "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", { "os": "linux", "cpu": "x64" }, "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", { "os": "none", "cpu": "arm64" }, "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.3", "https://registry.npmmirror.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", { "os": "win32", "cpu": "x64" }, "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "@solid-primitives/event-listener": ["@solid-primitives/event-listener@2.4.5", "https://registry.npmmirror.com/@solid-primitives/event-listener/-/event-listener-2.4.5.tgz", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-nwRV558mIabl4yVAhZKY8cb6G+O1F0M6Z75ttTu5hk+SxdOnKSGj+eetDIu7Oax1P138ZdUU01qnBPR8rnxaEA=="], + + "@solid-primitives/history": ["@solid-primitives/history@0.2.3", "https://registry.npmmirror.com/@solid-primitives/history/-/history-0.2.3.tgz", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-Qy9Xh5T2NNnPFhMWFDFBeXG118A1te/rqbroMETRNCLdyggAbjjX0KCPp7yCTYPG0KpySTUFLoC3NDiZRfSO6g=="], + + "@solid-primitives/i18n": ["@solid-primitives/i18n@2.2.1", "https://registry.npmmirror.com/@solid-primitives/i18n/-/i18n-2.2.1.tgz", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-TnTnE2Ku11MGYZ1JzhJ8pYscwg1fr9MteoYxPwsfxWfh9Jp5K7RRJncJn9BhOHvNLwROjqOHZ46PT7sPHqbcXw=="], + + "@solid-primitives/keyboard": ["@solid-primitives/keyboard@1.3.5", "https://registry.npmmirror.com/@solid-primitives/keyboard/-/keyboard-1.3.5.tgz", { "dependencies": { "@solid-primitives/event-listener": "^2.4.5", "@solid-primitives/rootless": "^1.5.3", "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-sav+l+PL+74z3yaftVs7qd8c2SXkqzuxPOVibUe5wYMt+U5Hxp3V3XCPgBPN2I6cANjvoFtz0NiU8uHVLdi9FQ=="], + + "@solid-primitives/rootless": ["@solid-primitives/rootless@1.5.3", "https://registry.npmmirror.com/@solid-primitives/rootless/-/rootless-1.5.3.tgz", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-N8cIDAHbWcLahNRLr0knAAQvXyEdEMoAZvIMZKmhNb1mlx9e2UOv9BRD5YNwQUJwbNoYVhhLwFOEOcVXFx0HqA=="], + + "@solid-primitives/sse": ["@solid-primitives/sse@0.0.102", "https://registry.npmmirror.com/@solid-primitives/sse/-/sse-0.0.102.tgz", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-2s/MMoGfK03lrFjVlYk1lIW1ltlPgaMehLjxBzknBzkNPyEuAP2Xco5vxGTY9L6UQJuzNQ4S8oOpmQaaO5l5jg=="], + + "@solid-primitives/storage": ["@solid-primitives/storage@4.3.4", "https://registry.npmmirror.com/@solid-primitives/storage/-/storage-4.3.4.tgz", { "dependencies": { "@solid-primitives/utils": "^6.4.0" }, "peerDependencies": { "@tauri-apps/plugin-store": "*", "solid-js": "^1.6.12", "solid-start": "*" }, "optionalPeers": ["@tauri-apps/plugin-store", "solid-start"] }, "sha512-GSxPAIuyxhJWOcv7n10iv3aid5oHN3KUgyA9IV0GYWlPpgyGs43aS9E85b0VXDLoH+D4ThNK8+2WEJ8B/S6Ccg=="], + + "@solid-primitives/utils": ["@solid-primitives/utils@6.4.0", "https://registry.npmmirror.com/@solid-primitives/utils/-/utils-6.4.0.tgz", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-AeGTBg8Wtkh/0s+evyLtP8piQoS4wyqqQaAFs2HJcFMMjYAtUgo+ZPduRXLjPlqKVc2ejeR544oeqpbn8Egn8A=="], + + "@solid-primitives/websocket": ["@solid-primitives/websocket@1.4.0", "https://registry.npmmirror.com/@solid-primitives/websocket/-/websocket-1.4.0.tgz", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-XJIObSUrg6oBvBP1z8CF1lg3npWEgOYc08CbGv9SIIpruG0ROa1cAwEuVLksF3oqZl8NIMKbDFWttD45q0LpIg=="], + + "@solidjs/meta": ["@solidjs/meta@0.29.4", "https://registry.npmmirror.com/@solidjs/meta/-/meta-0.29.4.tgz", { "peerDependencies": { "solid-js": ">=1.8.4" } }, "sha512-zdIWBGpR9zGx1p1bzIPqF5Gs+Ks/BH8R6fWhmUa/dcK1L2rUC8BAcZJzNRYBQv74kScf1TSOs0EY//Vd/I0V8g=="], + + "@solidjs/router": ["@solidjs/router@0.16.1", "https://registry.npmmirror.com/@solidjs/router/-/router-0.16.1.tgz", { "peerDependencies": { "solid-js": "^1.8.6" } }, "sha512-IhyjedgC6LRpw/8CPGGI89FrV+r0xTHzOl2c4CRyzYQ1bLepJxbVI1LLKvsavMWY5TRBRacV7hAeOhuTXkjiqg=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.3.0.tgz", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.3.0.tgz", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.3.0", "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.3.0.tgz", { "dependencies": { "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "tailwindcss": "4.3.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw=="], + + "@tanstack/query-core": ["@tanstack/query-core@5.101.0", "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.101.0.tgz", {}, "sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow=="], + + "@tanstack/solid-query": ["@tanstack/solid-query@5.101.0", "https://registry.npmmirror.com/@tanstack/solid-query/-/solid-query-5.101.0.tgz", { "dependencies": { "@tanstack/query-core": "5.101.0" }, "peerDependencies": { "solid-js": "^1.6.0" } }, "sha512-XoPWynbaWquvSisMvUirakfD9OmLas1cOwt1gBDUTn8HC2CVkZm+O/jBgEa5SL5LrY6vxmWjzzskhXkywLfymw=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/node": ["@types/node@24.13.1", "https://registry.npmmirror.com/@types/node/-/node-24.13.1.tgz", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-RSpUJGmvsJ1ZeBehQZFhIdpsz+bIpES0nIQXko4Ybq+N+kX6XvOq3Jo+iJ82FWLdblFq85AsMikd3m35jgezYg=="], + + "agent-base": ["agent-base@6.0.2", "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "argparse": ["argparse@2.0.1", "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "asynckit": ["asynckit@0.4.0", "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "axios": ["axios@1.17.0", "https://registry.npmmirror.com/axios/-/axios-1.17.0.tgz", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw=="], + + "babel-plugin-jsx-dom-expressions": ["babel-plugin-jsx-dom-expressions@0.40.7", "https://registry.npmmirror.com/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.40.7.tgz", { "dependencies": { "@babel/helper-module-imports": "7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/types": "^7.20.7", "html-entities": "2.3.3", "parse5": "^7.1.2" }, "peerDependencies": { "@babel/core": "^7.20.12" } }, "sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ=="], + + "babel-preset-solid": ["babel-preset-solid@1.9.12", "https://registry.npmmirror.com/babel-preset-solid/-/babel-preset-solid-1.9.12.tgz", { "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.40.6" }, "peerDependencies": { "@babel/core": "^7.0.0", "solid-js": "^1.9.12" }, "optionalPeers": ["solid-js"] }, "sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.34", "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw=="], + + "browserslist": ["browserslist@4.28.2", "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.2.tgz", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "camelcase": ["camelcase@6.3.0", "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001797", "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz", {}, "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w=="], + + "combined-stream": ["combined-stream@1.0.8", "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "commander": ["commander@14.0.3", "https://registry.npmmirror.com/commander/-/commander-14.0.3.tgz", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "convert-source-map": ["convert-source-map@2.0.0", "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "csstype": ["csstype@3.2.3", "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "debug": ["debug@4.4.3", "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "delayed-stream": ["delayed-stream@1.0.0", "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "detect-libc": ["detect-libc@2.1.2", "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "dunder-proto": ["dunder-proto@1.0.1", "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.368", "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.368.tgz", {}, "sha512-7RckJJK4uESJF9PxvfMWd3TGqIiieUTG4HxnKaKuIpGbcr+r2ZEB3g2gAhCP3Fqm42vJSzLfgab9eva/C4/XVw=="], + + "enhanced-resolve": ["enhanced-resolve@5.23.0", "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA=="], + + "entities": ["entities@6.0.1", "https://registry.npmmirror.com/entities/-/entities-6.0.1.tgz", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "es-define-property": ["es-define-property@1.0.1", "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.2", "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "escalade": ["escalade@3.2.0", "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "fdir": ["fdir@6.5.0", "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "follow-redirects": ["follow-redirects@1.16.0", "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.16.0.tgz", { "peerDependencies": { "debug": "*" }, "optionalPeers": ["debug"] }, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], + + "form-data": ["form-data@4.0.5", "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + + "fs-extra": ["fs-extra@11.3.5", "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.5.tgz", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg=="], + + "fsevents": ["fsevents@2.3.3", "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gensync": ["gensync@1.0.0-beta.2", "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "gopd": ["gopd@1.2.0", "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "handlebars": ["handlebars@4.7.9", "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.9.tgz", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ=="], + + "has-symbols": ["has-symbols@1.1.0", "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.4", "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "html-entities": ["html-entities@2.3.3", "https://registry.npmmirror.com/html-entities/-/html-entities-2.3.3.tgz", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], + + "https-proxy-agent": ["https-proxy-agent@5.0.1", "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + + "is-what": ["is-what@4.1.16", "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", {}, "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="], + + "jiti": ["jiti@2.7.0", "https://registry.npmmirror.com/jiti/-/jiti-2.7.0.tgz", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], + + "js-tokens": ["js-tokens@4.0.0", "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.2.0", "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.2.0.tgz", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], + + "jsesc": ["jsesc@3.1.0", "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json5": ["json5@2.2.3", "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.2.1", "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.1.tgz", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], + + "ky": ["ky@2.0.2", "https://registry.npmmirror.com/ky/-/ky-2.0.2.tgz", {}, "sha512-/GmXpo9F9W+f8n4Ivr2iH+7h7wL7jLbLKWkMlpflcCRb6kGjBfTlASEXaZ9qUgNTn4VgS0P2pwxxzQ4EM6Ulgg=="], + + "lightningcss": ["lightningcss@1.32.0", "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.32.0.tgz", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "https://registry.npmmirror.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + + "lru-cache": ["lru-cache@5.1.1", "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "magic-string": ["magic-string@0.30.21", "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "merge-anything": ["merge-anything@5.1.7", "https://registry.npmmirror.com/merge-anything/-/merge-anything-5.1.7.tgz", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ=="], + + "mime-db": ["mime-db@1.52.0", "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "minimist": ["minimist@1.2.8", "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "ms": ["ms@2.1.3", "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.12", "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.12.tgz", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], + + "neo-async": ["neo-async@2.6.2", "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + + "node-releases": ["node-releases@2.0.47", "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.47.tgz", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], + + "openapi-typescript-codegen": ["openapi-typescript-codegen@0.30.0", "https://registry.npmmirror.com/openapi-typescript-codegen/-/openapi-typescript-codegen-0.30.0.tgz", { "dependencies": { "@apidevtools/json-schema-ref-parser": "^14.2.1", "camelcase": "^6.3.0", "commander": "^14.0.2", "fs-extra": "^11.3.3", "handlebars": "^4.7.8" }, "bin": { "openapi": "bin/index.js" } }, "sha512-NO24vrOYEEREkuEwtLemXiV0/3wUj1HvS+0UuAinVNWKJOyNlXTj5hehdW9Dyob4u5YGrRG9dc9TBZW7/UszGw=="], + + "parse5": ["parse5@7.3.0", "https://registry.npmmirror.com/parse5/-/parse5-7.3.0.tgz", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "picocolors": ["picocolors@1.1.1", "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.4", "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + + "postcss": ["postcss@8.5.15", "https://registry.npmmirror.com/postcss/-/postcss-8.5.15.tgz", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], + + "proxy-from-env": ["proxy-from-env@2.1.0", "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], + + "rolldown": ["rolldown@1.0.3", "https://registry.npmmirror.com/rolldown/-/rolldown-1.0.3.tgz", { "dependencies": { "@oxc-project/types": "=0.133.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.3", "@rolldown/binding-darwin-arm64": "1.0.3", "@rolldown/binding-darwin-x64": "1.0.3", "@rolldown/binding-freebsd-x64": "1.0.3", "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", "@rolldown/binding-linux-arm64-gnu": "1.0.3", "@rolldown/binding-linux-arm64-musl": "1.0.3", "@rolldown/binding-linux-ppc64-gnu": "1.0.3", "@rolldown/binding-linux-s390x-gnu": "1.0.3", "@rolldown/binding-linux-x64-gnu": "1.0.3", "@rolldown/binding-linux-x64-musl": "1.0.3", "@rolldown/binding-openharmony-arm64": "1.0.3", "@rolldown/binding-wasm32-wasi": "1.0.3", "@rolldown/binding-win32-arm64-msvc": "1.0.3", "@rolldown/binding-win32-x64-msvc": "1.0.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g=="], + + "semver": ["semver@6.3.1", "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "seroval": ["seroval@1.5.4", "https://registry.npmmirror.com/seroval/-/seroval-1.5.4.tgz", {}, "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw=="], + + "seroval-plugins": ["seroval-plugins@1.5.4", "https://registry.npmmirror.com/seroval-plugins/-/seroval-plugins-1.5.4.tgz", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw=="], + + "solid-icons": ["solid-icons@1.2.0", "https://registry.npmmirror.com/solid-icons/-/solid-icons-1.2.0.tgz", { "peerDependencies": { "solid-js": "*" } }, "sha512-yjQxWQMi9l19P5Af9vjsvalTMDFPDL4XD6etrUdNxNVhFp1bMYF0SFwUa5VYDfJ7u0SF3Qkz/F7BZxqcLUwklw=="], + + "solid-js": ["solid-js@1.9.13", "https://registry.npmmirror.com/solid-js/-/solid-js-1.9.13.tgz", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.5.0", "seroval-plugins": "~1.5.0" } }, "sha512-6hJeJMOcEX8ktqjpDoJZEmld3ijvcvWBDtiXBm7f4332SiFN66QeAQI1REQshvyUoISsSeJ4PHDauKYbwao9JQ=="], + + "solid-refresh": ["solid-refresh@0.6.3", "https://registry.npmmirror.com/solid-refresh/-/solid-refresh-0.6.3.tgz", { "dependencies": { "@babel/generator": "^7.23.6", "@babel/helper-module-imports": "^7.22.15", "@babel/types": "^7.23.6" }, "peerDependencies": { "solid-js": "^1.3" } }, "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA=="], + + "source-map": ["source-map@0.6.1", "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "source-map-js": ["source-map-js@1.2.1", "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "tailwindcss": ["tailwindcss@4.3.0", "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.3.0.tgz", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], + + "tapable": ["tapable@2.3.3", "https://registry.npmmirror.com/tapable/-/tapable-2.3.3.tgz", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + + "tinyglobby": ["tinyglobby@0.2.17", "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.17.tgz", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "tslib": ["tslib@2.8.1", "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@6.0.3", "https://registry.npmmirror.com/typescript/-/typescript-6.0.3.tgz", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], + + "uglify-js": ["uglify-js@3.19.3", "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.19.3.tgz", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + + "undici-types": ["undici-types@7.18.2", "https://registry.npmmirror.com/undici-types/-/undici-types-7.18.2.tgz", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "universalify": ["universalify@2.0.1", "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "update-browserslist-db": ["update-browserslist-db@1.2.3", "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + + "vite": ["vite@8.0.16", "https://registry.npmmirror.com/vite/-/vite-8.0.16.tgz", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.3", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw=="], + + "vite-plugin-solid": ["vite-plugin-solid@2.11.12", "https://registry.npmmirror.com/vite-plugin-solid/-/vite-plugin-solid-2.11.12.tgz", { "dependencies": { "@babel/core": "^7.23.3", "@types/babel__core": "^7.20.4", "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.6.3", "vitefu": "^1.0.4" }, "peerDependencies": { "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", "solid-js": "^1.7.2", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["@testing-library/jest-dom"] }, "sha512-FgjPcx2OwX9h6f28jli7A4bG7PP3te8uyakE5iqsmpq3Jqi1TWLgSroC9N6cMfGRU2zXsl4Q6ISvTr2VL0QHpA=="], + + "vitefu": ["vitefu@1.1.3", "https://registry.npmmirror.com/vitefu/-/vitefu-1.1.3.tgz", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], + + "wordwrap": ["wordwrap@1.0.0", "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + + "yallist": ["yallist@3.1.1", "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "zod": ["zod@4.4.3", "https://registry.npmmirror.com/zod/-/zod-4.4.3.tgz", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "https://registry.npmmirror.com/@emnapi/core/-/core-1.10.0.tgz", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.10.0.tgz", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "babel-plugin-jsx-dom-expressions/@babel/helper-module-imports": ["@babel/helper-module-imports@7.18.6", "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", { "dependencies": { "@babel/types": "^7.18.6" } }, "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="], + } +} diff --git a/genapi.js b/genapi.js new file mode 100644 index 0000000..97e42ac --- /dev/null +++ b/genapi.js @@ -0,0 +1,35 @@ +import { createRequire } from 'node:module'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { readFile, writeFile } from 'node:fs/promises'; + +const require = createRequire(import.meta.url); +const { generate } = require('openapi-typescript-codegen'); + +const rootDir = dirname(fileURLToPath(import.meta.url)); +const input = resolve(rootDir, 'openapi.json'); +const output = resolve(rootDir, 'src/client'); + +await generate({ + input, + output, + httpClient: 'axios', + useOptions: true, + useUnionTypes: true, + exportCore: true, + exportServices: true, + exportModels: true, + exportSchemas: true, + indent: 'tab', +}); + +console.log(`Generated OpenAPI client: ${output}`); + +const openApiPath = resolve(output, 'core/OpenAPI.ts'); +const openApiContent = await readFile(openApiPath, 'utf8'); +const updatedOpenApiContent = openApiContent.replace( + 'WITH_CREDENTIALS: false,', + 'WITH_CREDENTIALS: true,', +); +await writeFile(openApiPath, updatedOpenApiContent); +console.log(`Updated OpenAPI.ts`); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..7a5712a --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + appwebks + + +
+ + + diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..f9f7178 --- /dev/null +++ b/openapi.json @@ -0,0 +1,38500 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "AppKS API", + "description": "AppKS collaborative development platform HTTP API.", + "license": { + "name": "" + }, + "version": "0.1.0" + }, + "paths": { + "/api/v1/auth/2fa/backup-codes/regenerate": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Regenerate 2FA backup codes", + "description": "After verifying the current password, generate a new set of backup codes for a user with 2FA enabled and replace the old backup codes. password must be encrypted with the current session RSA public key. Backup codes are returned in plaintext only once in this response; clients must prompt users to store them securely.", + "operationId": "authRegenerateTwoFactorBackupCodes", + "requestBody": { + "description": "The current account password encrypted with RSA.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Regenerate2FABackupCodesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Backup codes have been regenerated; old backup codes are immediately invalidated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Regenerate2FABackupCodesResponse" + } + } + } + }, + "400": { + "description": "2FA is not enabled, the password is incorrect, or RSA decryption failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database write or backup code hashing failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/2fa/disable": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Disable two-factor authentication", + "description": "Disable TOTP two-factor authentication for the current signed-in user. This requires verifying both the current password and a valid TOTP code or backup code. password must be encrypted with the current session RSA public key; a successfully verified backup code is consumed.", + "operationId": "authDisableTwoFactor", + "requestBody": { + "description": "TOTP/backup code and the current password encrypted with RSA.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Disable2FAParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "2FA has been disabled.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "2FA is not enabled, the verification code is incorrect, the password is incorrect, or RSA decryption failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database write failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/2fa/enable": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Initialize two-factor authentication setup", + "description": "Generate a new TOTP secret, otpauth QR-code URI, and 10 one-time backup codes for the current signed-in user, and save them in a not-yet-enabled state. Clients must guide the user to scan the QR code and call /auth/2fa/verify with a dynamic code before 2FA is actually enabled. Backup codes are returned in plaintext only once in this response; frontends must remind users to store them securely.", + "operationId": "authPrepareTwoFactorEnable", + "responses": { + "200": { + "description": "2FA setup initialized successfully. Returns the secret, QR-code URI, and backup codes.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Enable2FAResponse" + } + } + } + }, + "400": { + "description": "The current user has already enabled 2FA.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database write or backup code hashing failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/2fa/status": { + "get": { + "tags": [ + "Auth" + ], + "summary": "Get two-factor authentication status", + "description": "Read the current signed-in user's TOTP two-factor authentication status, including whether it is enabled, the authentication method, and whether backup codes are still available.", + "operationId": "authGetTwoFactorStatus", + "responses": { + "200": { + "description": "Read successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Get2FAStatusResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/2fa/verify": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Verify and enable two-factor authentication", + "description": "After initializing with /auth/2fa/enable, submit the 6-digit TOTP code generated by the authenticator app. On success, the current user's 2FA status is set to enabled. A small clock drift of one 30-second window before or after is allowed.", + "operationId": "authVerifyAndEnableTwoFactor", + "requestBody": { + "description": "The 6-digit TOTP code generated by the authenticator app.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Verify2FAParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "2FA has been enabled.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "2FA has not been initialized, is already enabled, or the verification code is incorrect.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database write failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/captcha": { + "get": { + "tags": [ + "Auth" + ], + "summary": "Get captcha image", + "description": "Generate a one-time captcha image and store the plaintext captcha in the current session. Captchas are used for sensitive entry points such as login and sending registration email codes. Set rsa=true to return the current session RSA public key at the same time and reduce frontend initialization requests. The captcha is consumed after either successful or failed validation, so clients must fetch a new one after failure.", + "operationId": "authGetCaptcha", + "parameters": [ + { + "name": "w", + "in": "query", + "description": "Captcha image width; allowed range is 80..=400.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "example": 160 + }, + { + "name": "h", + "in": "query", + "description": "Captcha image height; allowed range is 30..=200.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "example": 64 + }, + { + "name": "dark", + "in": "query", + "description": "Whether to generate a dark-mode captcha.", + "required": true, + "schema": { + "type": "boolean" + }, + "example": false + }, + { + "name": "rsa", + "in": "query", + "description": "Whether to include the RSA public key in the response.", + "required": true, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "Captcha generated successfully. The base64 field is image data that can be used directly as img.src.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_CaptchaResponse" + } + } + } + }, + "400": { + "description": "Invalid captcha size.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Session write failed or RSA initialization failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/email": { + "get": { + "tags": [ + "Auth" + ], + "summary": "Get current user verified email", + "description": "Return the verified primary email for the current signed-in user. If no verified email is bound to the account, the email field is null.", + "operationId": "authGetPrimaryEmail", + "responses": { + "200": { + "description": "Read successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_EmailResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/email/change": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Request login email change", + "description": "After verifying the current user password, send a confirmation link to the new email address. password must be encrypted with the current session RSA public key. The token in the confirmation link is valid for 1 hour by default; the actual email switch is completed by calling /auth/email/verify.", + "operationId": "authRequestEmailChange", + "requestBody": { + "description": "The new email address and encrypted current account password.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailChangeRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The confirmation email has been queued for delivery.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "The new email is empty, the password is incorrect, or RSA decryption failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "The current session is not authenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "The new email is already in use.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Cache, email service, or database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/email/verify": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Confirm email change", + "description": "Complete an email change using the token from the confirmation email. The endpoint checks again whether the target email is already taken, then marks old emails as unverified and inserts the new verified primary email in a transaction.", + "operationId": "authVerifyEmailChange", + "requestBody": { + "description": "Email change confirmation token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailVerifyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Email changed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "The token is empty.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "The token is invalid or expired.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "The target email was taken by another account before confirmation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/login": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Account login", + "description": "Log in using a username or verified email. password must be a Base64 ciphertext encrypted with the public key returned by /auth/rsa; the first login attempt must include captcha. If the account has TOTP enabled, the first successful password check returns 400/two-factor required and records pending verification state in the session. Then submit username, password, and totp_code again in the same session to complete login. On success, the session is renewed, the current user is bound, and temporary RSA keys are cleared.", + "operationId": "authLogin", + "requestBody": { + "description": "Login parameters. username accepts a username or email; password is an RSA-OAEP-SHA256 encrypted ciphertext; captcha is the captcha stored in the current session; totp_code is required only during the second verification step.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Login succeeded. The server establishes login state through the session cookie.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "Captcha error, RSA decryption failure, or missing/incorrect TOTP.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "User does not exist or password is incorrect; to reduce enumeration risk, incorrect passwords are also treated as user-not-found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database, cache, or session write failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/logout": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Log out", + "description": "Clear the user identity and all temporary authentication data from the current session, including captcha, temporary RSA keys, and pending 2FA state. This endpoint is idempotent: unauthenticated users also receive a success response.", + "operationId": "authLogout", + "responses": { + "200": { + "description": "Logged out successfully, or the session was already unauthenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "500": { + "description": "Session persistence failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/me": { + "get": { + "tags": [ + "Auth" + ], + "summary": "Get current signed-in user context", + "description": "Return the current user's basic profile, preferred language, timezone, and notification summary using the user_uid bound to the session. This endpoint is typically used to restore the login state when the frontend app starts.", + "operationId": "authGetCurrentUser", + "responses": { + "200": { + "description": "The current session is authenticated. Returns the user context.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_ContextMe" + } + } + } + }, + "401": { + "description": "The current session is unauthenticated or the login state has expired.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "The user in the session no longer exists, has been disabled, or has been deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/register": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Register a new account", + "description": "Create an account after validating username, email, password, captcha, and email verification code. password must be encrypted with the current session RSA public key; captcha and email_code are one-time credentials. On successful registration, the new user is written to the session and does not need to log in again.", + "operationId": "authRegister", + "requestBody": { + "description": "Registration parameters. email_code comes from /auth/register/email-code; password is a Base64 ciphertext encrypted with RSA-OAEP-SHA256.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Registration succeeded; the current session is automatically signed in as the new user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RegisterResponse" + } + } + } + }, + "400": { + "description": "Captcha error, email verification code error, weak password, RSA decryption failure, or missing required fields.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "The username or email is already in use.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction, password hashing, cache, or session write failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/register/email-code": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Send registration email verification code", + "description": "After validating the captcha in the current session, send a 6-digit registration code to the target email address. The endpoint checks whether a verified email already exists and applies a per-email cooldown to prevent email bombing. The code is valid for 10 minutes by default.", + "operationId": "authSendRegisterEmailCode", + "requestBody": { + "description": "The target email address and captcha from the current session.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterEmailCodeParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The verification email has been queued for delivery. Returns the code expiration time.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RegisterEmailCodeResponse" + } + } + } + }, + "400": { + "description": "The captcha is incorrect, the email is empty, or requests are too frequent.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "The email is already used by another verified account.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Cache write failed or the email service is unavailable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/reset-password": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Request password reset email", + "description": "Submit an email address to send a password reset link if it belongs to an active user. To prevent user enumeration, the business logic attempts to return success whether the email exists, rate limits are triggered, or email delivery fails. Internally, the endpoint enforces a 60-second cooldown and a daily limit of 5 requests per email.", + "operationId": "authRequestPasswordReset", + "requestBody": { + "description": "The email address that should receive the password reset link.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The request has been accepted; if the email exists, a reset email will be sent.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "500": { + "description": "Rare unrecoverable server-side error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/reset-password/verify": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Confirm password reset", + "description": "Set a new password using the token from the password reset email. password must be encrypted with the current session RSA public key; the new password is strength-checked and rehashed with Argon2id. The token is deleted immediately after successful use; expired or missing tokens fail.", + "operationId": "authVerifyPasswordReset", + "requestBody": { + "description": "The reset token and new password encrypted with RSA.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordVerifyParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset succeeded.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "The token is invalid or expired, RSA decryption failed, or the password is too weak.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database update or password hashing failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/rsa": { + "get": { + "tags": [ + "Auth" + ], + "summary": "Get login form RSA public key", + "description": "Generate or reuse a temporary RSA-2048 key pair for the current browser session and return the public key in PKCS#1 PEM format. Clients should use this public key to encrypt sensitive fields such as passwords with RSA-OAEP-SHA256 before submitting login, registration, password reset, or 2FA disable requests. The private key is encrypted with AEAD and stored only in the server-side session; it is never returned to clients.", + "operationId": "authGetRsaPublicKey", + "responses": { + "200": { + "description": "Return the RSA public key available for the current session; if an unexpired key already exists in the session, reuse the existing public key.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RsaResponse" + } + } + } + }, + "500": { + "description": "APP_SESSION_SECRET is missing, RSA generation failed, or session write failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/repos/invitations/accept": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Accept a repository invitation", + "description": "Accepts a pending repository invitation using the token received via email.\nRequires authentication and a verified email address matching the invitation.\n\nEffects:\n- User is added as a repository member with the invited role\n- User is added to the workspace if not already a member\n- Invitation is marked as accepted\n\nReturns the accepted invitation with full metadata.", + "operationId": "repoAcceptInvitation", + "requestBody": { + "description": "Invitation acceptance parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitationParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Invitation accepted successfully. User is now a member of the repository.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoInvitation" + } + } + } + }, + "400": { + "description": "Invalid or expired token, or email doesn't match invitation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Invitation not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "User is already a member of this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/account": { + "get": { + "tags": [ + "User" + ], + "summary": "Get current user account", + "description": "Returns the authenticated user's account information including:\n- Username, display name, and bio\n- Avatar URL\n- Account status and role\n- Last login and creation timestamps\n\nRequires authentication.", + "operationId": "userGetAccount", + "responses": { + "200": { + "description": "Account retrieved successfully. Returns user account with all metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_User" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "User" + ], + "summary": "Update user account", + "description": "Updates the authenticated user's account settings.\nRequires authentication.\n\nUpdatable fields:\n- username: New username (must be unique across the platform)\n- display_name: Human-readable display name\n- bio: Short biography text\n- visibility: Profile visibility (\"public\", \"private\", or \"internal\")\n\nAll fields are optional; only provided fields are updated.\nReturns the updated user account with all metadata.", + "operationId": "userUpdateAccount", + "requestBody": { + "description": "Account update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserAccountParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Account updated successfully. Returns updated user account with all metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_User" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty username or unsupported visibility value", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Username already taken", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "User" + ], + "summary": "Delete user account", + "description": "Permanently deletes the authenticated user's account and all associated data.\nRequires authentication.\n\nPreconditions:\n- User must transfer or delete all owned workspaces\n- User must transfer or delete all owned repositories\n\nEffects:\n- All user data is removed (SSH keys, GPG keys, sessions, devices, OAuth links, etc.)\n- User is soft-deleted (marked as deleted, not physically removed)\n- Current session is cleared\n- Account cannot be recovered\n\nReturns success message on completion.", + "operationId": "userDeleteAccount", + "responses": { + "200": { + "description": "Account deleted successfully. All user data has been removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Cannot delete: user still owns workspaces or repositories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/account/avatar": { + "post": { + "tags": [ + "User" + ], + "summary": "Upload user avatar", + "description": "Uploads a new avatar image for the authenticated user.\nRequires authentication.\n\nParameters:\n- data: Raw avatar image bytes (PNG, JPEG, or WebP, max 5MB)\n- content_type: MIME type of the image (e.g., \"image/png\")\n- file_name: Original file name (used to infer file extension)\n\nEffects:\n- Avatar image is stored in S3-compatible object storage\n- Previous avatar is deleted from storage\n- User's avatar URL is updated\n\nReturns the new avatar URL and storage key.", + "operationId": "userUploadAvatar", + "requestBody": { + "description": "Avatar upload parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadUserAvatarParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Avatar uploaded successfully. Returns the new avatar URL and storage key.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserAvatarResponse" + } + } + } + }, + "400": { + "description": "Invalid parameters: unsupported file type or image too large", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or S3 storage failure", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/appearance": { + "get": { + "tags": [ + "User" + ], + "summary": "Get user appearance settings", + "description": "Returns the authenticated user's UI appearance preferences including:\n- Theme (system, light, dark)\n- Color scheme (system, light, dark)\n- Density (compact, comfortable)\n- Font size (small, medium, large)\n- Editor theme\n- Markdown preview toggle\n- Reduced motion toggle\n\nIf no settings exist, defaults are created automatically.\nRequires authentication.", + "operationId": "userGetAppearance", + "responses": { + "200": { + "description": "Appearance settings retrieved successfully. Returns all UI preference settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserAppearance" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "User" + ], + "summary": "Update user appearance settings", + "description": "Updates the authenticated user's UI appearance preferences.\nRequires authentication.\n\nUpdatable fields:\n- theme: UI theme (\"system\", \"light\", \"dark\")\n- color_scheme: Color scheme (\"system\", \"light\", \"dark\")\n- density: UI density (\"compact\", \"comfortable\")\n- font_size: Font size (\"small\", \"medium\", \"large\")\n- editor_theme: Code editor theme name\n- markdown_preview: Enable/disable markdown live preview\n- reduced_motion: Enable/disable reduced motion\n\nAll fields are optional; only provided fields are updated.\nReturns the updated appearance settings.", + "operationId": "userUpdateAppearance", + "requestBody": { + "description": "Appearance update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserAppearanceParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Appearance settings updated successfully. Returns all updated UI preferences.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserAppearance" + } + } + } + }, + "400": { + "description": "Invalid parameters: unsupported theme, color scheme, density, or font size", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/keys/gpg": { + "get": { + "tags": [ + "User" + ], + "summary": "List user GPG keys", + "description": "Returns all GPG public keys registered by the authenticated user.\nKeys are sorted by creation date (newest first).\nOnly non-revoked keys are included.\nRequires authentication.", + "operationId": "userListGpgKeys", + "responses": { + "200": { + "description": "GPG keys listed successfully. Returns array of GPG key objects with fingerprints and metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserGpgKey" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "User" + ], + "summary": "Add a GPG key", + "description": "Registers a new GPG public key for the authenticated user.\nRequires authentication.\n\nParameters:\n- public_key: ASCII-armored PGP public key block\n- key_id: Short key ID or full fingerprint\n- primary_email: Primary email associated with the key (optional)\n- expires_at: Optional expiration date for the key\n\nEffects:\n- Key fingerprint is computed and stored\n- Key is immediately usable for verifying signed commits/tags\n- Duplicate keys are rejected\n\nReturns the created GPG key with fingerprint and metadata.", + "operationId": "userAddGpgKey", + "requestBody": { + "description": "GPG key creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddGpgKeyParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "GPG key added successfully. Returns the created key with fingerprint and metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserGpgKey" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid PGP key format", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "GPG key with this fingerprint already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/keys/gpg/{key_id}": { + "delete": { + "tags": [ + "User" + ], + "summary": "Delete a GPG key", + "description": "Revokes a GPG key belonging to the authenticated user.\nRequires authentication.\n\nEffects:\n- Key is marked as revoked (soft-deleted)\n- Key can no longer be used for verifying commits/tags\n- Revoked keys remain visible in key history\n\nReturns success message on completion.", + "operationId": "userDeleteGpgKey", + "parameters": [ + { + "name": "key_id", + "in": "path", + "description": "GPG key ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "GPG key revoked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "GPG key not found or already revoked", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/keys/ssh": { + "get": { + "tags": [ + "User" + ], + "summary": "List user SSH keys", + "description": "Returns all SSH public keys registered by the authenticated user.\nKeys are sorted by creation date (newest first).\nOnly non-revoked keys are included.\nRequires authentication.", + "operationId": "userListSshKeys", + "responses": { + "200": { + "description": "SSH keys listed successfully. Returns array of SSH key objects with fingerprints and metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserSshKey" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "User" + ], + "summary": "Add an SSH key", + "description": "Registers a new SSH public key for the authenticated user.\nRequires authentication.\n\nParameters:\n- title: Human-readable label for the key (e.g., \"Work Laptop\")\n- public_key: SSH public key string (supports RSA, Ed25519, ECDSA, DSA)\n- key_type: Key algorithm type (\"rsa\", \"ed25519\", \"ecdsa\", \"dsa\")\n- expires_at: Optional expiration date for the key\n\nEffects:\n- Key fingerprint is computed and stored\n- Key is immediately usable for Git operations\n- Duplicate keys are rejected\n\nReturns the created SSH key with fingerprint and metadata.", + "operationId": "userAddSshKey", + "requestBody": { + "description": "SSH key creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddSshKeyParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "SSH key added successfully. Returns the created key with fingerprint and metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserSshKey" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid key format, unsupported key type, or type mismatch", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "SSH key with this fingerprint already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/keys/ssh/{key_id}": { + "delete": { + "tags": [ + "User" + ], + "summary": "Delete an SSH key", + "description": "Revokes an SSH key belonging to the authenticated user.\nRequires authentication.\n\nEffects:\n- Key is marked as revoked (soft-deleted)\n- Key can no longer be used for Git operations\n- Revoked keys remain visible in key history\n\nReturns success message on completion.", + "operationId": "userDeleteSshKey", + "parameters": [ + { + "name": "key_id", + "in": "path", + "description": "SSH key ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "SSH key revoked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "SSH key not found or already revoked", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/notifications": { + "get": { + "tags": [ + "User" + ], + "summary": "Get user notification settings", + "description": "Returns the authenticated user's notification preferences including:\n- Email notification toggle\n- Web push notification toggle\n- Mention notification toggle\n- Review notification toggle\n- Security notification toggle\n- Marketing email toggle\n- Digest frequency (realtime, daily, weekly, off)\n\nIf no settings exist, defaults are created automatically.\nRequires authentication.", + "operationId": "userGetNotifications", + "responses": { + "200": { + "description": "Notification settings retrieved successfully. Returns all notification preferences.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserNotifySetting" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "User" + ], + "summary": "Update user notification settings", + "description": "Updates the authenticated user's notification preferences.\nRequires authentication.\n\nUpdatable fields:\n- email_notifications: Enable/disable email notifications\n- web_notifications: Enable/disable web push notifications\n- mention_notifications: Enable/disable @mention notifications\n- review_notifications: Enable/disable code review notifications\n- security_notifications: Enable/disable security notifications\n- marketing_emails: Enable/disable marketing emails\n- digest_frequency: Digest email frequency (\"realtime\", \"daily\", \"weekly\", \"off\")\n\nAll fields are optional; only provided fields are updated.\nReturns the updated notification settings.", + "operationId": "userUpdateNotifications", + "requestBody": { + "description": "Notification settings update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserNotifySettingParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Notification settings updated successfully. Returns all updated preferences.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserNotifySetting" + } + } + } + }, + "400": { + "description": "Invalid parameters: unsupported digest frequency", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/profile": { + "get": { + "tags": [ + "User" + ], + "summary": "Get user profile", + "description": "Returns the authenticated user's public profile information including:\n- Full name and company\n- Location and website URL\n- Twitter username\n- Timezone and language\n- Profile README\n\nIf no profile exists, an empty profile is created automatically.\nRequires authentication.", + "operationId": "userGetProfile", + "responses": { + "200": { + "description": "Profile retrieved successfully. Returns all profile fields.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserProfile" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "User" + ], + "summary": "Update user profile", + "description": "Updates the authenticated user's public profile information.\nRequires authentication.\n\nUpdatable fields:\n- full_name: Full legal name or display name\n- company: Organization or company name\n- location: Geographic location (e.g., \"San Francisco, CA\")\n- website_url: Personal or company website URL\n- twitter_username: Twitter/X handle\n- timezone: IANA timezone identifier (e.g., \"America/New_York\")\n- language: Preferred language code (e.g., \"en\", \"zh-CN\")\n- profile_readme: Markdown content for profile README\n\nAll fields are optional; only provided fields are updated.\nReturns the updated profile with all fields.", + "operationId": "userUpdateProfile", + "requestBody": { + "description": "Profile update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserProfileParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Profile updated successfully. Returns all updated profile fields.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_UserProfile" + } + } + } + }, + "400": { + "description": "Invalid parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/devices": { + "get": { + "tags": [ + "User" + ], + "summary": "List user devices", + "description": "Returns all registered devices for the authenticated user.\nDevices are sorted by last seen time (most recent first).\nIncludes device metadata such as name, type, fingerprint, and trust status.\nRequires authentication.", + "operationId": "userListDevices", + "responses": { + "200": { + "description": "Devices listed successfully. Returns array of device objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserDevice" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/devices/{device_id}": { + "delete": { + "tags": [ + "User" + ], + "summary": "Delete a user device", + "description": "Removes a registered device from the authenticated user's trusted devices.\nRequires authentication.\n\nEffects:\n- Device is permanently removed\n- Device can no longer be used for 2FA bypass\n- Device will need to be re-registered and verified if needed\n\nReturns success message on completion.", + "operationId": "userDeleteDevice", + "parameters": [ + { + "name": "device_id", + "in": "path", + "description": "Device ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Device deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Device not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/logs": { + "get": { + "tags": [ + "User" + ], + "summary": "List security logs", + "description": "Returns a paginated list of security events for the authenticated user.\nEntries are sorted by creation date (newest first).\nIncludes event types, descriptions, IP addresses, and user agents.\nUseful for auditing account activity and detecting suspicious behavior.\nRequires authentication.", + "operationId": "userListSecurityLogs", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of log entries to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of log entries to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Security logs listed successfully. Returns array of security event entries with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserSecurityLog" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/oauth": { + "get": { + "tags": [ + "User" + ], + "summary": "List OAuth accounts", + "description": "Returns all linked OAuth/third-party login accounts for the authenticated user.\nAccounts are sorted by link date (most recent first).\nIncludes provider information, usernames, and token expiry status.\nRequires authentication.", + "operationId": "userListOAuthAccounts", + "responses": { + "200": { + "description": "OAuth accounts listed successfully. Returns array of linked OAuth accounts with provider details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserOAuthInfo" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/oauth/{oauth_id}": { + "delete": { + "tags": [ + "User" + ], + "summary": "Unlink an OAuth account", + "description": "Removes a linked OAuth/third-party login account from the authenticated user.\nRequires authentication.\n\nPreconditions:\n- User must have at least one remaining login method (password or another OAuth account)\n\nEffects:\n- OAuth account link is permanently removed\n- User can no longer log in with this OAuth provider unless re-linked\n\nReturns success message on completion.", + "operationId": "userUnlinkOAuth", + "parameters": [ + { + "name": "oauth_id", + "in": "path", + "description": "OAuth account ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OAuth account unlinked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Cannot unlink: this is the last login method (set a password first)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "OAuth account not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/sessions": { + "get": { + "tags": [ + "User" + ], + "summary": "List user sessions", + "description": "Returns a paginated list of all active and recently-expired sessions for the authenticated user.\nSessions are sorted by last activity (most recent first).\nIncludes session metadata such as IP address, user agent, and expiration time.\nRequires authentication.", + "operationId": "userListSessions", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of sessions to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of sessions to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Sessions listed successfully. Returns array of session objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserSessionInfo" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/sessions/{session_id}": { + "delete": { + "tags": [ + "User" + ], + "summary": "Revoke a user session", + "description": "Immediately terminates a specific session belonging to the authenticated user.\nRequires authentication.\n\nEffects:\n- Session is marked as revoked\n- Session can no longer be used for authentication\n- Active connections using this session are disconnected\n\nReturns success message on completion.", + "operationId": "userRevokeSession", + "parameters": [ + { + "name": "session_id", + "in": "path", + "description": "Session ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Session revoked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Session not found or already revoked", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/tokens": { + "get": { + "tags": [ + "User" + ], + "summary": "List personal access tokens", + "description": "Returns a paginated list of all personal access tokens (PATs) for the authenticated user.\nTokens are sorted by creation date (newest first).\nIncludes token names, scopes, last used timestamps, and expiry status.\nNote: Token values are never returned after creation for security reasons.\nRequires authentication.", + "operationId": "userListTokens", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of tokens to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of tokens to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Personal access tokens listed successfully. Returns array of token metadata objects (token values are never exposed).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_UserPersonalAccessTokenInfo" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/user/security/tokens/{token_id}": { + "delete": { + "tags": [ + "User" + ], + "summary": "Revoke a personal access token", + "description": "Immediately revokes a personal access token belonging to the authenticated user.\nRequires authentication.\n\nEffects:\n- Token is marked as revoked and can no longer be used\n- All API calls using this token will fail with 401 Unauthorized\n- Revoked tokens remain visible in token list for audit purposes\n\nReturns success message on completion.", + "operationId": "userRevokeToken", + "parameters": [ + { + "name": "token_id", + "in": "path", + "description": "Token ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Personal access token revoked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Token not found or already revoked", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List accessible workspaces", + "description": "Return workspaces owned by, joined by, or publicly accessible to the current user.", + "operationId": "workspaceList", + "parameters": [ + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of workspaces.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_Workspace" + } + } + } + }, + "401": { + "description": "Unauthenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Create a workspace", + "description": "Create a new workspace. The creator automatically becomes the owner.", + "operationId": "workspaceCreate", + "requestBody": { + "description": "Workspace creation parameters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWorkspaceParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Workspace created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Workspace" + } + } + } + }, + "400": { + "description": "Name is required or visibility is invalid.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/invitations/accept": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Accept an invitation", + "description": "Accept a workspace invitation using the token from the invitation email. The authenticated user's verified email must match the invited email.", + "operationId": "workspaceAcceptInvitation", + "requestBody": { + "description": "Invitation token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptInvitationRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Invitation accepted and user added as a member.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceInvitation" + } + } + } + }, + "400": { + "description": "Invalid or expired invitation, or already a member.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or email mismatch.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Get a workspace", + "description": "Return the workspace identified by name, subject to visibility checks.", + "operationId": "workspaceGet", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Workspace" + } + } + } + }, + "401": { + "description": "Unauthenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found or not accessible.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update a workspace", + "description": "Update workspace name, description, visibility, or default role. Requires admin role.", + "operationId": "workspaceUpdate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Workspace update parameters — only included fields are changed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWorkspaceParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Workspace updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Workspace" + } + } + } + }, + "400": { + "description": "Bad request — invalid visibility or default_role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Workspaces" + ], + "summary": "Delete a workspace", + "description": "Soft-delete a workspace. Requires owner role.", + "operationId": "workspaceDelete", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/approvals": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List pending approvals", + "description": "Return pending approval requests for the workspace. Requires admin role.", + "operationId": "workspaceListApprovals", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of pending approvals.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspacePendingApproval" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Request an approval", + "description": "Submit a request for workspace admin approval. Readable by anyone with workspace access.", + "operationId": "workspaceRequestApproval", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Approval request type and optional reason.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestApprovalParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Approval request created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspacePendingApproval" + } + } + } + }, + "400": { + "description": "Invalid request type.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/approvals/{approval_id}": { + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Review an approval request", + "description": "Approve or reject a pending approval request. Requires owner role.", + "operationId": "workspaceReviewApproval", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "approval_id", + "in": "path", + "description": "Approval record ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Whether to approve or reject.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReviewApprovalRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Approval reviewed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Approval not found or already reviewed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/archive": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Archive a workspace", + "description": "Archive a workspace. Requires owner role. All repos become read-only.", + "operationId": "workspaceArchive", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace archived.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found or already archived.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/audit-logs": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Get audit logs", + "description": "Return recent audit log entries for the workspace. Requires admin role.", + "operationId": "workspaceAuditLogs", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of audit log entries.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspaceAuditLog" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/avatar": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Upload workspace avatar", + "description": "Upload an avatar image for a workspace. Requires admin role. Maximum size 5 MB. Supported: png, jpg, gif, webp.", + "operationId": "workspaceUploadAvatar", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "content_type", + "in": "query", + "description": "MIME type of the uploaded image.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "file_name", + "in": "query", + "description": "Original file name for extension detection.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Raw image bytes.", + "content": { + "application/octet-stream": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Avatar uploaded.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Workspace" + } + } + } + }, + "400": { + "description": "Unsupported image format or file too large.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Storage or database failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/billing": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Get billing information", + "description": "Return billing information for a workspace. Requires owner role.", + "operationId": "workspaceGetBilling", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Billing information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceBilling" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update billing information", + "description": "Update billing plan, email, or seat count. Requires owner role.", + "operationId": "workspaceUpdateBilling", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Billing update parameters — only included fields are changed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateBillingParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Billing updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceBilling" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/branding": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Get custom branding", + "description": "Return custom branding settings for a workspace. Requires admin role.", + "operationId": "workspaceGetBranding", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Branding settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceCustomBranding" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update custom branding", + "description": "Update workspace custom branding including logo, favicon, colors, CSS, and support URL. Requires admin role.", + "operationId": "workspaceUpdateBranding", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Branding update parameters — only included fields are changed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateBrandingParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Branding updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceCustomBranding" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/domains": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List domains", + "description": "Return domains associated with the workspace. Requires admin role.", + "operationId": "workspaceListDomains", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of domains.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspaceDomain" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Add a domain", + "description": "Add a domain for verification. The first domain added is auto-set as primary. Requires admin role.", + "operationId": "workspaceAddDomain", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Domain name to add.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddDomainParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Domain added (unverified).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceDomain" + } + } + } + }, + "400": { + "description": "Domain is empty.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/domains/{domain_id}": { + "delete": { + "tags": [ + "Workspaces" + ], + "summary": "Delete a domain", + "description": "Remove a domain from the workspace. Cannot delete the primary domain. Requires admin role.", + "operationId": "workspaceDeleteDomain", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "domain_id", + "in": "path", + "description": "Domain record ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Domain deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "Cannot delete primary domain.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Domain not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/domains/{domain_id}/primary": { + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Set primary domain", + "description": "Set a verified domain as the primary domain for the workspace. Requires owner role.", + "operationId": "workspaceSetPrimaryDomain", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "domain_id", + "in": "path", + "description": "Domain record ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Primary domain set.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "Domain must be verified first.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Domain not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/domains/{domain_id}/verify": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Verify a domain", + "description": "Mark a domain as verified. Requires admin role.", + "operationId": "workspaceVerifyDomain", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "domain_id", + "in": "path", + "description": "Domain record ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Domain verified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Domain not found or already verified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/integrations": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List integrations", + "description": "Return integrations configured for the workspace. Requires admin role.", + "operationId": "workspaceListIntegrations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of integrations.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspaceIntegration" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Create an integration", + "description": "Add a third-party integration to the workspace. Requires admin role.", + "operationId": "workspaceCreateIntegration", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Integration provider, name, config, and optional secret.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIntegrationParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Integration created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceIntegration" + } + } + } + }, + "400": { + "description": "Invalid provider or name is empty.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/integrations/{integration_id}": { + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update an integration", + "description": "Update an integration's name, config, secret, or enabled state. Requires admin role.", + "operationId": "workspaceUpdateIntegration", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "integration_id", + "in": "path", + "description": "Integration ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Integration update parameters — only included fields are changed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateIntegrationParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Integration updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceIntegration" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Integration not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Workspaces" + ], + "summary": "Delete an integration", + "description": "Remove an integration from the workspace. Requires admin role.", + "operationId": "workspaceDeleteIntegration", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "integration_id", + "in": "path", + "description": "Integration ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Integration deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Integration not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/invitations": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List pending invitations", + "description": "Return pending (un-expired, un-revoked, un-accepted) invitations for a workspace. Requires admin role.", + "operationId": "workspaceListInvitations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of invitations.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspaceInvitation" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Create an invitation", + "description": "Invite a user by email to join the workspace. An invitation email is sent. Requires admin role.", + "operationId": "workspaceCreateInvitation", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Email and optional role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvitationParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Invitation created and email sent.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_CreateInvitationResponse" + } + } + } + }, + "400": { + "description": "Email is empty, role is invalid, or invitation already exists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database or email service failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/invitations/{invitation_id}": { + "delete": { + "tags": [ + "Workspaces" + ], + "summary": "Revoke an invitation", + "description": "Revoke a pending invitation so it can no longer be accepted. Requires admin role.", + "operationId": "workspaceRevokeInvitation", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "invitation_id", + "in": "path", + "description": "Invitation ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Invitation revoked.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Invitation not found or already used.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/issues": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List issues in a workspace", + "description": "Returns a paginated list of issues in the workspace, sorted by issue number (newest first).\nSupports filtering by state, priority, author, assignee, milestone, and label.\nOnly returns issues visible to the authenticated user (public + workspace member access).\nRequires authentication.", + "operationId": "issueList", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "state", + "in": "query", + "description": "Filter by issue state (\"open\" or \"closed\")", + "required": false, + "schema": { + "type": [ + "string", + "null" + ] + } + }, + { + "name": "priority", + "in": "query", + "description": "Filter by priority level", + "required": false, + "schema": { + "type": [ + "string", + "null" + ] + } + }, + { + "name": "author_id", + "in": "query", + "description": "Filter by author user ID", + "required": false, + "schema": { + "type": [ + "string", + "null" + ], + "format": "uuid" + } + }, + { + "name": "assignee_id", + "in": "query", + "description": "Filter by assignee user ID", + "required": false, + "schema": { + "type": [ + "string", + "null" + ], + "format": "uuid" + } + }, + { + "name": "milestone_id", + "in": "query", + "description": "Filter by milestone ID", + "required": false, + "schema": { + "type": [ + "string", + "null" + ], + "format": "uuid" + } + }, + { + "name": "label_id", + "in": "query", + "description": "Filter by label ID", + "required": false, + "schema": { + "type": [ + "string", + "null" + ], + "format": "uuid" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of issues to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of issues to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Issues listed successfully. Returns filtered array of issue objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_Issue" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Create an issue", + "description": "Creates a new issue in the specified workspace.\nRequires at least Member role in the workspace.\n\nParameters:\n- title: Issue title (required)\n- body: Issue body in markdown (optional)\n- priority: Priority level (optional, defaults to \"none\")\n- visibility: Visibility setting (optional, defaults to \"public\")\n- due_at: Due date (optional)\n- repo_ids: Related repository IDs\n- label_ids: Label IDs to apply\n- assignee_ids: User IDs to assign\n- milestone_id: Milestone ID to attach\n\nEffects:\n- Issue is created with auto-incrementing number\n- Author is automatically subscribed\n- Relations, labels, and assignees are attached\n- Workspace stats are updated\n\nReturns the created issue with full metadata.", + "operationId": "issueCreate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Issue creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIssueParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Issue created successfully. Returns the newly created issue with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty title, invalid repository/label/milestone references", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or referenced resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}": { + "get": { + "tags": [ + "Issues" + ], + "summary": "Get an issue by number", + "description": "Returns detailed information about a specific issue, identified by workspace name and issue number.\nRequires read access to the issue (public or workspace member).", + "operationId": "issueGet", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Issue retrieved successfully. Returns complete issue with all metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "Issues" + ], + "summary": "Update an issue", + "description": "Updates an existing issue's metadata such as title, body, priority, visibility, due date, and milestone.\nRequires write access to the issue (author or workspace member).\n\nAll fields are optional; only provided fields are updated.\nReturns the updated issue with full metadata.", + "operationId": "issueUpdate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Issue update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateIssueParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Issue updated successfully. Returns the updated issue with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid priority, visibility, or milestone", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace, issue, or referenced resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Delete an issue", + "description": "Soft-deletes an issue. The issue is marked as deleted but remains in the database.\nRequires Admin role in the workspace (or issue author).\n\nEffects:\n- Issue is marked as deleted (soft-delete)\n- Workspace issue count is decremented\n\nReturns success message on completion.", + "operationId": "issueDelete", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Issue deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or issue author)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/assignees": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List assignees of an issue", + "description": "Returns a paginated list of all users assigned to the given issue.\nShows who is assigned, when they were assigned, and who assigned them.\nRequires read access to the issue.", + "operationId": "issueListAssignees", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of assignees to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of assignees to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Assignees listed successfully. Returns array of assignee objects with assignment metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueAssignee" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/assignees/{user_id}": { + "post": { + "tags": [ + "Issues" + ], + "summary": "Assign a user to an issue", + "description": "Assigns a workspace member to the given issue.\nRequires write access to the issue (author or workspace member).\n\nEffects:\n- User is assigned to the issue\n- Assignee is automatically subscribed to the issue\n- Issue assignee count is incremented\n\nReturns the created assignment record.", + "operationId": "issueAssign", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "path", + "description": "User ID (UUID) to assign", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "201": { + "description": "User assigned successfully. Returns the created assignment record.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueAssignee" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue or user not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "User is already assigned to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Unassign a user from an issue", + "description": "Removes a user from the issue's assignee list.\nRequires write access to the issue (author or workspace member).\n\nEffects:\n- User is removed from the issue's assignees\n- Issue assignee count is decremented\n\nReturns success message on completion.", + "operationId": "issueUnassign", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "path", + "description": "User ID (UUID) to unassign", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "User unassigned successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "User is not assigned to this issue or not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/close": { + "post": { + "tags": [ + "Issues" + ], + "summary": "Close an issue", + "description": "Closes an open issue. The issue is marked as closed and the closing user is recorded.\nRequires write access to the issue (author or workspace member).\n\nEffects:\n- Issue state changes to \"closed\"\n- Closed by and closed at are recorded\n- A \"Closed\" event is logged\n\nReturns the closed issue with updated metadata.", + "operationId": "issueClose", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Issue closed successfully. Returns the closed issue with updated metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "400": { + "description": "Issue is already closed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to close this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/comments": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List issue comments", + "description": "Returns a paginated list of comments on an issue, sorted by creation date (oldest first).\nRequires read access to the issue.", + "operationId": "issueListComments", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Comments listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueComment" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Create a comment on an issue", + "description": "Adds a new comment to an issue. Users with read access can comment unless the issue is locked\n(in which case only users with write access can comment).\n\nParameters:\n- body: Comment body in markdown format (required)\n- reply_to_comment_id: ID of parent comment for threaded replies (optional)\n\nEffects:\n- Comment is created and attached to the issue\n- Commenter is automatically subscribed to the issue\n- Issue comment count is incremented\n\nReturns the created comment with metadata.", + "operationId": "issueCreateComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Comment creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommentParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Comment created successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueComment" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty body or issue is locked", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (issue locked and user lacks write access)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/comments/{comment_id}": { + "put": { + "tags": [ + "Issues" + ], + "summary": "Update an issue comment", + "description": "Updates the body of an existing comment. Only the comment author can update their own comments.\nRequires read access to the issue.\n\nReturns the updated comment with edit timestamp.", + "operationId": "issueUpdateComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "comment_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Comment update parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCommentParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Comment updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueComment" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty body", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Cannot edit other users' comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace, issue, or comment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Delete an issue comment", + "description": "Soft-deletes a comment. The comment author can delete their own comments.\nWorkspace admins can delete any comment.\n\nEffects:\n- Comment is marked as deleted\n- Issue comment count is decremented\n\nReturns success message on completion.", + "operationId": "issueDeleteComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "comment_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Comment deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Cannot delete other users' comments (requires admin)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace, issue, or comment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/events": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List issue events", + "description": "Returns a chronological timeline of all events for the given issue.\nEvents include creation, updates, state changes, assignments, label changes, etc.\nSorted by creation date (oldest first for timeline display).\nRequires read access to the issue.", + "operationId": "issueListEvents", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of events to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of events to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Events listed successfully. Returns chronological array of event objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueEvent" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/labels": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List labels assigned to an issue", + "description": "Returns a paginated list of all label relations for the given issue.\nShows which labels are attached to the issue, with assignment metadata.\nRequires read access to the issue.", + "operationId": "issueListLabelRelations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of label relations to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of label relations to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Label relations listed successfully. Returns array of label relation objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueLabelRelation" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/labels/{label_id}": { + "post": { + "tags": [ + "Issues" + ], + "summary": "Assign a label to an issue", + "description": "Attaches a label to the given issue. The label must belong to a repository in the same workspace.\nRequires write access to the issue (author or workspace member).\n\nEffects:\n- Label is attached to the issue\n- Issue label count is incremented\n\nReturns the created label relation.", + "operationId": "issueAssignLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "label_id", + "in": "path", + "description": "Label ID (UUID) to assign", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Label assigned successfully. Returns the created label relation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueLabelRelation" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue or label not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Label is already assigned to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Unassign a label from an issue", + "description": "Removes a label from the given issue.\nRequires write access to the issue (author or workspace member).\n\nEffects:\n- Label relation is removed from the issue\n- Issue label count is decremented\n\nReturns success message on completion.", + "operationId": "issueUnassignLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "label_id", + "in": "path", + "description": "Label ID (UUID) to unassign", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Label unassigned successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Label is not assigned to this issue or not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/lock": { + "put": { + "tags": [ + "Issues" + ], + "summary": "Lock or unlock an issue", + "description": "Locks or unlocks conversation on an issue. When locked, only users with write access can comment.\nRequires write access to the issue (author or workspace member).\n\nReturns the updated issue with lock status.", + "operationId": "issueLock", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Lock/unlock parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LockIssueParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Issue lock status updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to manage this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/mute": { + "put": { + "tags": [ + "Issues" + ], + "summary": "Mute or unmute issue notifications", + "description": "Mutes or unmutes notifications for the given issue without unsubscribing.\nRequires an active subscription to the issue.\n\nReturns success message on completion.", + "operationId": "issueMute", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Mute/unmute parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MuteIssueParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Mute status updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Not currently subscribed to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/prs": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List pull request relations for an issue", + "description": "Returns a paginated list of all pull requests linked to the given issue.\nShows relation type (closes, references, depends_on, etc.) and link metadata.\nRequires read access to the issue.", + "operationId": "issueListPrRelations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of relations to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of relations to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR relations listed successfully. Returns array of PR relation objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssuePrRelation" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Link a pull request to an issue", + "description": "Creates a relation between the given issue and a pull request.\nCommonly used to mark a PR as closing or referencing an issue.\nRequires write access to the issue.\n\nParameters:\n- pull_request_id: Pull request ID (UUID) to link\n- relation_type: Relation type (\"closes\", \"references\", \"depends_on\", default: \"references\")\n\nReturns the created relation.", + "operationId": "issueLinkPr", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Link pull request parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkPrParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Pull request linked successfully. Returns the created relation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssuePrRelation" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid relation type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue or pull request not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Pull request is already linked to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/prs/{relation_id}": { + "delete": { + "tags": [ + "Issues" + ], + "summary": "Unlink a pull request from an issue", + "description": "Removes a pull request relation from the given issue.\nRequires write access to the issue.\n\nReturns success message on completion.", + "operationId": "issueUnlinkPr", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "relation_id", + "in": "path", + "description": "Relation ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Pull request unlinked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR relation not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/reactions": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List reactions on an issue", + "description": "Returns a paginated list of all emoji reactions on the given issue.\nIncludes reaction content, target type, and user who added each reaction.\nRequires read access to the issue.", + "operationId": "issueListReactions", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of reactions to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of reactions to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Reactions listed successfully. Returns array of reaction objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueReaction" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Add a reaction to an issue", + "description": "Adds an emoji reaction to the given issue.\nRequires read access to the issue.\n\nParameters:\n- content: Reaction content (e.g., \"👍\", \"❤️\", \"🎉\")\n- target_type: Target type for the reaction (defaults to \"Issue\")\n- target_id: Target ID for reactions on specific comments (optional)\n\nReturns the created reaction.", + "operationId": "issueAddReaction", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Reaction creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIssueReactionParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Reaction added successfully. Returns the created reaction.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueReaction" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty content or invalid target type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/reactions/{reaction_id}": { + "delete": { + "tags": [ + "Issues" + ], + "summary": "Remove a reaction from an issue", + "description": "Removes a previously added reaction. Only the user who added the reaction can remove it.\nRequires read access to the issue.\n\nReturns success message on completion.", + "operationId": "issueRemoveReaction", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "reaction_id", + "in": "path", + "description": "Reaction ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Reaction removed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Cannot remove another user's reaction", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Reaction not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/reopen": { + "post": { + "tags": [ + "Issues" + ], + "summary": "Reopen an issue", + "description": "Reopens a closed issue. The issue state changes back to \"open\" and closed metadata is cleared.\nRequires write access to the issue (author or workspace member).\n\nReturns the reopened issue with updated metadata.", + "operationId": "issueReopen", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Issue reopened successfully. Returns the reopened issue with updated metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "400": { + "description": "Issue is not closed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to reopen this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/repos": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List repository relations for an issue", + "description": "Returns a paginated list of all repositories linked to the given issue.\nShows relation type (references, duplicates, blocks, etc.) and link metadata.\nRequires read access to the issue.", + "operationId": "issueListRepoRelations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of relations to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of relations to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Repository relations listed successfully. Returns array of relation objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueRepoRelation" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Link a repository to an issue", + "description": "Creates a relation between the given issue and a repository.\nRequires write access to the issue.\n\nParameters:\n- repo_id: Repository ID (UUID) to link\n- relation_type: Relation type (\"references\", \"duplicates\", \"blocks\", \"depends_on\", default: \"references\")\n\nReturns the created relation.", + "operationId": "issueLinkRepo", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Link repository parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkRepoParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Repository linked successfully. Returns the created relation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueRepoRelation" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid relation type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue or repository not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Repository is already linked to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/repos/{relation_id}": { + "delete": { + "tags": [ + "Issues" + ], + "summary": "Unlink a repository from an issue", + "description": "Removes a repository relation from the given issue.\nRequires write access to the issue.\n\nReturns success message on completion.", + "operationId": "issueUnlinkRepo", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "relation_id", + "in": "path", + "description": "Relation ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Repository unlinked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository relation not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/subscribe": { + "post": { + "tags": [ + "Issues" + ], + "summary": "Subscribe to an issue", + "description": "Subscribes the authenticated user to the given issue to receive notifications.\nRequires read access to the issue.\n\nEffects:\n- User is added as a subscriber with \"manual\" reason\n- User receives notifications for all issue activity\n\nReturns the created subscription record.", + "operationId": "issueSubscribe", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Subscribed successfully. Returns the subscription record.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueSubscriber" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Already subscribed to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Unsubscribe from an issue", + "description": "Removes the authenticated user's subscription to the given issue.\nStops all notifications for this issue.\n\nReturns success message on completion.", + "operationId": "issueUnsubscribe", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Unsubscribed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Not currently subscribed to this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/subscribers": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List subscribers of an issue", + "description": "Returns a paginated list of all users subscribed to the given issue.\nShows who receives notifications and their subscription reason (author, assignee, manual).\nRequires read access to the issue.", + "operationId": "issueListSubscribers", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of subscribers to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of subscribers to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Subscribers listed successfully. Returns array of subscriber objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueSubscriber" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to view this issue", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/issues/{number}/transfer": { + "post": { + "tags": [ + "Issues" + ], + "summary": "Transfer an issue to another workspace", + "description": "Moves an issue from the current workspace to a different workspace.\nRequires Admin role in both the source and target workspaces.\n\nEffects:\n- Issue is transferred to the target workspace with a new number\n- Source workspace issue count is decremented\n- Target workspace issue count is incremented\n\nReturns the transferred issue with updated workspace and number.", + "operationId": "issueTransfer", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "Issue number (unique within the workspace)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Transfer parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferIssueParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Issue transferred successfully. Returns the issue with new workspace assignment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Issue" + } + } + } + }, + "400": { + "description": "Invalid target workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions in source or target workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace or issue not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/leave": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Leave a workspace", + "description": "Remove the current user from the workspace. The owner cannot leave; transfer ownership first.", + "operationId": "workspaceLeave", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Left the workspace.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "Owner cannot leave.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or not a member.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/members": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List workspace members", + "description": "Return active members of a workspace. Viewable by anyone with read access.", + "operationId": "workspaceListMembers", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of members.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspaceMember" + } + } + } + }, + "401": { + "description": "Unauthenticated or not readable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Add a member", + "description": "Add a user to a workspace. Requires admin role. Cannot add members with role equal to or higher than the caller.", + "operationId": "workspaceAddMember", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "User ID and optional role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddMemberParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Member added.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceMember" + } + } + } + }, + "400": { + "description": "Cannot add owner, invalid role, or member invites disabled.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "User is already a member.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/members/{member_id}": { + "delete": { + "tags": [ + "Workspaces" + ], + "summary": "Remove a member", + "description": "Remove a member from the workspace. Requires admin role. Cannot remove owner.", + "operationId": "workspaceRemoveMember", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "member_id", + "in": "path", + "description": "Member record ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Member removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "400": { + "description": "Cannot remove owner or member with equal/higher role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Member not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/members/{member_id}/role": { + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update a member's role", + "description": "Change the role of a workspace member. Requires admin role. Cannot change owner role; use transfer-owner instead.", + "operationId": "workspaceUpdateMemberRole", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "member_id", + "in": "path", + "description": "Member record ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "New role value.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMemberRoleParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Member role updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceMember" + } + } + } + }, + "400": { + "description": "Invalid role, cannot change owner, or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Member not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/repos": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List repositories in a workspace", + "description": "Returns a paginated list of repositories that the current user has access to within the specified workspace.\nAccess is determined by:\n- Public repositories: accessible to all authenticated users\n- Private repositories: accessible only to repository members and workspace owners\n- Internal repositories: accessible to all workspace members\n\nThe results are sorted by creation date in descending order (newest first).", + "operationId": "repoList", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of repositories to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of repositories to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Repositories listed successfully. Returns an array of repository objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_Repo" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a new repository", + "description": "Creates a new Git repository within the specified workspace. The authenticated user becomes the repository owner.\n\nRequirements:\n- User must have at least Member role in the workspace\n- Repository name must be unique within the workspace\n- Name must be 1-100 characters, alphanumeric, hyphens, underscores, and dots allowed\n\nOptional parameters:\n- description: Repository description (max 500 characters)\n- visibility: \"public\", \"private\", or \"internal\" (defaults to workspace setting)\n- default_branch: Default branch name (defaults to \"main\")\n\nReturns the created repository with full metadata.", + "operationId": "repoCreate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Repository creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRepoParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Repository created successfully. Returns the newly created repository with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Repo" + } + } + } + }, + "400": { + "description": "Invalid parameters: name too long, invalid characters, or invalid visibility", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to create repositories in this workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Repository with this name already exists in the workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git initialization failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}": { + "get": { + "tags": [ + "Repos" + ], + "summary": "Get a specific repository", + "description": "Returns detailed information about a specific repository identified by workspace and repository name.\nAccess is determined by repository visibility:\n- Public repositories: accessible to all authenticated users\n- Private repositories: accessible only to repository members and workspace owners\n- Internal repositories: accessible to all workspace members\n\nReturns 404 if the repository doesn't exist or the user lacks access permissions.", + "operationId": "repoGet", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository retrieved successfully. Returns complete repository metadata including visibility, default branch, creation date, and statistics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Repo" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository not found or access denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "Repos" + ], + "summary": "Update a repository", + "description": "Updates repository metadata such as name, description, visibility, and default branch.\nRequires Admin role or higher in the repository.\n\nUpdate rules:\n- name: Must be unique within workspace if changed (1-100 characters)\n- description: Max 500 characters\n- visibility: \"public\", \"private\", or \"internal\" (workspace owners can restrict public repos)\n- default_branch: Must be an existing branch name\n\nAll fields are optional; only provided fields are updated.\nReturns the updated repository with full metadata.", + "operationId": "repoUpdate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Repository update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRepoParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Repository updated successfully. Returns the updated repository with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Repo" + } + } + } + }, + "400": { + "description": "Invalid parameters: name too long, invalid characters, default branch doesn't exist, or public repos disabled", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Repository name already exists in the workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a repository", + "description": "Permanently deletes a repository and all associated data including:\n- Git repository and all commits\n- Branches, tags, and releases\n- Issues, pull requests, and comments\n- Webhooks, deploy keys, and protection rules\n- Stars, watches, and forks\n\nRequires Owner role in the repository. This action is irreversible.\n\nReturns success message on completion.", + "operationId": "repoDelete", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository deleted successfully. All repository data has been permanently removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Owner role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git deletion failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/archive": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Archive a repository", + "description": "Marks a repository as archived, making it read-only. All write operations (push, create issues, etc.) are disabled.\nRequires Owner role in the repository.\n\nEffects:\n- Repository status changes to \"archived\"\n- All write operations are blocked\n- Repository remains visible based on its visibility setting\n- Can be unarchived later by repository owners\n\nReturns success message on completion.", + "operationId": "repoArchive", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository archived successfully. Repository is now read-only.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Owner role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Repository is already archived", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List branches in a repository", + "description": "Returns a paginated list of all branches in the repository, sorted by name alphabetically.\nIncludes branch metadata such as:\n- Branch name and commit SHA\n- Protected status\n- Default branch flag\n- Last push information\n\nRequires read access to the repository.", + "operationId": "repoListBranches", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of branches to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of branches to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Branches listed successfully. Returns an array of branch objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoBranch" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a new branch", + "description": "Creates a new branch in the repository based on an existing commit or branch.\nRequires Write role or higher in the repository.\n\nParameters:\n- name: Branch name (1-100 characters, alphanumeric, hyphens, underscores, dots, slashes allowed)\n- from: Source branch name or commit SHA to branch from (defaults to default branch)\n\nReturns the created branch with metadata including the initial commit SHA.", + "operationId": "repoCreateBranch", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Branch creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBranchParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Branch created successfully. Returns the newly created branch with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoBranch" + } + } + } + }, + "400": { + "description": "Invalid parameters: name too long, invalid characters, or source branch/commit doesn't exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or source branch/commit not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Branch with this name already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{branch_id}": { + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a branch", + "description": "Permanently deletes a branch from the repository. The default branch cannot be deleted.\nRequires Write role or higher in the repository.\n\nEffects:\n- Branch is permanently removed from the repository\n- All commits exclusive to this branch remain accessible via their SHA\n- Open pull requests targeting this branch will be closed\n\nReturns success message on completion.", + "operationId": "repoDeleteBranch", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_id", + "in": "path", + "description": "Branch ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Branch deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Cannot delete the default branch", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or branch not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{branch_id}/default": { + "put": { + "tags": [ + "Repos" + ], + "summary": "Set default branch", + "description": "Sets a branch as the repository's default branch. The default branch is used for:\n- New pull requests base branch\n- Repository cloning\n- New branch creation base\n\nRequires Admin role or higher in the repository.\n\nReturns success message on completion.", + "operationId": "repoSetDefaultBranch", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_id", + "in": "path", + "description": "Branch ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Default branch set successfully. All new operations will use this branch as the default.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or branch not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{branch_id}/protection": { + "put": { + "tags": [ + "Repos" + ], + "summary": "Set branch protection", + "description": "Enables or disables protection for a specific branch.\nRequires Admin role or higher in the repository.\n\nEffects:\n- When enabled: prevents force pushes and branch deletion\n- When disabled: allows force pushes and branch deletion\n\nReturns success message on completion.", + "operationId": "repoSetBranchProtection", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_id", + "in": "path", + "description": "Branch ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Branch protection parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetBranchProtectionParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Branch protection rules set successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Invalid parameters: negative approvals count or conflicting protection settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or branch not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{target_branch}/merge-check": { + "get": { + "tags": [ + "Repos" + ], + "summary": "Check if a branch meets merge requirements", + "operationId": "check_branch_merge", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "target_branch", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pr_number", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Merge check completed successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_BranchMergeCheck" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or pull request not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/comments": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a commit comment", + "description": "Creates a new comment on a specific commit. Comments can be general or inline (attached to a specific file and line).\nRequires Write role or higher in the repository.\n\nParameters:\n- commit_sha: Commit SHA to comment on (must exist in repository)\n- body: Comment body in markdown format (1-10000 characters)\n- path: File path for inline comments (optional)\n- line: Line number for inline comments (optional, requires path)\n\nEffects:\n- Comment is attached to the commit\n- Comment author receives notifications for replies\n- Inline comments appear in code review interfaces\n\nReturns the created comment with metadata including ID and timestamps.", + "operationId": "repoCreateCommitComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Commit comment creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommitCommentParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Commit comment created successfully. Returns the newly created comment with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoCommitComment" + } + } + } + }, + "400": { + "description": "Invalid parameters: body too long, line without path, or commit doesn't exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, commit, or file path not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/comments/{comment_id}/resolve": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Resolve a commit comment", + "description": "Marks a commit comment as resolved, indicating the issue has been addressed.\nRequires Write role or higher in the repository.\n\nEffects:\n- Comment is marked as resolved\n- Resolved comments are visually distinguished in code review interfaces\n- Resolution is recorded with the resolver's user ID and timestamp\n\nReturns success message on completion.", + "operationId": "repoResolveCommitComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "comment_id", + "in": "path", + "description": "Comment ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Commit comment resolved successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or comment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Comment is already resolved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/commits/{commit_sha}/comments": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List commit comments", + "description": "Returns a paginated list of all comments on a specific commit, sorted by creation date (newest first).\nIncludes comment metadata such as:\n- Comment body in markdown format\n- Author information\n- File path and line number (for inline comments)\n- Resolved status\n- Creation and update timestamps\n\nRequires read access to the repository.", + "operationId": "repoListCommitComments", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "push_commit_id", + "in": "path", + "description": "Push commit ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of comments to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of comments to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Commit comments listed successfully. Returns an array of comment objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoCommitComment" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or commit not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/commits/{commit_sha}/statuses": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List commit statuses", + "description": "Returns a paginated list of all status checks for a specific commit, sorted by creation date (newest first).\nIncludes status metadata such as:\n- Status state (pending, success, failure, error)\n- Context name (e.g., \"ci/build\", \"ci/test\")\n- Description and target URL\n- Creator information\n\nRequires read access to the repository.", + "operationId": "repoListCommitStatuses", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "push_commit_id", + "in": "path", + "description": "Push commit ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of statuses to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of statuses to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Commit statuses listed successfully. Returns an array of status objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoCommitStatus" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or commit not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/deploy-keys": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List deploy keys in a repository", + "description": "Returns a paginated list of all deploy keys in the repository, sorted by creation date (newest first).\nIncludes deploy key metadata such as:\n- Key title and fingerprint\n- Read-only status\n- Creator information\n- Creation date and last used date\n\nRequires Admin role or higher in the repository.", + "operationId": "repoListDeployKeys", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of deploy keys to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of deploy keys to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Deploy keys listed successfully. Returns an array of deploy key objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoDeployKey" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Add a deploy key to a repository", + "description": "Adds an SSH public key for automated deployments and CI/CD access to the repository.\nRequires Admin role or higher in the repository.\n\nParameters:\n- title: Human-readable name for the deploy key (1-100 characters)\n- key: SSH public key in OpenSSH format (e.g., \"ssh-rsa AAAA...\")\n- read_only: Whether the key has read-only access (default: true)\n\nEffects:\n- Deploy key is added to the repository\n- Key can be used for Git operations (clone, fetch, push if not read-only)\n- Key fingerprint is calculated and stored\n\nReturns the created deploy key with metadata including fingerprint.", + "operationId": "repoAddDeployKey", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Deploy key addition parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddDeployKeyParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Deploy key added successfully. Returns the newly created deploy key with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoDeployKey" + } + } + } + }, + "400": { + "description": "Invalid parameters: title too long or invalid SSH key format", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Deploy key with this fingerprint already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/deploy-keys/{key_id}": { + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a deploy key from a repository", + "description": "Removes an SSH deploy key from the repository, revoking its access.\nRequires Admin role or higher in the repository.\n\nEffects:\n- Deploy key is permanently removed from the repository\n- Key can no longer be used for Git operations\n- Automated systems using this key will lose access\n\nReturns success message on completion.", + "operationId": "repoDeleteDeployKey", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "key_id", + "in": "path", + "description": "Deploy key ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Deploy key deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or deploy key not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/fork": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Fork a repository", + "description": "Creates a copy of the repository in the specified workspace or the current user's workspace.\nRequires read access to the source repository and write access to the target workspace.\n\nEffects:\n- Creates a new repository with all branches, tags, and commit history\n- Establishes a parent-child relationship between source and fork\n- Fork is initially set to private visibility\n- Current user becomes the owner of the fork\n\nReturns the created fork repository with full metadata.", + "operationId": "repoFork", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Fork parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForkRepoParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Repository forked successfully. Returns the newly created fork with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Repo" + } + } + } + }, + "400": { + "description": "Invalid parameters: target name conflicts or invalid characters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to fork or create in target workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Source repository or target workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Fork with this name already exists in target workspace", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/forks": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List forks of a repository", + "description": "Returns a paginated list of all repositories that have been forked from this repository.\nIncludes fork metadata such as:\n- Fork repository information\n- Fork owner and workspace\n- Fork creation date\n\nRequires read access to the repository.", + "operationId": "repoListForks", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of forks to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of forks to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Forks listed successfully. Returns an array of fork objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoFork" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/invitations": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List repository invitations", + "description": "Returns a paginated list of all pending invitations for the repository, sorted by creation date (newest first).\nIncludes invitation metadata such as:\n- Invitee email address\n- Invited role\n- Inviter information\n- Expiration date\n- Creation date\n\nRequires Admin role or higher in the repository.", + "operationId": "repoListInvitations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of invitations to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of invitations to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Invitations listed successfully. Returns an array of invitation objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoInvitation" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a repository invitation", + "description": "Sends an invitation email to a user to join the repository with a specific role.\nRequires Admin role or higher in the repository.\n\nParameters:\n- email: Email address of the invitee (must be a valid email)\n- role: Role to assign when invitation is accepted (\"read\", \"write\", \"admin\")\n\nEffects:\n- Invitation email is sent to the invitee\n- Invitation expires after 7 days\n- Invitee must have a verified email to accept\n\nReturns the created invitation with metadata including expiration date.", + "operationId": "repoCreateInvitation", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Invitation creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRepoInvitationParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Invitation created successfully. Returns the newly created invitation with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoInvitation" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid email format or invalid role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "User is already a member or has a pending invitation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or email sending failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/invitations/{invitation_id}": { + "delete": { + "tags": [ + "Repos" + ], + "summary": "Revoke a repository invitation", + "description": "Cancels a pending invitation, preventing the invitee from accepting it.\nRequires Admin role or higher in the repository.\n\nEffects:\n- Invitation is marked as revoked\n- Invitee can no longer accept the invitation\n- Invitation email link becomes invalid\n\nReturns success message on completion.", + "operationId": "repoRevokeInvitation", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "invitation_id", + "in": "path", + "description": "Invitation ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Invitation revoked successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or invitation not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/labels": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List labels in a repository", + "description": "Returns all issue labels defined in the repository, sorted alphabetically.\nRequires read access to the repository.", + "operationId": "issueListLabels", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Labels listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueLabel" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Create a label", + "description": "Creates a new issue label in a repository.\nRequires at least Member role in the repository.\n\nParameters:\n- name: Label name (required, e.g., \"bug\", \"feature\")\n- color: Hex color code (required, e.g., \"#FF0000\")\n- description: Label description (optional)\n\nReturns the created label with metadata.", + "operationId": "issueCreateLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Label creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateLabelParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Label created successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueLabel" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty name or invalid color", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/labels/{label_id}": { + "put": { + "tags": [ + "Issues" + ], + "summary": "Update a label", + "description": "Updates an existing issue label's name, color, or description.\nRequires Admin role in the repository.\n\nAll fields are optional; only provided fields are updated.\nReturns the updated label.", + "operationId": "issueUpdateLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "label_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Label update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateLabelParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Label updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueLabel" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or label not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Delete a label", + "description": "Permanently removes an issue label from a repository.\nRequires Admin role in the repository.\n\nEffects:\n- Label is permanently deleted\n- All issue-label relations using this label are removed\n\nReturns success message on completion.", + "operationId": "issueDeleteLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "label_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Label deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or label not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/milestones": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List milestones in a repository", + "description": "Returns a paginated list of milestones in the repository, sorted by state (open first) then by due date.\nIncludes milestone metadata such as title, description, state, due date, and progress.\nRequires read access to the repository.", + "operationId": "issueListMilestones", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of milestones to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of milestones to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Milestones listed successfully. Returns array of milestone objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueMilestone" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Create a milestone", + "description": "Creates a new milestone in a repository for tracking issue progress.\nRequires at least Member role in the repository.\n\nParameters:\n- title: Milestone title (required)\n- description: Description of the milestone (optional)\n- due_at: Target due date (optional)\n\nReturns the created milestone with metadata.", + "operationId": "issueCreateMilestone", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Milestone creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMilestoneParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Milestone created successfully. Returns the newly created milestone with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueMilestone" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty title", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/milestones/{milestone_id}": { + "put": { + "tags": [ + "Issues" + ], + "summary": "Update a milestone", + "description": "Updates an existing milestone's metadata. Can also close or reopen the milestone via the state field.\nRequires at least Member role in the repository.\n\nUpdatable fields:\n- title: Milestone title (optional)\n- description: Description (optional)\n- due_at: Target due date (optional)\n- state: State (\"open\" or \"closed\") for closing/reopening the milestone (optional)\n\nAll fields are optional; only provided fields are updated.\nReturns the updated milestone with full metadata.", + "operationId": "issueUpdateMilestone", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "milestone_id", + "in": "path", + "description": "Milestone ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Milestone update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMilestoneParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Milestone updated successfully. Returns the updated milestone with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueMilestone" + } + } + } + }, + "400": { + "description": "Invalid parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or milestone not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Delete a milestone", + "description": "Permanently removes a milestone from the repository.\nRequires Admin role in the repository.\n\nEffects:\n- Milestone is permanently deleted\n- Issues attached to this milestone lose their milestone association\n\nReturns success message on completion.", + "operationId": "issueDeleteMilestone", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "milestone_id", + "in": "path", + "description": "Milestone ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Milestone deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or milestone not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/templates": { + "get": { + "tags": [ + "Issues" + ], + "summary": "List issue templates in a repository", + "description": "Returns a paginated list of all active issue templates in the repository.\nTemplates provide pre-filled content for creating new issues.\nSorted alphabetically by name.\nRequires read access to the repository.", + "operationId": "issueListTemplates", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of templates to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of templates to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Templates listed successfully. Returns array of template objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_IssueTemplate" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Issues" + ], + "summary": "Create an issue template", + "description": "Creates a new issue template in the repository.\nRequires at least Member role in the repository.\n\nParameters:\n- name: Template name (required)\n- description: Template description (optional)\n- title_template: Default title for issues (optional, supports placeholders)\n- body_template: Default body content in markdown (required)\n- labels: List of label names to auto-apply (optional)\n\nReturns the created template with metadata.", + "operationId": "issueCreateTemplate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Template creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTemplateParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Template created successfully. Returns the newly created template.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueTemplate" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty name or body template", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/templates/{template_id}": { + "put": { + "tags": [ + "Issues" + ], + "summary": "Update an issue template", + "description": "Updates an existing issue template's metadata and content.\nRequires Admin role in the repository.\n\nAll fields are optional; only provided fields are updated.\nReturns the updated template.", + "operationId": "issueUpdateTemplate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "template_id", + "in": "path", + "description": "Template ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Template update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTemplateParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Template updated successfully. Returns the updated template.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_IssueTemplate" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or template not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Issues" + ], + "summary": "Delete an issue template", + "description": "Permanently removes an issue template from the repository.\nRequires Admin role in the repository.\n\nReturns success message on completion.", + "operationId": "issueDeleteTemplate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "template_id", + "in": "path", + "description": "Template ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Template deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Template not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/leave": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Leave a repository", + "description": "Removes the current user's access to the repository.\nRequires the user to be a member of the repository.\n\nRestrictions:\n- Repository owner cannot leave (use transfer_owner instead)\n\nEffects:\n- User loses all access to the repository\n- User is removed from all repository activities\n\nReturns success message on completion.", + "operationId": "repoLeave", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Left repository successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Repository owner cannot leave the repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List repository members", + "description": "Returns a paginated list of all members with access to the repository, sorted by join date (oldest first).\nIncludes member metadata such as:\n- User information (ID, username, display name)\n- Role (owner, admin, write, read)\n- Join date and last activity\n\nRequires read access to the repository.", + "operationId": "repoListMembers", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of members to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of members to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Members listed successfully. Returns an array of member objects with user information and roles.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoMember" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Add a member to a repository", + "description": "Grants a user access to the repository with a specific role.\nRequires Admin role or higher in the repository.\n\nRequirements:\n- User must exist in the system\n- User must be a member of the workspace\n- Role must be one of: \"read\", \"write\", \"admin\" (cannot assign \"owner\")\n\nReturns the created member record with user information and role.", + "operationId": "repoAddMember", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Member addition parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddRepoMemberParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Member added successfully. Returns the newly created member record with user information and role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoMember" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid role or user doesn't exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or user not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "User is already a member of this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members/{member_id}": { + "delete": { + "tags": [ + "Repos" + ], + "summary": "Remove a member from a repository", + "description": "Revokes a user's access to the repository.\nRequires Admin role or higher in the repository.\n\nRestrictions:\n- Cannot remove the repository owner (use transfer_owner instead)\n- Cannot remove members with equal or higher role than your own\n\nEffects:\n- Member loses all access to the repository\n- Member is removed from all repository activities\n\nReturns success message on completion.", + "operationId": "repoRemoveMember", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "member_id", + "in": "path", + "description": "Member ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Member removed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Cannot remove the repository owner or member with higher role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or member not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members/{member_id}/role": { + "put": { + "tags": [ + "Repos" + ], + "summary": "Update a member's role in a repository", + "description": "Changes the access level of an existing repository member.\nRequires Admin role or higher in the repository.\n\nRole restrictions:\n- Cannot change the owner's role (use transfer_owner instead)\n- Cannot assign \"owner\" role (use transfer_owner instead)\n- Can only assign roles equal to or lower than your own\n- Valid roles: \"read\", \"write\", \"admin\"\n\nReturns the updated member record with new role information.", + "operationId": "repoUpdateMemberRole", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "member_id", + "in": "path", + "description": "Member ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Role update parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRepoMemberRoleParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Member role updated successfully. Returns the updated member record with new role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoMember" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid role or attempting to change owner role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or member not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List branch protection rules in a repository", + "description": "Returns a paginated list of all branch protection rules in the repository, sorted by pattern alphabetically.\nIncludes protection rule metadata such as:\n- Branch name pattern (supports wildcards like \"feature/*\")\n- Required approvals count\n- Required status checks\n- Restrictions on pushes and deletions\n- Creator information\n\nRequires read access to the repository.", + "operationId": "repoListProtectionRules", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of protection rules to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of protection rules to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Protection rules listed successfully. Returns an array of protection rule objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_BranchProtectionRule" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a branch protection rule", + "description": "Creates a new branch protection rule that enforces policies on matching branches.\nRequires Admin role or higher in the repository.\n\nParameters:\n- pattern: Branch name pattern (supports wildcards like \"feature/*\", \"release/**\")\n- required_approvals: Number of required approvals before merging (0-10)\n- require_status_checks: Whether status checks must pass\n- required_status_checks: List of required status check contexts\n- restrict_pushes: Restrict who can push to matching branches\n- allow_force_pushes: Allow force pushes (only if restrict_pushes is false)\n- allow_deletions: Allow branch deletion (only if restrict_pushes is false)\n\nReturns the created protection rule with full configuration.", + "operationId": "repoCreateProtectionRule", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Protection rule creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProtectionRuleParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Protection rule created successfully. Returns the newly created protection rule with full configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_BranchProtectionRule" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid pattern, negative approvals count, or conflicting settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Protection rule with this pattern already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules/{rule_id}": { + "get": { + "tags": [ + "Repos" + ], + "summary": "Get a specific branch protection rule", + "description": "Returns detailed information about a specific branch protection rule.\nRequires read access to the repository.\n\nReturns the complete protection rule with all configuration details including:\n- Branch name pattern\n- Required approvals and status checks\n- Push and deletion restrictions\n- Creator information and timestamps", + "operationId": "repoGetProtectionRule", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "rule_id", + "in": "path", + "description": "Protection rule ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Protection rule retrieved successfully. Returns complete protection rule with all configuration details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_BranchProtectionRule" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or protection rule not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "Repos" + ], + "summary": "Update a branch protection rule", + "description": "Updates an existing branch protection rule's configuration.\nRequires Admin role or higher in the repository.\n\nUpdatable fields:\n- required_approvals: Number of required approvals before merging (0-10)\n- require_status_checks: Whether status checks must pass\n- required_status_checks: List of required status check contexts\n- restrict_pushes: Restrict who can push to matching branches\n- allow_force_pushes: Allow force pushes (only if restrict_pushes is false)\n- allow_deletions: Allow branch deletion (only if restrict_pushes is false)\n\nAll fields are optional; only provided fields are updated.\nReturns the updated protection rule with full configuration.", + "operationId": "repoUpdateProtectionRule", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "rule_id", + "in": "path", + "description": "Protection rule ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Protection rule update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProtectionRuleParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Protection rule updated successfully. Returns the updated protection rule with full configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_BranchProtectionRule" + } + } + } + }, + "400": { + "description": "Invalid parameters: negative approvals count or conflicting settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or protection rule not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a branch protection rule", + "description": "Permanently removes a branch protection rule from the repository.\nRequires Admin role or higher in the repository.\n\nEffects:\n- Protection rule is permanently removed\n- Branches matching the pattern are no longer protected by this rule\n- Pushes and merges to matching branches are no longer restricted\n\nReturns success message on completion.", + "operationId": "repoDeleteProtectionRule", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "rule_id", + "in": "path", + "description": "Protection rule ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Protection rule deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or protection rule not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection/match": { + "get": { + "tags": [ + "Repos" + ], + "summary": "Match a branch name against protection rules", + "description": "Checks if a branch name matches any protection rule in the repository.\nRequires read access to the repository.\n\nReturns the matching protection rule if found, or null if no rules match.\nUseful for determining what protections apply to a specific branch before performing operations.", + "operationId": "repoMatchProtection", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_name", + "in": "query", + "description": "Branch name to check against protection rules", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Branch protection check completed. Returns matching protection rule or null if no rules match.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Option_BranchProtectionRule" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List pull requests in a repository", + "description": "Returns a paginated list of pull requests, sorted by number (newest first).\nSupports filtering by state, author, and draft status.\nRequires read access to the repository.", + "operationId": "prList", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "state", + "in": "query", + "description": "Filter by PR state (\"open\", \"closed\", \"merged\")", + "required": false, + "schema": { + "type": [ + "string", + "null" + ] + } + }, + { + "name": "author_id", + "in": "query", + "description": "Filter by author user ID", + "required": false, + "schema": { + "type": [ + "string", + "null" + ], + "format": "uuid" + } + }, + { + "name": "draft", + "in": "query", + "description": "Filter by draft status", + "required": false, + "schema": { + "type": [ + "boolean", + "null" + ] + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of PRs to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of PRs to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PRs listed successfully. Returns filtered array of PR objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PullRequest" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Create a pull request", + "description": "Creates a new pull request proposing changes from a source branch to a target branch.\nRequires at least Member role in the repository.\n\nParameters:\n- title: PR title (required)\n- body: PR description in markdown (optional)\n- source_repo_id: Source repository ID (supports cross-repo PRs from forks)\n- source_branch: Source branch name (must exist)\n- target_branch: Target branch name (must exist in the repo)\n- head_commit_sha: Head commit SHA from the source branch\n- base_commit_sha: Base commit SHA for diff calculation (optional)\n- draft: Whether this is a draft PR (optional, defaults to false)\n\nEffects:\n- PR is created with auto-incrementing number\n- PR status tracking is initialized\n- Author is automatically subscribed\n- Repository stats are updated\n\nReturns the created PR with full metadata.", + "operationId": "prCreate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "PR creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePrParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "PR created successfully. Returns the newly created PR with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty title, non-existent branch/commit, or invalid fork relationship", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/labels": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List PR labels in a repository", + "operationId": "prListLabels", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Labels listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrLabel" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repo not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Create a PR label. Requires Member role.", + "operationId": "prCreateLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Label creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePrLabelParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Label created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrLabel" + } + } + } + }, + "400": { + "description": "Invalid parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repo not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/labels/{label_id}": { + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Update a PR label. Requires Admin role.", + "operationId": "prUpdateLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "label_id", + "in": "path", + "description": "Label ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Label update parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePrLabelParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Label updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrLabel" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (Admin required)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Label not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Delete a PR label. Requires Admin role.", + "operationId": "prDeleteLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "label_id", + "in": "path", + "description": "Label ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Label deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (Admin required)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Label not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "Get a pull request by number", + "description": "Returns detailed information about a specific pull request.\nRequires read access to the repository.", + "operationId": "prGet", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR retrieved successfully. Returns complete PR with all metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Update a pull request", + "description": "Updates an existing pull request's metadata such as title, body, target branch, and draft status.\nRequires write access to the PR (author or repository member).\n\nAll fields are optional; only provided fields are updated.\nReturns the updated PR with full metadata.", + "operationId": "prUpdate", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "PR update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePrParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "PR updated successfully. Returns the updated PR with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "400": { + "description": "Invalid parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to edit this PR", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Delete a pull request", + "description": "Soft-deletes a PR. Requires Admin role in the repository.\n\nReturns success message on completion.", + "operationId": "prDelete", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/assignees": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List assignees of a PR", + "operationId": "prListAssignees", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Assignees listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrAssignee" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/assignees/{user_id}": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Assign a user to a PR. Assignee is auto-subscribed.", + "operationId": "prAssign", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "path", + "description": "User ID (UUID) to assign/unassign", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "201": { + "description": "User assigned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrAssignee" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "User already assigned", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Unassign a user from a PR", + "operationId": "prUnassign", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "user_id", + "in": "path", + "description": "User ID (UUID) to assign/unassign", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "User unassigned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Assignee not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/check-runs": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List check runs for a PR", + "operationId": "prListCheckRuns", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Check runs listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrCheckRun" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Create a check run. Requires Member role.", + "operationId": "prCreateCheckRun", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Check run parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCheckRunParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Check run created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrCheckRun" + } + } + } + }, + "400": { + "description": "Invalid status", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/check-runs/{check_run_id}": { + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Update a check run. Requires Member role.", + "operationId": "prUpdateCheckRun", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "check_run_id", + "in": "path", + "description": "Check run ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Check run update parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCheckRunParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Check run updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrCheckRun" + } + } + } + }, + "400": { + "description": "Invalid status", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Check run not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Delete a check run. Requires Admin role.", + "operationId": "prDeleteCheckRun", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "check_run_id", + "in": "path", + "description": "Check run ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Check run deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (Admin required)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Check run not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/close": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Close a pull request", + "description": "Closes an open PR without merging.\nRequires write access to the PR.\n\nReturns the closed PR.", + "operationId": "prClose", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR closed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "400": { + "description": "PR is not open", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/comments/{comment_id}": { + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Update a review comment (own comments only)", + "operationId": "prUpdateReviewComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "comment_id", + "in": "path", + "description": "Comment ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Update parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddReplyParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Comment updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrReviewComment" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Cannot edit other users' comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Comment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Delete a review comment. Own comments or Admin role.", + "operationId": "prDeleteReviewComment", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "comment_id", + "in": "path", + "description": "Comment ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Comment deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Cannot delete other users' comments (Admin required)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Comment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/comments/{comment_id}/reply": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Reply to a review comment", + "operationId": "prAddReviewReply", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "comment_id", + "in": "path", + "description": "Comment ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Reply parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddReplyParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Reply added.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrReviewComment" + } + } + } + }, + "400": { + "description": "Empty body", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Comment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/commits": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List commits in a pull request", + "description": "Returns a paginated list of all commits included in the PR, sorted by position.\nRequires read access to the repository.", + "operationId": "prListCommits", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of commits to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of commits to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Commits listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrCommit" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/events": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List PR events (timeline). Returns chronological activity log.", + "operationId": "prListEvents", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Events listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrEvent" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/files": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List changed files in a pull request", + "description": "Returns a paginated list of all files changed in the PR, sorted by path.\nIncludes additions, deletions, and patch diffs for each file.\nRequires read access to the repository.", + "operationId": "prListFiles", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of files to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of files to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Files listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrFile" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/labels": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List labels assigned to a PR", + "operationId": "prListLabelRelations", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Label relations listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrLabelRelation" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/labels/{label_id}": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Assign a label to a PR", + "operationId": "prAssignLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "label_id", + "in": "path", + "description": "Label ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Label assigned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrLabelRelation" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR or label not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Unassign a label from a PR", + "operationId": "prUnassignLabel", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "label_id", + "in": "path", + "description": "Label ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Label unassigned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Label not assigned", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/lock": { + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Lock or unlock a pull request conversation", + "description": "When locked, only repository maintainers and admins can comment on the PR.\nRequires write access to the PR.\n\nReturns the updated PR.", + "operationId": "prLock", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Lock/unlock parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LockPrParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "PR lock status updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/merge": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Merge a pull request", + "description": "Merges the source branch into the target branch.\nRequires at least Maintainer role in the repository.\n\nBranch protection rules are enforced:\n- Required approvals count (self-approval not allowed)\n- Required status checks must pass\n- Admins can bypass protection rules\n\nParameters:\n- strategy: Merge strategy (\"merge\", \"squash\", \"rebase\", default: \"merge\")\n- squash_title: Custom title for squash merge (optional)\n- squash_message: Custom message for squash merge (optional)\n- delete_source_branch: Delete source branch after merge (optional, only same-repo)\n\nReturns the merged PR with merge commit SHA.", + "operationId": "prMerge", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Merge parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MergePrParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "PR merged successfully. Returns the merged PR with merge commit SHA.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "400": { + "description": "Cannot merge: PR not open, is draft, or branch protection requirements not met", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Maintainer role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or git merge failure", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/merge-strategy": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "Get PR merge strategy", + "description": "Returns the current merge strategy settings for a PR.\nRequires read access to the repository.", + "operationId": "prGetMergeStrategy", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Merge strategy retrieved successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrMergeStrategy" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR or merge strategy not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Update PR merge strategy", + "description": "Updates the merge strategy settings for a PR.\nRequires write access to the PR.\n\nUpdatable fields:\n- strategy: Merge strategy type (\"merge\", \"squash\", \"rebase\")\n- auto_merge: Enable auto-merge when all checks pass\n- squash_title: Custom title for squash merge\n- squash_message: Custom message for squash merge\n- delete_source_branch: Delete source branch after merge\n- merge_when_checks_pass: Auto-merge when checks pass\n\nAll fields are optional; only provided fields are updated.", + "operationId": "prUpdateMergeStrategy", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Merge strategy update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMergeStrategyParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Merge strategy updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrMergeStrategy" + } + } + } + }, + "400": { + "description": "Invalid parameters: unsupported strategy", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/mute": { + "put": { + "tags": [ + "Pull Requests" + ], + "summary": "Mute or unmute notifications for a PR", + "operationId": "prMute", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Mute/unmute parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MutePrParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Mute status updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Not subscribed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reactions": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List reactions on a PR", + "operationId": "prListReactions", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Reactions listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrReaction" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Add a reaction to a PR", + "operationId": "prAddReaction", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Reaction parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReactionParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Reaction added.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrReaction" + } + } + } + }, + "400": { + "description": "Invalid content or target type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reactions/{reaction_id}": { + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Remove a reaction. Only the reaction author can remove it.", + "operationId": "prRemoveReaction", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "reaction_id", + "in": "path", + "description": "Reaction ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Reaction removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Cannot remove another user's reaction", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Reaction not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/ready": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Mark a draft PR as ready for review", + "description": "Converts a draft pull request to a ready-for-review state.\nRequires write access to the PR.\n\nEffects:\n- Draft flag is set to false\n- A \"DraftReady\" event is logged\n- Reviewers are notified that the PR is ready\n\nReturns the updated PR.", + "operationId": "prMarkReady", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR marked as ready for review.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "400": { + "description": "PR is already ready for review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reopen": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Reopen a pull request", + "description": "Reopens a closed (but not merged) PR.\nRequires write access to the PR.\n\nReturns the reopened PR.", + "operationId": "prReopen", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR reopened successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PullRequest" + } + } + } + }, + "400": { + "description": "PR is not closed or already merged", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List reviews on a PR", + "operationId": "prListReviews", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Reviews listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrReview" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Create a review. States: pending, approved, changes_requested, commented. Authors cannot approve their own PRs.", + "operationId": "prCreateReview", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "description": "Review parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReviewParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Review created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrReview" + } + } + } + }, + "400": { + "description": "Invalid state or self-approval", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews/{review_id}/comments": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List comments for a specific review", + "operationId": "prListReviewComments", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "review_id", + "in": "path", + "description": "Review ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Review comments listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrReviewComment" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Review not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews/{review_id}/dismiss": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Dismiss a submitted review. Requires Admin role.", + "operationId": "prDismissReview", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "review_id", + "in": "path", + "description": "Review ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Dismiss parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DismissReviewParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Review dismissed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrReview" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (Admin required)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Review not found or not submitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews/{review_id}/submit": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Submit a pending review. Changes its state to approved, changes_requested, or commented.", + "operationId": "prSubmitReview", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "review_id", + "in": "path", + "description": "Review ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Submit parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubmitReviewParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Review submitted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrReview" + } + } + } + }, + "400": { + "description": "Invalid state or self-approval", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Review not found or already submitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/status": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "Get PR status summary", + "description": "Returns the current status of a PR including checks state, mergeability,\napproval count, and file change statistics.\nRequires read access to the repository.", + "operationId": "prGetStatus", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "PR status retrieved successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrStatus" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR or status not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/subscribe": { + "post": { + "tags": [ + "Pull Requests" + ], + "summary": "Subscribe to a PR to receive notifications", + "operationId": "prSubscribe", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Subscribed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_PrSubscription" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Already subscribed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Pull Requests" + ], + "summary": "Unsubscribe from a PR", + "operationId": "prUnsubscribe", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Unsubscribed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Not subscribed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/subscriptions": { + "get": { + "tags": [ + "Pull Requests" + ], + "summary": "List subscriptions on a PR", + "operationId": "prListSubscriptions", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "number", + "in": "path", + "description": "PR number (unique within the repository)", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Subscriptions listed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_PrSubscription" + } + } + } + }, + "401": { + "description": "Authentication required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "PR not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/releases": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List releases in a repository", + "description": "Returns a paginated list of all releases in the repository, sorted by creation date (newest first).\nIncludes release metadata such as:\n- Release name and tag\n- Release notes and description\n- Author and creation date\n- Draft and prerelease status\n- Asset download URLs\n\nRequires read access to the repository.", + "operationId": "repoListReleases", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of releases to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of releases to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Releases listed successfully. Returns an array of release objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoRelease" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a new release", + "description": "Creates a new release in the repository, optionally creating a tag if it doesn't exist.\nRequires Write role or higher in the repository.\n\nParameters:\n- tag_name: Tag name for the release (will be created if it doesn't exist)\n- name: Release name/title (required)\n- body: Release notes in markdown format (optional, max 10000 characters)\n- draft: Whether this is a draft release (default: false)\n- prerelease: Whether this is a prerelease (default: false)\n- target_commitish: Commit SHA or branch name to tag (defaults to default branch)\n\nReturns the created release with metadata including download URLs for assets.", + "operationId": "repoCreateRelease", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Release creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReleaseParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Release created successfully. Returns the newly created release with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoRelease" + } + } + } + }, + "400": { + "description": "Invalid parameters: name too long, invalid tag name, or target commit doesn't exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or target commit not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Release with this tag already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/releases/{release_id}": { + "put": { + "tags": [ + "Repos" + ], + "summary": "Update a release", + "description": "Updates release metadata such as name, description, draft status, and prerelease flag.\nRequires Write role or higher in the repository.\n\nUpdatable fields:\n- name: Release name/title (max 255 characters)\n- body: Release notes in markdown format (max 10000 characters)\n- draft: Whether this is a draft release\n- prerelease: Whether this is a prerelease\n\nAll fields are optional; only provided fields are updated.\nReturns the updated release with full metadata.", + "operationId": "repoUpdateRelease", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "release_id", + "in": "path", + "description": "Release ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Release update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateReleaseParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Release updated successfully. Returns the updated release with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoRelease" + } + } + } + }, + "400": { + "description": "Invalid parameters: name too long or invalid characters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or release not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a release", + "description": "Permanently deletes a release from the repository. The associated tag and commits are not deleted.\nRequires Write role or higher in the repository.\n\nEffects:\n- Release metadata is permanently removed\n- Release assets are deleted\n- The associated tag remains in the repository\n- The tagged commits remain in the repository history\n\nReturns success message on completion.", + "operationId": "repoDeleteRelease", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "release_id", + "in": "path", + "description": "Release ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Release deleted successfully. The release and its assets have been permanently removed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or release not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/star": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Star a repository", + "description": "Adds the current user to the repository's stargazers list.\nRequires read access to the repository.\n\nEffects:\n- User is added to the repository's stargazers\n- Repository star count is incremented\n- User can unstar later to remove themselves\n\nReturns success message on completion. Idempotent operation (starring an already starred repository is a no-op).", + "operationId": "repoStar", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository starred successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Repos" + ], + "summary": "Unstar a repository", + "description": "Removes the current user from the repository's stargazers list.\nRequires read access to the repository.\n\nEffects:\n- User is removed from the repository's stargazers\n- Repository star count is decremented\n\nReturns success message on completion. Idempotent operation (unstarring an unstarred repository is a no-op).", + "operationId": "repoUnstar", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository unstarred successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/stargazers": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List stargazers of a repository", + "description": "Returns a paginated list of users who have starred the repository, sorted by star date (newest first).\nIncludes stargazer metadata such as:\n- User information (ID, username, display name)\n- Star timestamp\n\nRequires read access to the repository.", + "operationId": "repoListStargazers", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of stargazers to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of stargazers to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Stargazers listed successfully. Returns an array of stargazer objects with user information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoStar" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/stats": { + "get": { + "tags": [ + "Repos" + ], + "summary": "Get repository statistics", + "description": "Returns comprehensive statistics for a repository including:\n- Star count and watcher count\n- Fork count\n- Branch and tag counts\n- Commit count\n- Release count\n- Open issues and pull requests count\n- Storage size and bandwidth usage\n- Last push timestamp\n\nRequires read access to the repository.", + "operationId": "repoGetStats", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository statistics retrieved successfully. Returns comprehensive repository metrics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoStats" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/stats/refresh": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Refresh repository statistics", + "description": "Recalculates and updates repository statistics from the current state of the repository.\nRequires Admin role or higher in the repository.\n\nEffects:\n- Recalculates star, watcher, and fork counts\n- Recalculates branch and tag counts\n- Recalculates commit count from Git history\n- Recalculates release count\n- Recalculates open issues and pull requests count\n- Updates storage size and bandwidth usage\n- Updates last push timestamp\n\nReturns the refreshed statistics with all updated values.", + "operationId": "repoRefreshStats", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository statistics refreshed successfully. Returns all updated metrics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoStats" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/statuses": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a commit status", + "description": "Creates a new status check for a specific commit, typically used by CI/CD systems.\nRequires Write role or higher in the repository.\n\nParameters:\n- commit_sha: Commit SHA to attach the status to (must exist in repository)\n- state: Status state (\"pending\", \"success\", \"failure\", \"error\")\n- context: Status context name (e.g., \"ci/build\", \"ci/test\") - must be unique per commit\n- description: Human-readable description of the status (optional, max 500 characters)\n- target_url: URL with detailed information about the status (optional)\n\nEffects:\n- Status is attached to the commit\n- Can be used by branch protection rules to enforce status checks\n- Multiple statuses can exist for the same commit with different contexts\n\nReturns the created status with metadata including ID and timestamps.", + "operationId": "repoCreateCommitStatus", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Commit status creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCommitStatusParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Commit status created successfully. Returns the newly created status with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoCommitStatus" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid state, context too long, or commit doesn't exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or commit not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Status with this context already exists for this commit (use update instead)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/sync": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Sync a fork with upstream", + "description": "Synchronizes a forked repository with the latest changes from the parent repository.\nRequires Write role or higher in the fork repository.\n\nEffects:\n- Merges changes from the parent repository's default branch into the fork\n- Creates a merge commit if there are conflicts\n- Updates the fork's commit history\n\nOnly works on repositories that are forks (have a parent repository).\nReturns success message on completion.", + "operationId": "repoSyncFork", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Fork synchronized successfully with upstream repository.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Repository is not a fork or has merge conflicts that require manual resolution", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or parent repository not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Merge conflicts detected; manual resolution required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/tags": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List tags in a repository", + "description": "Returns a paginated list of all tags in the repository, sorted by creation date (newest first).\nIncludes tag metadata such as:\n- Tag name and commit SHA\n- Tagger information and timestamp\n- Tag message (for annotated tags)\n\nRequires read access to the repository.", + "operationId": "repoListTags", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of tags to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of tags to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Tags listed successfully. Returns an array of tag objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoTag" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a new tag", + "description": "Creates a new tag in the repository pointing to a specific commit or branch.\nRequires Write role or higher in the repository.\n\nParameters:\n- name: Tag name (1-100 characters, typically follows semantic versioning like v1.0.0)\n- target: Commit SHA or branch name to tag (defaults to HEAD of default branch)\n- message: Optional tag message for annotated tags\n\nReturns the created tag with metadata including the commit SHA.", + "operationId": "repoCreateTag", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Tag creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTagParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Tag created successfully. Returns the newly created tag with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoTag" + } + } + } + }, + "400": { + "description": "Invalid parameters: name too long, invalid characters, or target commit/branch doesn't exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or target commit/branch not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Tag with this name already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/tags/{tag_id}": { + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a tag", + "description": "Permanently deletes a tag from the repository. The tagged commit remains accessible via its SHA.\nRequires Write role or higher in the repository.\n\nEffects:\n- Tag is permanently removed from the repository\n- The tagged commit remains in the repository history\n- Releases associated with this tag are not automatically deleted\n\nReturns success message on completion.", + "operationId": "repoDeleteTag", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tag_id", + "in": "path", + "description": "Tag ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Tag deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Write role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or tag not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error or Git operation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/transfer-owner": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Transfer repository ownership", + "description": "Transfers ownership of a repository to another user. The new owner must be an existing repository member.\nRequires Owner role in the repository.\n\nEffects:\n- Current owner becomes an Admin\n- New owner gains full Owner permissions\n- Repository URL remains unchanged\n- All forks and stars are preserved\n\nReturns the updated repository with new owner information.", + "operationId": "repoTransferOwner", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Transfer ownership parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferOwnerParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Ownership transferred successfully. Returns the repository with updated owner information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Repo" + } + } + } + }, + "400": { + "description": "Invalid new owner ID or user is not a repository member", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Owner role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or new owner not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/unarchive": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Unarchive a repository", + "description": "Restores an archived repository to active status, re-enabling all write operations.\nRequires Owner role in the repository.\n\nEffects:\n- Repository status changes from \"archived\" to \"active\"\n- All write operations are re-enabled\n- Previous visibility and settings are preserved\n\nReturns success message on completion.", + "operationId": "repoUnarchive", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository unarchived successfully. All write operations are now enabled.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Owner role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "409": { + "description": "Repository is not archived", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/watch": { + "post": { + "tags": [ + "Repos" + ], + "summary": "Watch a repository", + "description": "Subscribes the current user to notifications for repository activities.\nRequires read access to the repository.\n\nWatch levels:\n- \"participating\": Notifications for issues/PRs you're involved in\n- \"watching\": All repository notifications (default)\n- \"ignoring\": No notifications\n\nReturns success message on completion. Idempotent operation.", + "operationId": "repoWatch", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Watch parameters (level is optional, defaults to 'watching')", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WatchParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Repository watch subscription updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "400": { + "description": "Invalid watch level (must be 'participating', 'watching', or 'ignoring')", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Repos" + ], + "summary": "Unwatch a repository", + "description": "Removes the current user's watch subscription from the repository.\nRequires read access to the repository.\n\nEffects:\n- User is removed from the repository's watchers\n- User will no longer receive notifications for repository activities\n\nReturns success message on completion. Idempotent operation (unwatching an unwatched repository is a no-op).", + "operationId": "repoUnwatch", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Repository watch subscription removed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/watchers": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List watchers of a repository", + "description": "Returns a paginated list of users who are watching the repository, sorted by watch date (newest first).\nIncludes watcher metadata such as:\n- User information (ID, username, display name)\n- Watch level (participating, watching, or ignoring)\n- Watch timestamp\n\nRequires read access to the repository.", + "operationId": "repoListWatchers", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of watchers to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of watchers to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Watchers listed successfully. Returns an array of watcher objects with user information and watch level.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoWatch" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/webhooks": { + "get": { + "tags": [ + "Repos" + ], + "summary": "List webhooks in a repository", + "description": "Returns a paginated list of all webhooks in the repository, sorted by creation date (newest first).\nIncludes webhook metadata such as:\n- Webhook URL and events\n- Active status\n- Last delivery status and timestamp\n- Creator information\n\nRequires Admin role or higher in the repository.", + "operationId": "repoListWebhooks", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of webhooks to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of webhooks to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Webhooks listed successfully. Returns an array of webhook objects with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_RepoWebhook" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Repos" + ], + "summary": "Create a webhook in a repository", + "description": "Creates a new webhook that receives HTTP POST notifications for repository events.\nRequires Admin role or higher in the repository.\n\nParameters:\n- url: Webhook endpoint URL (must be HTTPS in production)\n- events: List of events to subscribe to (e.g., \"push\", \"pull_request\", \"issue\")\n- secret: Optional secret for webhook signature verification\n- active: Whether the webhook is active (default: true)\n\nEffects:\n- Webhook is created and starts receiving events\n- Webhook deliveries are logged and can be retried on failure\n\nReturns the created webhook with metadata including ID and configuration.", + "operationId": "repoCreateWebhook", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Webhook creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Webhook created successfully. Returns the newly created webhook with metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoWebhook" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid URL format or empty events list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/webhooks/{webhook_id}": { + "put": { + "tags": [ + "Repos" + ], + "summary": "Update a webhook in a repository", + "description": "Updates webhook configuration such as URL, events, secret, and active status.\nRequires Admin role or higher in the repository.\n\nUpdatable fields:\n- url: Webhook endpoint URL (must be HTTPS in production)\n- events: List of events to subscribe to\n- secret: Secret for webhook signature verification\n- active: Whether the webhook is active\n\nAll fields are optional; only provided fields are updated.\nReturns the updated webhook with full metadata.", + "operationId": "repoUpdateWebhook", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "webhook_id", + "in": "path", + "description": "Webhook ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Webhook update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Webhook updated successfully. Returns the updated webhook with full metadata.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_RepoWebhook" + } + } + } + }, + "400": { + "description": "Invalid parameters: invalid URL format or empty events list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or webhook not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Repos" + ], + "summary": "Delete a webhook from a repository", + "description": "Permanently removes a webhook from the repository, stopping all event notifications.\nRequires Admin role or higher in the repository.\n\nEffects:\n- Webhook is permanently removed from the repository\n- Webhook stops receiving event notifications immediately\n- Webhook delivery history is deleted\n\nReturns success message on completion.", + "operationId": "repoDeleteWebhook", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "webhook_id", + "in": "path", + "description": "Webhook ID (UUID)", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Webhook deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository, workspace, or webhook not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki": { + "get": { + "tags": [ + "Wiki" + ], + "summary": "List wiki pages in a repository", + "description": "Returns a paginated list of all wiki pages in the repository.\nSupports searching by title or content.\nRequires read access to the repository.", + "operationId": "wikiListPages", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "search", + "in": "query", + "description": "Search query to filter pages by title or content", + "required": false, + "schema": { + "type": [ + "string", + "null" + ] + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of pages to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of pages to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Wiki pages listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WikiPage" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "post": { + "tags": [ + "Wiki" + ], + "summary": "Create a wiki page", + "description": "Creates a new wiki page in the repository.\nRequires at least Member role in the repository.\n\nThe title is automatically converted to a URL-friendly slug.\nAn initial revision is created with the page.\n\nReturns the created wiki page with full metadata.", + "operationId": "wikiCreatePage", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Wiki page creation parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWikiPageParams" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Wiki page created successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WikiPage" + } + } + } + }, + "400": { + "description": "Invalid parameters: empty title or content", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Repository or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}": { + "get": { + "tags": [ + "Wiki" + ], + "summary": "Get a wiki page", + "description": "Retrieves a single wiki page by its slug.\nRequires read access to the repository.", + "operationId": "wikiGetPage", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Wiki page retrieved successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WikiPage" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "put": { + "tags": [ + "Wiki" + ], + "summary": "Update a wiki page", + "description": "Updates an existing wiki page's title, content, or both.\nRequires at least Member role in the repository.\n\nA new revision is automatically created with the changes.\nOptionally include a commit message to describe the changes.\n\nAll fields are optional; only provided fields are updated.\nReturns the updated wiki page.", + "operationId": "wikiUpdatePage", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Wiki page update parameters (all fields optional)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWikiPageParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Wiki page updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WikiPage" + } + } + } + }, + "400": { + "description": "Invalid parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + }, + "delete": { + "tags": [ + "Wiki" + ], + "summary": "Delete a wiki page", + "description": "Soft-deletes a wiki page. The page is marked as deleted but remains in the database.\nRequires Admin role in the repository.\n\nThe page and its revision history are preserved but no longer accessible via the API.\nReturns success message on completion.", + "operationId": "wikiDeletePage", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Wiki page deleted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_String" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Admin role)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/compare": { + "get": { + "tags": [ + "Wiki" + ], + "summary": "Compare two wiki page revisions", + "description": "Compares two versions of a wiki page and returns both revisions.\nRequires read access to the repository.\n\nReturns the old and new revisions for client-side diff computation.\nThe client can compute the diff between the two content snapshots.", + "operationId": "wikiCompareRevisions", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "old_version", + "in": "query", + "description": "Older version number to compare from", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "new_version", + "in": "query", + "description": "Newer version number to compare to", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Revisions compared successfully. Returns old and new revision objects.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WikiCompareResult" + } + } + } + }, + "400": { + "description": "Invalid version numbers", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, revisions, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/revert": { + "post": { + "tags": [ + "Wiki" + ], + "summary": "Revert a wiki page to a historical version", + "description": "Reverts the wiki page to a specified historical version.\nRequires at least Member role in the repository.\n\nThis creates a new revision with the content from the target version.\nThe current content is not lost; it remains in the revision history.\n\nReturns the updated wiki page with the reverted content.", + "operationId": "wikiRevertPage", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "Target version number to revert to", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "commit_message", + "in": "query", + "description": "Optional commit message describing the revert", + "required": false, + "schema": { + "type": [ + "string", + "null" + ] + } + } + ], + "responses": { + "200": { + "description": "Wiki page reverted successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WikiPage" + } + } + } + }, + "400": { + "description": "Invalid version number", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions (requires Member role or higher)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, revision, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/revisions": { + "get": { + "tags": [ + "Wiki" + ], + "summary": "List wiki page revisions", + "description": "Returns a paginated list of all revisions for a wiki page, sorted by version (newest first).\nRequires read access to the repository.\n\nEach revision includes the full content snapshot at that version,\nthe editor who made the change, and an optional commit message.", + "operationId": "wikiListRevisions", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of revisions to return (default: 50, max: 100)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of revisions to skip for pagination (default: 0)", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Revisions listed successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WikiPageRevision" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/revisions/{version}": { + "get": { + "tags": [ + "Wiki" + ], + "summary": "Get a specific wiki page revision", + "description": "Retrieves a specific revision of a wiki page by version number.\nRequires read access to the repository.\n\nReturns the full revision with content snapshot, editor, and commit message.", + "operationId": "wikiGetRevision", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name (unique identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "repo_name", + "in": "path", + "description": "Repository name (unique within the workspace)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "slug", + "in": "path", + "description": "Wiki page slug (URL-friendly identifier)", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "path", + "description": "Revision version number", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Revision retrieved successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WikiPageRevision" + } + } + } + }, + "401": { + "description": "Authentication required or session expired", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "403": { + "description": "Insufficient permissions to access this repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Wiki page, revision, repository, or workspace not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + }, + "security": [ + { + "session_cookie": [] + } + ] + } + }, + "/api/v1/workspaces/{workspace_name}/settings": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Get workspace settings", + "description": "Return workspace settings — readable by anyone with workspace access.", + "operationId": "workspaceGetSettings", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceSettings" + } + } + } + }, + "401": { + "description": "Unauthenticated or not readable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update workspace settings", + "description": "Update workspace settings such as repo visibility defaults, feature toggles, and member invite permissions. Requires admin role.", + "operationId": "workspaceUpdateSettings", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Settings update parameters — only included fields are changed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWorkspaceSettingsParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Settings updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceSettings" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/stats": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "Get workspace statistics", + "description": "Return workspace statistics including member, repository, issue, and pull request counts. Readable by anyone with workspace access.", + "operationId": "workspaceGetStats", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace statistics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceStats" + } + } + } + }, + "401": { + "description": "Unauthenticated or not readable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/stats/refresh": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Refresh workspace statistics", + "description": "Recalculate workspace statistics by counting members, repos, issues, and PRs from live data. Requires admin role.", + "operationId": "workspaceRefreshStats", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Refreshed statistics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceStats" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read or write failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/transfer-owner": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Transfer workspace ownership", + "description": "Transfer workspace ownership to another active member. The current owner becomes admin.", + "operationId": "workspaceTransferOwner", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "New owner user ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferOwnerRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Ownership transferred.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Workspace" + } + } + } + }, + "400": { + "description": "New owner must be an active member and different from current owner.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/unarchive": { + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Unarchive a workspace", + "description": "Restore an archived workspace to active status. Requires owner role.", + "operationId": "workspaceUnarchive", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Workspace unarchived.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Workspace not found or not archived.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/webhooks": { + "get": { + "tags": [ + "Workspaces" + ], + "summary": "List webhooks", + "description": "Return webhooks configured for the workspace. Requires admin role.", + "operationId": "workspaceListWebhooks", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": [ + "integer", + "null" + ], + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "List of webhooks.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_Vec_WorkspaceWebhook" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database read failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Workspaces" + ], + "summary": "Create a webhook", + "description": "Create a webhook for the workspace. Requires admin role. The URL must use HTTPS and cannot point to localhost or internal IPs.", + "operationId": "workspaceCreateWebhook", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "HTTPS webhook URL, optional secret ciphertext, event types, and active flag.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Webhook created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceWebhook" + } + } + } + }, + "400": { + "description": "Invalid URL, missing events, or SSRF check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/workspaces/{workspace_name}/webhooks/{webhook_id}": { + "put": { + "tags": [ + "Workspaces" + ], + "summary": "Update a webhook", + "description": "Update a webhook's URL, secret, events, or active state. Requires admin role.", + "operationId": "workspaceUpdateWebhook", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "webhook_id", + "in": "path", + "description": "Webhook ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Webhook update parameters — only included fields are changed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookParams" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Webhook updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse_WorkspaceWebhook" + } + } + } + }, + "400": { + "description": "Invalid URL.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Webhook not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Workspaces" + ], + "summary": "Delete a webhook", + "description": "Remove a webhook from the workspace. Requires admin role.", + "operationId": "workspaceDeleteWebhook", + "parameters": [ + { + "name": "workspace_name", + "in": "path", + "description": "Workspace name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "webhook_id", + "in": "path", + "description": "Webhook ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Webhook deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiEmptyResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated or insufficient role.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "404": { + "description": "Webhook not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + }, + "500": { + "description": "Database transaction failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AcceptInvitationParams": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string", + "description": "Invitation token (received via email)" + } + } + }, + "AcceptInvitationRequest": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string", + "description": "The plaintext invitation token from the email link." + } + } + }, + "AddDeployKeyParams": { + "type": "object", + "required": [ + "title", + "public_key", + "key_type" + ], + "properties": { + "key_type": { + "type": "string" + }, + "public_key": { + "type": "string" + }, + "read_only": { + "type": [ + "boolean", + "null" + ] + }, + "title": { + "type": "string" + } + } + }, + "AddDomainParams": { + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "type": "string" + } + } + }, + "AddGpgKeyParams": { + "type": "object", + "required": [ + "public_key", + "key_id" + ], + "properties": { + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "key_id": { + "type": "string" + }, + "primary_email": { + "type": [ + "string", + "null" + ] + }, + "public_key": { + "type": "string" + } + } + }, + "AddMemberParams": { + "type": "object", + "required": [ + "user_id" + ], + "properties": { + "role": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "AddReplyParams": { + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "string" + } + } + }, + "AddRepoMemberParams": { + "type": "object", + "required": [ + "user_id" + ], + "properties": { + "role": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "AddSshKeyParams": { + "type": "object", + "required": [ + "title", + "public_key", + "key_type" + ], + "properties": { + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "key_type": { + "type": "string" + }, + "public_key": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "ApiEmptyResponse": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "Human-readable success message." + } + } + }, + "ApiErrorResponse": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "description": "Stable, client-safe error message." + } + } + }, + "ApiResponse_BranchMergeCheck": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "allowed", + "reasons" + ], + "properties": { + "allowed": { + "type": "boolean" + }, + "reasons": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "ApiResponse_BranchProtectionRule": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "pattern", + "require_approvals", + "require_status_checks", + "required_status_checks", + "require_linear_history", + "allow_force_pushes", + "allow_deletions", + "require_signed_commits", + "require_code_owner_review", + "dismiss_stale_reviews", + "restrict_pushes", + "push_allowances", + "restrict_review_dismissal", + "dismissal_allowances", + "require_conversation_resolution", + "created_at", + "updated_at" + ], + "properties": { + "allow_deletions": { + "type": "boolean" + }, + "allow_force_pushes": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "dismiss_stale_reviews": { + "type": "boolean" + }, + "dismissal_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pattern": { + "type": "string" + }, + "push_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "require_approvals": { + "type": "integer", + "format": "int32" + }, + "require_code_owner_review": { + "type": "boolean" + }, + "require_conversation_resolution": { + "type": "boolean" + }, + "require_linear_history": { + "type": "boolean" + }, + "require_signed_commits": { + "type": "boolean" + }, + "require_status_checks": { + "type": "boolean" + }, + "required_status_checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "restrict_pushes": { + "type": "boolean" + }, + "restrict_review_dismissal": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_CaptchaResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "base64", + "req" + ], + "properties": { + "base64": { + "type": "string" + }, + "req": { + "$ref": "#/components/schemas/CaptchaQuery" + }, + "rsa": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/RsaResponse" + } + ] + } + } + } + } + }, + "ApiResponse_ContextMe": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "username", + "has_unread_notifications", + "language", + "timezone" + ], + "properties": { + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "display_name": { + "type": [ + "string", + "null" + ] + }, + "has_unread_notifications": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "id": { + "type": "string", + "format": "uuid" + }, + "language": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + } + }, + "ApiResponse_CreateInvitationResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "invitation" + ], + "properties": { + "invitation": { + "$ref": "#/components/schemas/WorkspaceInvitation" + } + } + } + } + }, + "ApiResponse_EmailResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "properties": { + "email": { + "type": [ + "string", + "null" + ] + } + } + } + } + }, + "ApiResponse_Enable2FAResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "secret", + "qr_code", + "backup_codes" + ], + "properties": { + "backup_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "qr_code": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + } + } + }, + "ApiResponse_Get2FAStatusResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "is_enabled", + "has_backup_codes" + ], + "properties": { + "has_backup_codes": { + "type": "boolean" + }, + "is_enabled": { + "type": "boolean" + }, + "method": { + "type": [ + "string", + "null" + ] + } + } + } + } + }, + "ApiResponse_Issue": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "author_id", + "number", + "title", + "state", + "priority", + "visibility", + "locked", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "closed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "locked": { + "type": "boolean" + }, + "milestone_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "number": { + "type": "integer", + "format": "int64" + }, + "priority": { + "$ref": "#/components/schemas/Priority" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_IssueAssignee": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "assignee_id", + "created_at" + ], + "properties": { + "assigned_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "assignee_id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_IssueComment": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "author_id", + "body", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "edited_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "reply_to_comment_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_IssueEvent": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "event_type", + "created_at" + ], + "properties": { + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "new_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "old_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + } + } + } + } + }, + "ApiResponse_IssueLabel": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "color", + "created_at", + "updated_at" + ], + "properties": { + "color": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_IssueLabelRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "label_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "label_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_IssueMilestone": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "title", + "state", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_IssuePrRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "pull_request_id", + "relation_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "$ref": "#/components/schemas/RelationType" + } + } + } + } + }, + "ApiResponse_IssueReaction": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "user_id", + "content", + "target_type", + "created_at" + ], + "properties": { + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "$ref": "#/components/schemas/TargetType" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_IssueRepoRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "repo_id", + "relation_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "$ref": "#/components/schemas/RelationType" + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_IssueSubscriber": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "issue_id", + "user_id", + "reason", + "muted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "muted": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_IssueTemplate": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "body_template", + "labels", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "body_template": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "title_template": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_Option_BranchProtectionRule": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "object", + "required": [ + "id", + "repo_id", + "pattern", + "require_approvals", + "require_status_checks", + "required_status_checks", + "require_linear_history", + "allow_force_pushes", + "allow_deletions", + "require_signed_commits", + "require_code_owner_review", + "dismiss_stale_reviews", + "restrict_pushes", + "push_allowances", + "restrict_review_dismissal", + "dismissal_allowances", + "require_conversation_resolution", + "created_at", + "updated_at" + ], + "properties": { + "allow_deletions": { + "type": "boolean" + }, + "allow_force_pushes": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "dismiss_stale_reviews": { + "type": "boolean" + }, + "dismissal_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pattern": { + "type": "string" + }, + "push_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "require_approvals": { + "type": "integer", + "format": "int32" + }, + "require_code_owner_review": { + "type": "boolean" + }, + "require_conversation_resolution": { + "type": "boolean" + }, + "require_linear_history": { + "type": "boolean" + }, + "require_signed_commits": { + "type": "boolean" + }, + "require_status_checks": { + "type": "boolean" + }, + "required_status_checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "restrict_pushes": { + "type": "boolean" + }, + "restrict_review_dismissal": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + ] + } + } + }, + "ApiResponse_PrAssignee": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "assignee_id", + "created_at" + ], + "properties": { + "assigned_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "assignee_id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_PrCheckRun": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "commit_sha", + "name", + "status", + "created_at", + "updated_at" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "conclusion": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Status" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "details_url": { + "type": [ + "string", + "null" + ] + }, + "external_id": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "started_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrCommit": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "repo_id", + "commit_sha", + "position", + "created_at" + ], + "properties": { + "authored_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "commit_sha": { + "type": "string" + }, + "committed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "position": { + "type": "integer", + "format": "int32" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_PrEvent": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "event_type", + "created_at" + ], + "properties": { + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "new_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "old_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_PrFile": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "path", + "status", + "additions", + "deletions", + "changes", + "created_at", + "updated_at" + ], + "properties": { + "additions": { + "type": "integer", + "format": "int32" + }, + "changes": { + "type": "integer", + "format": "int32" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deletions": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "old_path": { + "type": [ + "string", + "null" + ] + }, + "patch": { + "type": [ + "string", + "null" + ] + }, + "path": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrLabel": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "color", + "created_at", + "updated_at" + ], + "properties": { + "color": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrLabelRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "label_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "label_id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_PrMergeStrategy": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "pull_request_id", + "strategy", + "auto_merge", + "delete_source_branch", + "merge_when_checks_pass", + "created_at", + "updated_at" + ], + "properties": { + "auto_merge": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "delete_source_branch": { + "type": "boolean" + }, + "merge_when_checks_pass": { + "type": "boolean" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "selected_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "squash_message": { + "type": [ + "string", + "null" + ] + }, + "squash_title": { + "type": [ + "string", + "null" + ] + }, + "strategy": { + "$ref": "#/components/schemas/MergeStrategyKind" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrReaction": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "user_id", + "content", + "target_type", + "created_at" + ], + "properties": { + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "$ref": "#/components/schemas/TargetType" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_PrReview": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "author_id", + "state", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "commit_sha": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "dismiss_reason": { + "type": [ + "string", + "null" + ] + }, + "dismissed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dismissed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "type": "string" + }, + "submitted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrReviewComment": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "review_id", + "pull_request_id", + "author_id", + "body", + "path", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "diff_hunk": { + "type": [ + "string", + "null" + ] + }, + "edited_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "in_reply_to_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "original_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "original_start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "review_id": { + "type": "string", + "format": "uuid" + }, + "start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrStatus": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "pull_request_id", + "head_commit_sha", + "checks_state", + "mergeable_state", + "conflicts", + "approvals_count", + "requested_reviews_count", + "changed_files_count", + "additions_count", + "deletions_count", + "updated_at" + ], + "properties": { + "additions_count": { + "type": "integer", + "format": "int32" + }, + "approvals_count": { + "type": "integer", + "format": "int32" + }, + "changed_files_count": { + "type": "integer", + "format": "int32" + }, + "checks_state": { + "$ref": "#/components/schemas/State" + }, + "conflicts": { + "type": "boolean" + }, + "deletions_count": { + "type": "integer", + "format": "int32" + }, + "head_commit_sha": { + "type": "string" + }, + "mergeable_state": { + "$ref": "#/components/schemas/State" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "requested_reviews_count": { + "type": "integer", + "format": "int32" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_PrSubscription": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "user_id", + "reason", + "muted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "muted": { + "type": "boolean" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_PullRequest": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "author_id", + "number", + "title", + "state", + "source_repo_id", + "source_branch", + "target_repo_id", + "target_branch", + "head_commit_sha", + "draft", + "locked", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "base_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "closed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "draft": { + "type": "boolean" + }, + "head_commit_sha": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "locked": { + "type": "boolean" + }, + "merge_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "merged_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "merged_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "number": { + "type": "integer", + "format": "int64" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "source_branch": { + "type": "string" + }, + "source_repo_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "target_branch": { + "type": "string" + }, + "target_repo_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_Regenerate2FABackupCodesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "backup_codes" + ], + "properties": { + "backup_codes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Newly generated one-time backup codes. Old backup codes become invalid." + } + } + } + } + }, + "ApiResponse_RegisterEmailCodeResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "expires_in_secs" + ], + "properties": { + "expires_in_secs": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + } + } + }, + "ApiResponse_RegisterResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "username" + ], + "properties": { + "avatar_url": { + "type": [ + "string", + "null" + ], + "description": "Avatar URL; usually absent right after registration." + }, + "display_name": { + "type": [ + "string", + "null" + ], + "description": "Display name initialized from username." + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Newly created user id." + }, + "username": { + "type": "string", + "description": "Unique username used for login and profile URL." + } + } + } + } + }, + "ApiResponse_Repo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "owner_id", + "name", + "default_branch", + "visibility", + "status", + "is_fork", + "storage_node_ids", + "primary_storage_node_id", + "storage_path", + "git_service", + "created_at", + "updated_at" + ], + "properties": { + "archived_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_branch": { + "type": "string" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "forked_from_repo_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "git_service": { + "$ref": "#/components/schemas/GitService" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_fork": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "owner_id": { + "type": "string", + "format": "uuid" + }, + "primary_storage_node_id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "storage_node_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "storage_path": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_RepoBranch": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "commit_sha", + "protected", + "default_branch", + "created_at", + "updated_at" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "default_branch": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_push_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_push_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "name": { + "type": "string" + }, + "protected": { + "type": "boolean" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_RepoCommitComment": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "push_commit_id", + "commit_sha", + "author_id", + "body", + "resolved", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "commit_sha": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "resolved": { + "type": "boolean" + }, + "resolved_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "resolved_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_RepoCommitStatus": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "push_commit_id", + "latest_commit_sha", + "context", + "state", + "reported_at", + "created_at", + "updated_at" + ], + "properties": { + "context": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "latest_commit_sha": { + "type": "string" + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "reported_at": { + "type": "string", + "format": "date-time" + }, + "reported_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "target_url": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_RepoDeployKey": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "title", + "public_key", + "fingerprint_sha256", + "key_type", + "read_only", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint_sha256": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_type": { + "$ref": "#/components/schemas/KeyType" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "public_key": { + "type": "string" + }, + "read_only": { + "type": "boolean" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_RepoFork": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "parent_repo_id", + "fork_repo_id", + "forked_by", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "fork_repo_id": { + "type": "string", + "format": "uuid" + }, + "forked_by": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "parent_repo_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_RepoInvitation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "email", + "role", + "token_hash", + "invited_by", + "expires_at", + "created_at" + ], + "properties": { + "accepted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "accepted_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "token_hash": { + "type": "string" + } + } + } + } + }, + "ApiResponse_RepoMember": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "role", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "joined_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_active_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_RepoRelease": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "tag_name", + "title", + "draft", + "prerelease", + "author_id", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "draft": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "prerelease": { + "type": "boolean" + }, + "published_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "tag_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "tag_name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_RepoStar": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_RepoStats": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "repo_id", + "stars_count", + "watchers_count", + "forks_count", + "branches_count", + "tags_count", + "commits_count", + "releases_count", + "open_issues_count", + "open_pull_requests_count", + "size_bytes", + "updated_at" + ], + "properties": { + "branches_count": { + "type": "integer", + "format": "int64" + }, + "commits_count": { + "type": "integer", + "format": "int64" + }, + "forks_count": { + "type": "integer", + "format": "int64" + }, + "last_push_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "open_issues_count": { + "type": "integer", + "format": "int64" + }, + "open_pull_requests_count": { + "type": "integer", + "format": "int64" + }, + "releases_count": { + "type": "integer", + "format": "int64" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "size_bytes": { + "type": "integer", + "format": "int64" + }, + "stars_count": { + "type": "integer", + "format": "int64" + }, + "tags_count": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "watchers_count": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "ApiResponse_RepoTag": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "target_commit_sha", + "signed", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "signed": { + "type": "boolean" + }, + "tagger_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_commit_sha": { + "type": "string" + } + } + } + } + }, + "ApiResponse_RepoWatch": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "level", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "level": { + "$ref": "#/components/schemas/SubscriptionLevel" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_RepoWebhook": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "url", + "events", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_delivery_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_delivery_status": { + "type": [ + "string", + "null" + ] + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + } + } + } + } + }, + "ApiResponse_RsaResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "public_key" + ], + "properties": { + "public_key": { + "type": "string" + } + } + } + } + }, + "ApiResponse_String": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "string" + } + } + }, + "ApiResponse_User": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "username", + "status", + "role", + "visibility", + "is_active", + "is_bot", + "created_at", + "updated_at" + ], + "properties": { + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "bio": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "display_name": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_active": { + "type": "boolean" + }, + "is_bot": { + "type": "boolean" + }, + "last_login_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "username": { + "type": "string" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + } + } + } + } + }, + "ApiResponse_UserAppearance": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "user_id", + "theme", + "color_scheme", + "density", + "font_size", + "markdown_preview", + "reduced_motion", + "created_at", + "updated_at" + ], + "properties": { + "color_scheme": { + "$ref": "#/components/schemas/ColorScheme" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "density": { + "$ref": "#/components/schemas/Density" + }, + "editor_theme": { + "type": [ + "string", + "null" + ] + }, + "font_size": { + "$ref": "#/components/schemas/FontSize" + }, + "markdown_preview": { + "type": "boolean" + }, + "reduced_motion": { + "type": "boolean" + }, + "theme": { + "$ref": "#/components/schemas/Theme" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_UserAvatarResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "avatar_url", + "storage_key" + ], + "properties": { + "avatar_url": { + "type": "string" + }, + "storage_key": { + "type": "string" + } + } + } + } + }, + "ApiResponse_UserDevice": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "user_id", + "device_name", + "device_type", + "trusted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "device_name": { + "type": "string" + }, + "device_type": { + "$ref": "#/components/schemas/DeviceType" + }, + "fingerprint": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "trusted": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_UserGpgKey": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "user_id", + "key_id", + "public_key", + "fingerprint", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_id": { + "type": "string" + }, + "primary_email": { + "type": [ + "string", + "null" + ] + }, + "public_key": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "verified_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + } + } + } + } + }, + "ApiResponse_UserNotifySetting": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "user_id", + "email_notifications", + "web_notifications", + "mention_notifications", + "review_notifications", + "security_notifications", + "marketing_emails", + "digest_frequency", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "digest_frequency": { + "$ref": "#/components/schemas/DigestFrequency" + }, + "email_notifications": { + "type": "boolean" + }, + "marketing_emails": { + "type": "boolean" + }, + "mention_notifications": { + "type": "boolean" + }, + "review_notifications": { + "type": "boolean" + }, + "security_notifications": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "web_notifications": { + "type": "boolean" + } + } + } + } + }, + "ApiResponse_UserOAuthInfo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "provider", + "provider_user_id", + "linked_at" + ], + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "linked_at": { + "type": "string", + "format": "date-time" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "provider_email": { + "type": [ + "string", + "null" + ] + }, + "provider_user_id": { + "type": "string" + }, + "provider_username": { + "type": [ + "string", + "null" + ] + }, + "token_expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + } + } + } + } + }, + "ApiResponse_UserPersonalAccessTokenInfo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "name", + "scopes", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "name": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "scopes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Scope" + } + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "ApiResponse_UserProfile": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "user_id", + "created_at", + "updated_at" + ], + "properties": { + "company": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "profile_readme": { + "type": [ + "string", + "null" + ] + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "twitter_username": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "website_url": { + "type": [ + "string", + "null" + ] + } + } + } + } + }, + "ApiResponse_UserSecurityLog": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "user_id", + "event_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_UserSessionInfo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "last_active_at", + "expires_at", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "last_active_at": { + "type": "string", + "format": "date-time" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "user_agent": { + "type": [ + "string", + "null" + ] + } + } + } + } + }, + "ApiResponse_UserSshKey": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "user_id", + "title", + "public_key", + "fingerprint_sha256", + "key_type", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint_sha256": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_type": { + "$ref": "#/components/schemas/KeyType" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "public_key": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_Vec_BranchProtectionRule": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "pattern", + "require_approvals", + "require_status_checks", + "required_status_checks", + "require_linear_history", + "allow_force_pushes", + "allow_deletions", + "require_signed_commits", + "require_code_owner_review", + "dismiss_stale_reviews", + "restrict_pushes", + "push_allowances", + "restrict_review_dismissal", + "dismissal_allowances", + "require_conversation_resolution", + "created_at", + "updated_at" + ], + "properties": { + "allow_deletions": { + "type": "boolean" + }, + "allow_force_pushes": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "dismiss_stale_reviews": { + "type": "boolean" + }, + "dismissal_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pattern": { + "type": "string" + }, + "push_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "require_approvals": { + "type": "integer", + "format": "int32" + }, + "require_code_owner_review": { + "type": "boolean" + }, + "require_conversation_resolution": { + "type": "boolean" + }, + "require_linear_history": { + "type": "boolean" + }, + "require_signed_commits": { + "type": "boolean" + }, + "require_status_checks": { + "type": "boolean" + }, + "required_status_checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "restrict_pushes": { + "type": "boolean" + }, + "restrict_review_dismissal": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_Issue": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "author_id", + "number", + "title", + "state", + "priority", + "visibility", + "locked", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "closed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "locked": { + "type": "boolean" + }, + "milestone_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "number": { + "type": "integer", + "format": "int64" + }, + "priority": { + "$ref": "#/components/schemas/Priority" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueAssignee": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "assignee_id", + "created_at" + ], + "properties": { + "assigned_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "assignee_id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueComment": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "author_id", + "body", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "edited_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "reply_to_comment_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueEvent": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "event_type", + "created_at" + ], + "properties": { + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "new_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "old_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + } + } + } + } + } + }, + "ApiResponse_Vec_IssueLabel": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "color", + "created_at", + "updated_at" + ], + "properties": { + "color": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueLabelRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "label_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "label_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueMilestone": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "title", + "state", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_IssuePrRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "pull_request_id", + "relation_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "$ref": "#/components/schemas/RelationType" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueReaction": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "user_id", + "content", + "target_type", + "created_at" + ], + "properties": { + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "$ref": "#/components/schemas/TargetType" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueRepoRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "repo_id", + "relation_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "$ref": "#/components/schemas/RelationType" + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueSubscriber": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "issue_id", + "user_id", + "reason", + "muted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "muted": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_IssueTemplate": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "body_template", + "labels", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "body_template": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "title_template": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_PrAssignee": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "assignee_id", + "created_at" + ], + "properties": { + "assigned_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "assignee_id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_PrCheckRun": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "commit_sha", + "name", + "status", + "created_at", + "updated_at" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "conclusion": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Status" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "details_url": { + "type": [ + "string", + "null" + ] + }, + "external_id": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "started_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_PrCommit": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "repo_id", + "commit_sha", + "position", + "created_at" + ], + "properties": { + "authored_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "commit_sha": { + "type": "string" + }, + "committed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "position": { + "type": "integer", + "format": "int32" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_PrEvent": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "event_type", + "created_at" + ], + "properties": { + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "new_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "old_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_PrFile": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "path", + "status", + "additions", + "deletions", + "changes", + "created_at", + "updated_at" + ], + "properties": { + "additions": { + "type": "integer", + "format": "int32" + }, + "changes": { + "type": "integer", + "format": "int32" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deletions": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "old_path": { + "type": [ + "string", + "null" + ] + }, + "patch": { + "type": [ + "string", + "null" + ] + }, + "path": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_PrLabel": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "color", + "created_at", + "updated_at" + ], + "properties": { + "color": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_PrLabelRelation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "label_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "label_id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_PrReaction": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "user_id", + "content", + "target_type", + "created_at" + ], + "properties": { + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "$ref": "#/components/schemas/TargetType" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_PrReview": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "author_id", + "state", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "commit_sha": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "dismiss_reason": { + "type": [ + "string", + "null" + ] + }, + "dismissed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dismissed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "type": "string" + }, + "submitted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_PrReviewComment": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "review_id", + "pull_request_id", + "author_id", + "body", + "path", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "diff_hunk": { + "type": [ + "string", + "null" + ] + }, + "edited_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "in_reply_to_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "original_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "original_start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "review_id": { + "type": "string", + "format": "uuid" + }, + "start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_PrSubscription": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "user_id", + "reason", + "muted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "muted": { + "type": "boolean" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_PullRequest": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "author_id", + "number", + "title", + "state", + "source_repo_id", + "source_branch", + "target_repo_id", + "target_branch", + "head_commit_sha", + "draft", + "locked", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "base_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "closed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "draft": { + "type": "boolean" + }, + "head_commit_sha": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "locked": { + "type": "boolean" + }, + "merge_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "merged_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "merged_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "number": { + "type": "integer", + "format": "int64" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "source_branch": { + "type": "string" + }, + "source_repo_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "target_branch": { + "type": "string" + }, + "target_repo_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_Repo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "owner_id", + "name", + "default_branch", + "visibility", + "status", + "is_fork", + "storage_node_ids", + "primary_storage_node_id", + "storage_path", + "git_service", + "created_at", + "updated_at" + ], + "properties": { + "archived_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_branch": { + "type": "string" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "forked_from_repo_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "git_service": { + "$ref": "#/components/schemas/GitService" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_fork": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "owner_id": { + "type": "string", + "format": "uuid" + }, + "primary_storage_node_id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "storage_node_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "storage_path": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoBranch": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "commit_sha", + "protected", + "default_branch", + "created_at", + "updated_at" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "default_branch": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_push_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_push_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "name": { + "type": "string" + }, + "protected": { + "type": "boolean" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoCommitComment": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "push_commit_id", + "commit_sha", + "author_id", + "body", + "resolved", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "commit_sha": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "resolved": { + "type": "boolean" + }, + "resolved_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "resolved_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoCommitStatus": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "push_commit_id", + "latest_commit_sha", + "context", + "state", + "reported_at", + "created_at", + "updated_at" + ], + "properties": { + "context": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "latest_commit_sha": { + "type": "string" + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "reported_at": { + "type": "string", + "format": "date-time" + }, + "reported_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "target_url": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoDeployKey": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "title", + "public_key", + "fingerprint_sha256", + "key_type", + "read_only", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint_sha256": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_type": { + "$ref": "#/components/schemas/KeyType" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "public_key": { + "type": "string" + }, + "read_only": { + "type": "boolean" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoFork": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "parent_repo_id", + "fork_repo_id", + "forked_by", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "fork_repo_id": { + "type": "string", + "format": "uuid" + }, + "forked_by": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "parent_repo_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoInvitation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "email", + "role", + "token_hash", + "invited_by", + "expires_at", + "created_at" + ], + "properties": { + "accepted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "accepted_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "token_hash": { + "type": "string" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoMember": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "role", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "joined_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_active_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoRelease": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "tag_name", + "title", + "draft", + "prerelease", + "author_id", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "draft": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "prerelease": { + "type": "boolean" + }, + "published_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "tag_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "tag_name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoStar": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoTag": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "target_commit_sha", + "signed", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "signed": { + "type": "boolean" + }, + "tagger_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_commit_sha": { + "type": "string" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoWatch": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "level", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "level": { + "$ref": "#/components/schemas/SubscriptionLevel" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_RepoWebhook": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "url", + "events", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_delivery_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_delivery_status": { + "type": [ + "string", + "null" + ] + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + } + } + } + } + } + }, + "ApiResponse_Vec_UserDevice": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "user_id", + "device_name", + "device_type", + "trusted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "device_name": { + "type": "string" + }, + "device_type": { + "$ref": "#/components/schemas/DeviceType" + }, + "fingerprint": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "trusted": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_UserGpgKey": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "user_id", + "key_id", + "public_key", + "fingerprint", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_id": { + "type": "string" + }, + "primary_email": { + "type": [ + "string", + "null" + ] + }, + "public_key": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "verified_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_UserOAuthInfo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "provider", + "provider_user_id", + "linked_at" + ], + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "linked_at": { + "type": "string", + "format": "date-time" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "provider_email": { + "type": [ + "string", + "null" + ] + }, + "provider_user_id": { + "type": "string" + }, + "provider_username": { + "type": [ + "string", + "null" + ] + }, + "token_expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_UserPersonalAccessTokenInfo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "name", + "scopes", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "name": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "scopes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Scope" + } + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "ApiResponse_Vec_UserSecurityLog": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "user_id", + "event_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_UserSessionInfo": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "last_active_at", + "expires_at", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "last_active_at": { + "type": "string", + "format": "date-time" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "user_agent": { + "type": [ + "string", + "null" + ] + } + } + } + } + } + }, + "ApiResponse_Vec_UserSshKey": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "user_id", + "title", + "public_key", + "fingerprint_sha256", + "key_type", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint_sha256": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_type": { + "$ref": "#/components/schemas/KeyType" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "public_key": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WikiPage": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "repo_id", + "slug", + "title", + "content", + "author_id", + "version", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_editor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "ApiResponse_Vec_WikiPageRevision": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "page_id", + "version", + "title", + "content", + "editor_id", + "created_at" + ], + "properties": { + "commit_message": { + "type": [ + "string", + "null" + ] + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "editor_id": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "page_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "ApiResponse_Vec_Workspace": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "owner_id", + "name", + "visibility", + "plan", + "status", + "default_role", + "is_personal", + "created_at", + "updated_at" + ], + "properties": { + "archived_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_role": { + "type": "string" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_personal": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "owner_id": { + "type": "string", + "format": "uuid" + }, + "plan": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspaceAuditLog": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "action", + "created_at" + ], + "properties": { + "action": { + "type": "string" + }, + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/TargetType" + } + ] + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspaceDomain": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "domain", + "is_primary", + "is_verified", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "domain": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_primary": { + "type": "boolean" + }, + "is_verified": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "verification_token_hash": { + "type": [ + "string", + "null" + ] + }, + "verified_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspaceIntegration": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "provider", + "name", + "config", + "enabled", + "installed_by", + "created_at", + "updated_at" + ], + "properties": { + "config": {}, + "created_at": { + "type": "string", + "format": "date-time" + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "installed_by": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "name": { + "type": "string" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspaceInvitation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "email", + "role", + "token_hash", + "invited_by", + "expires_at", + "created_at" + ], + "properties": { + "accepted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "accepted_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "token_hash": { + "type": "string" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspaceMember": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "user_id", + "role", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "joined_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_active_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspacePendingApproval": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "requester_id", + "request_type", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": [ + "string", + "null" + ] + }, + "request_type": { + "$ref": "#/components/schemas/RequestType" + }, + "requester_id": { + "type": "string", + "format": "uuid" + }, + "reviewed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_Vec_WorkspaceWebhook": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "workspace_id", + "url", + "events", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_delivery_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_delivery_status": { + "type": [ + "string", + "null" + ] + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + } + }, + "ApiResponse_WikiCompareResult": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "description": "Result of comparing two wiki page revisions", + "required": [ + "old", + "new" + ], + "properties": { + "new": { + "$ref": "#/components/schemas/WikiPageRevision", + "description": "The newer revision being compared" + }, + "old": { + "$ref": "#/components/schemas/WikiPageRevision", + "description": "The older revision being compared" + } + } + } + } + }, + "ApiResponse_WikiPage": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "repo_id", + "slug", + "title", + "content", + "author_id", + "version", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_editor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "ApiResponse_WikiPageRevision": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "page_id", + "version", + "title", + "content", + "editor_id", + "created_at" + ], + "properties": { + "commit_message": { + "type": [ + "string", + "null" + ] + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "editor_id": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "page_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "ApiResponse_Workspace": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "owner_id", + "name", + "visibility", + "plan", + "status", + "default_role", + "is_personal", + "created_at", + "updated_at" + ], + "properties": { + "archived_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_role": { + "type": "string" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_personal": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "owner_id": { + "type": "string", + "format": "uuid" + }, + "plan": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + } + } + } + } + }, + "ApiResponse_WorkspaceBilling": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "workspace_id", + "plan", + "status", + "seats", + "created_at", + "updated_at" + ], + "properties": { + "billing_email": { + "type": [ + "string", + "null" + ] + }, + "canceled_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "current_period_end": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "current_period_start": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "customer_id": { + "type": [ + "string", + "null" + ] + }, + "plan": { + "type": "string" + }, + "seats": { + "type": "integer", + "format": "int32" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "subscription_id": { + "type": [ + "string", + "null" + ] + }, + "trial_ends_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceCustomBranding": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "workspace_id", + "enabled", + "created_at", + "updated_at" + ], + "properties": { + "accent_color": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "custom_css": { + "type": [ + "string", + "null" + ] + }, + "enabled": { + "type": "boolean" + }, + "favicon_url": { + "type": [ + "string", + "null" + ] + }, + "logo_url": { + "type": [ + "string", + "null" + ] + }, + "primary_color": { + "type": [ + "string", + "null" + ] + }, + "support_url": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceDomain": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "domain", + "is_primary", + "is_verified", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "domain": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_primary": { + "type": "boolean" + }, + "is_verified": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "verification_token_hash": { + "type": [ + "string", + "null" + ] + }, + "verified_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceIntegration": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "provider", + "name", + "config", + "enabled", + "installed_by", + "created_at", + "updated_at" + ], + "properties": { + "config": {}, + "created_at": { + "type": "string", + "format": "date-time" + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "installed_by": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "name": { + "type": "string" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceInvitation": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "email", + "role", + "token_hash", + "invited_by", + "expires_at", + "created_at" + ], + "properties": { + "accepted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "accepted_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "token_hash": { + "type": "string" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceMember": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "user_id", + "role", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "joined_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_active_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspacePendingApproval": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "requester_id", + "request_type", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": [ + "string", + "null" + ] + }, + "request_type": { + "$ref": "#/components/schemas/RequestType" + }, + "requester_id": { + "type": "string", + "format": "uuid" + }, + "reviewed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceSettings": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "workspace_id", + "allow_public_repos", + "allow_member_invites", + "require_two_factor", + "default_repo_visibility", + "default_branch_name", + "issue_tracking_enabled", + "pull_requests_enabled", + "wiki_enabled", + "created_at", + "updated_at" + ], + "properties": { + "allow_member_invites": { + "type": "boolean" + }, + "allow_public_repos": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_branch_name": { + "type": "string" + }, + "default_repo_visibility": { + "type": "string" + }, + "issue_tracking_enabled": { + "type": "boolean" + }, + "pull_requests_enabled": { + "type": "boolean" + }, + "require_two_factor": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "wiki_enabled": { + "type": "boolean" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceStats": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "workspace_id", + "members_count", + "repos_count", + "issues_count", + "pull_requests_count", + "storage_bytes", + "bandwidth_bytes", + "build_minutes_used", + "updated_at" + ], + "properties": { + "bandwidth_bytes": { + "type": "integer", + "format": "int64" + }, + "build_minutes_used": { + "type": "integer", + "format": "int64" + }, + "issues_count": { + "type": "integer", + "format": "int64" + }, + "last_activity_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "members_count": { + "type": "integer", + "format": "int64" + }, + "pull_requests_count": { + "type": "integer", + "format": "int64" + }, + "repos_count": { + "type": "integer", + "format": "int64" + }, + "storage_bytes": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "ApiResponse_WorkspaceWebhook": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "id", + "workspace_id", + "url", + "events", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_delivery_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_delivery_status": { + "type": [ + "string", + "null" + ] + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "BranchMergeCheck": { + "type": "object", + "required": [ + "allowed", + "reasons" + ], + "properties": { + "allowed": { + "type": "boolean" + }, + "reasons": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "BranchProtectionRule": { + "type": "object", + "required": [ + "id", + "repo_id", + "pattern", + "require_approvals", + "require_status_checks", + "required_status_checks", + "require_linear_history", + "allow_force_pushes", + "allow_deletions", + "require_signed_commits", + "require_code_owner_review", + "dismiss_stale_reviews", + "restrict_pushes", + "push_allowances", + "restrict_review_dismissal", + "dismissal_allowances", + "require_conversation_resolution", + "created_at", + "updated_at" + ], + "properties": { + "allow_deletions": { + "type": "boolean" + }, + "allow_force_pushes": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "dismiss_stale_reviews": { + "type": "boolean" + }, + "dismissal_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pattern": { + "type": "string" + }, + "push_allowances": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "require_approvals": { + "type": "integer", + "format": "int32" + }, + "require_code_owner_review": { + "type": "boolean" + }, + "require_conversation_resolution": { + "type": "boolean" + }, + "require_linear_history": { + "type": "boolean" + }, + "require_signed_commits": { + "type": "boolean" + }, + "require_status_checks": { + "type": "boolean" + }, + "required_status_checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "restrict_pushes": { + "type": "boolean" + }, + "restrict_review_dismissal": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "CaptchaQuery": { + "type": "object", + "required": [ + "w", + "h", + "dark", + "rsa" + ], + "properties": { + "dark": { + "type": "boolean" + }, + "h": { + "type": "integer", + "format": "int32", + "minimum": 0 + }, + "rsa": { + "type": "boolean" + }, + "w": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + } + }, + "CaptchaResponse": { + "type": "object", + "required": [ + "base64", + "req" + ], + "properties": { + "base64": { + "type": "string" + }, + "req": { + "$ref": "#/components/schemas/CaptchaQuery" + }, + "rsa": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/RsaResponse" + } + ] + } + } + }, + "ColorScheme": { + "type": "string", + "enum": [ + "System", + "Light", + "Dark", + "HighContrast", + "Unknown" + ] + }, + "ContextMe": { + "type": "object", + "required": [ + "id", + "username", + "has_unread_notifications", + "language", + "timezone" + ], + "properties": { + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "display_name": { + "type": [ + "string", + "null" + ] + }, + "has_unread_notifications": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "id": { + "type": "string", + "format": "uuid" + }, + "language": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "CreateBranchParams": { + "type": "object", + "required": [ + "name", + "commit_sha" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "CreateCheckRunParams": { + "type": "object", + "required": [ + "commit_sha", + "name", + "status" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "conclusion": { + "type": [ + "string", + "null" + ] + }, + "details_url": { + "type": [ + "string", + "null" + ] + }, + "external_id": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "CreateCommentParams": { + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "string" + }, + "reply_to_comment_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + } + } + }, + "CreateCommitCommentParams": { + "type": "object", + "required": [ + "push_commit_id", + "commit_sha", + "body" + ], + "properties": { + "body": { + "type": "string" + }, + "commit_sha": { + "type": "string" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + } + } + }, + "CreateCommitStatusParams": { + "type": "object", + "required": [ + "push_commit_id", + "latest_commit_sha", + "context", + "state" + ], + "properties": { + "context": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "latest_commit_sha": { + "type": "string" + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "type": "string" + }, + "target_url": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateIntegrationParams": { + "type": "object", + "required": [ + "provider", + "name" + ], + "properties": { + "config": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/WorkspaceIntegrationConfig" + } + ] + }, + "enabled": { + "type": [ + "boolean", + "null" + ] + }, + "name": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateInvitationParams": { + "type": "object", + "required": [ + "email" + ], + "properties": { + "email": { + "type": "string" + }, + "role": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateInvitationResponse": { + "type": "object", + "required": [ + "invitation" + ], + "properties": { + "invitation": { + "$ref": "#/components/schemas/WorkspaceInvitation" + } + } + }, + "CreateIssueParams": { + "type": "object", + "required": [ + "title", + "repo_ids", + "label_ids", + "assignee_ids" + ], + "properties": { + "assignee_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "label_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "milestone_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "priority": { + "type": [ + "string", + "null" + ] + }, + "repo_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "title": { + "type": "string" + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateIssueReactionParams": { + "type": "object", + "required": [ + "content" + ], + "properties": { + "content": { + "type": "string" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateLabelParams": { + "type": "object", + "required": [ + "name", + "color" + ], + "properties": { + "color": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + } + } + }, + "CreateMilestoneParams": { + "type": "object", + "required": [ + "title" + ], + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + } + } + }, + "CreatePrLabelParams": { + "type": "object", + "required": [ + "name", + "color" + ], + "properties": { + "color": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + } + } + }, + "CreatePrParams": { + "type": "object", + "required": [ + "title", + "source_repo_id", + "source_branch", + "target_branch", + "head_commit_sha" + ], + "properties": { + "base_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "draft": { + "type": [ + "boolean", + "null" + ] + }, + "head_commit_sha": { + "type": "string" + }, + "source_branch": { + "type": "string" + }, + "source_repo_id": { + "type": "string", + "format": "uuid" + }, + "target_branch": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "CreateProtectionRuleParams": { + "type": "object", + "required": [ + "pattern" + ], + "properties": { + "allow_deletions": { + "type": [ + "boolean", + "null" + ] + }, + "allow_force_pushes": { + "type": [ + "boolean", + "null" + ] + }, + "dismiss_stale_reviews": { + "type": [ + "boolean", + "null" + ] + }, + "dismissal_allowances": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "pattern": { + "type": "string" + }, + "push_allowances": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "require_approvals": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "require_code_owner_review": { + "type": [ + "boolean", + "null" + ] + }, + "require_conversation_resolution": { + "type": [ + "boolean", + "null" + ] + }, + "require_linear_history": { + "type": [ + "boolean", + "null" + ] + }, + "require_signed_commits": { + "type": [ + "boolean", + "null" + ] + }, + "require_status_checks": { + "type": [ + "boolean", + "null" + ] + }, + "required_status_checks": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + }, + "restrict_pushes": { + "type": [ + "boolean", + "null" + ] + }, + "restrict_review_dismissal": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "CreateReactionParams": { + "type": "object", + "required": [ + "content" + ], + "properties": { + "content": { + "type": "string" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateReleaseParams": { + "type": "object", + "required": [ + "tag_name", + "title" + ], + "properties": { + "body": { + "type": [ + "string", + "null" + ] + }, + "draft": { + "type": [ + "boolean", + "null" + ] + }, + "prerelease": { + "type": [ + "boolean", + "null" + ] + }, + "tag_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "tag_name": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "CreateRepoInvitationParams": { + "type": "object", + "required": [ + "email" + ], + "properties": { + "email": { + "type": "string" + }, + "role": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateRepoParams": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "default_branch": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "git_service": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "storage_node_ids": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "storage_path": { + "type": [ + "string", + "null" + ] + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateReviewParams": { + "type": "object", + "properties": { + "body": { + "type": [ + "string", + "null" + ] + }, + "comments": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ReviewCommentParams" + } + }, + "commit_sha": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateTagParams": { + "type": "object", + "required": [ + "name", + "target_commit_sha" + ], + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "target_commit_sha": { + "type": "string" + } + } + }, + "CreateTemplateParams": { + "type": "object", + "required": [ + "name", + "body_template", + "labels" + ], + "properties": { + "body_template": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "title_template": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateWebhookParams": { + "type": "object", + "required": [ + "url", + "events" + ], + "properties": { + "active": { + "type": [ + "boolean", + "null" + ] + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": "string" + } + } + }, + "CreateWikiPageParams": { + "type": "object", + "required": [ + "title", + "content" + ], + "properties": { + "content": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "CreateWorkspaceParams": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "Density": { + "type": "string", + "enum": [ + "Compact", + "Comfortable", + "Spacious", + "Unknown" + ] + }, + "DeviceType": { + "type": "string", + "enum": [ + "Desktop", + "Laptop", + "Mobile", + "Tablet", + "Browser", + "Cli", + "Api", + "Unknown" + ] + }, + "DigestFrequency": { + "type": "string", + "enum": [ + "Never", + "Daily", + "Weekly", + "Monthly", + "Realtime", + "Unknown" + ] + }, + "Disable2FAParams": { + "type": "object", + "required": [ + "code", + "password" + ], + "properties": { + "code": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "DismissReviewParams": { + "type": "object", + "required": [ + "reason" + ], + "properties": { + "reason": { + "type": "string" + } + } + }, + "EmailChangeRequest": { + "type": "object", + "required": [ + "new_email", + "password" + ], + "properties": { + "new_email": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "EmailResponse": { + "type": "object", + "properties": { + "email": { + "type": [ + "string", + "null" + ] + } + } + }, + "EmailVerifyRequest": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string" + } + } + }, + "Enable2FAResponse": { + "type": "object", + "required": [ + "secret", + "qr_code", + "backup_codes" + ], + "properties": { + "backup_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "qr_code": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + "EventType": { + "type": "string", + "enum": [ + "Created", + "Updated", + "Deleted", + "Closed", + "Reopened", + "Assigned", + "Unassigned", + "Labeled", + "Unlabeled", + "Commented", + "Mentioned", + "Pushed", + "Merged", + "Reviewed", + "Archived", + "Restored", + "Joined", + "Left", + "Invited", + "Accepted", + "Revoked", + "DraftReady", + "Unknown" + ] + }, + "FontSize": { + "type": "string", + "enum": [ + "Small", + "Medium", + "Large", + "ExtraLarge", + "Unknown" + ] + }, + "ForkRepoParams": { + "type": "object", + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "target_workspace_name": { + "type": [ + "string", + "null" + ] + } + } + }, + "Get2FAStatusResponse": { + "type": "object", + "required": [ + "is_enabled", + "has_backup_codes" + ], + "properties": { + "has_backup_codes": { + "type": "boolean" + }, + "is_enabled": { + "type": "boolean" + }, + "method": { + "type": [ + "string", + "null" + ] + } + } + }, + "GitService": { + "type": "string", + "enum": [ + "Local", + "Gitea", + "Gitlab", + "Github", + "Unknown" + ] + }, + "Issue": { + "type": "object", + "required": [ + "id", + "workspace_id", + "author_id", + "number", + "title", + "state", + "priority", + "visibility", + "locked", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "closed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "locked": { + "type": "boolean" + }, + "milestone_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "number": { + "type": "integer", + "format": "int64" + }, + "priority": { + "$ref": "#/components/schemas/Priority" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "IssueAssignee": { + "type": "object", + "required": [ + "id", + "issue_id", + "assignee_id", + "created_at" + ], + "properties": { + "assigned_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "assignee_id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + } + } + }, + "IssueComment": { + "type": "object", + "required": [ + "id", + "issue_id", + "author_id", + "body", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "edited_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "reply_to_comment_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "IssueEvent": { + "type": "object", + "required": [ + "id", + "issue_id", + "event_type", + "created_at" + ], + "properties": { + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "new_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "old_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + } + } + }, + "IssueLabel": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "color", + "created_at", + "updated_at" + ], + "properties": { + "color": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "IssueLabelRelation": { + "type": "object", + "required": [ + "id", + "issue_id", + "label_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "label_id": { + "type": "string", + "format": "uuid" + } + } + }, + "IssueListFilters": { + "type": "object", + "properties": { + "assignee_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "author_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "label_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "milestone_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "priority": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": [ + "string", + "null" + ] + } + } + }, + "IssueMilestone": { + "type": "object", + "required": [ + "id", + "repo_id", + "title", + "state", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "IssuePrRelation": { + "type": "object", + "required": [ + "id", + "issue_id", + "pull_request_id", + "relation_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "$ref": "#/components/schemas/RelationType" + } + } + }, + "IssueReaction": { + "type": "object", + "required": [ + "id", + "issue_id", + "user_id", + "content", + "target_type", + "created_at" + ], + "properties": { + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "$ref": "#/components/schemas/TargetType" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "IssueRepoRelation": { + "type": "object", + "required": [ + "id", + "issue_id", + "repo_id", + "relation_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "$ref": "#/components/schemas/RelationType" + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + }, + "IssueSubscriber": { + "type": "object", + "required": [ + "id", + "issue_id", + "user_id", + "reason", + "muted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "issue_id": { + "type": "string", + "format": "uuid" + }, + "muted": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "IssueTemplate": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "body_template", + "labels", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "body_template": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "title_template": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "KeyType": { + "type": "string", + "enum": [ + "Rsa", + "Ed25519", + "Ecdsa", + "Dsa", + "Unknown" + ] + }, + "LinkPrParams": { + "type": "object", + "required": [ + "pull_request_id" + ], + "properties": { + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "relation_type": { + "type": [ + "string", + "null" + ] + } + } + }, + "LinkRepoParams": { + "type": "object", + "required": [ + "repo_id" + ], + "properties": { + "relation_type": { + "type": [ + "string", + "null" + ] + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + }, + "LockIssueParams": { + "type": "object", + "required": [ + "locked" + ], + "properties": { + "locked": { + "type": "boolean", + "description": "Whether to lock (true) or unlock (false) the issue" + } + } + }, + "LockPrParams": { + "type": "object", + "required": [ + "locked" + ], + "properties": { + "locked": { + "type": "boolean", + "description": "Whether to lock (true) or unlock (false) the PR conversation" + } + } + }, + "LoginParams": { + "type": "object", + "required": [ + "username", + "password", + "captcha" + ], + "properties": { + "captcha": { + "type": "string" + }, + "password": { + "type": "string" + }, + "totp_code": { + "type": [ + "string", + "null" + ] + }, + "username": { + "type": "string" + } + } + }, + "MergePrParams": { + "type": "object", + "properties": { + "delete_source_branch": { + "type": [ + "boolean", + "null" + ] + }, + "squash_message": { + "type": [ + "string", + "null" + ] + }, + "squash_title": { + "type": [ + "string", + "null" + ] + }, + "strategy": { + "type": [ + "string", + "null" + ] + } + } + }, + "MergeStrategyKind": { + "type": "string", + "enum": [ + "Merge", + "Squash", + "Rebase", + "FastForward", + "Unknown" + ] + }, + "MuteIssueParams": { + "type": "object", + "required": [ + "muted" + ], + "properties": { + "muted": { + "type": "boolean", + "description": "Whether to mute (true) or unmute (false) notifications" + } + } + }, + "MutePrParams": { + "type": "object", + "required": [ + "muted" + ], + "properties": { + "muted": { + "type": "boolean", + "description": "Whether to mute (true) or unmute (false) notifications" + } + } + }, + "Permission": { + "type": "string", + "enum": [ + "Read", + "Write", + "Admin", + "Execute", + "ManageMembers", + "ManageSettings", + "ManageWebhooks", + "ManageBilling", + "Unknown" + ] + }, + "PrAssignee": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "assignee_id", + "created_at" + ], + "properties": { + "assigned_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "assignee_id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + }, + "PrCheckRun": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "commit_sha", + "name", + "status", + "created_at", + "updated_at" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "conclusion": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Status" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "details_url": { + "type": [ + "string", + "null" + ] + }, + "external_id": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "started_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrCommit": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "repo_id", + "commit_sha", + "position", + "created_at" + ], + "properties": { + "authored_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "commit_sha": { + "type": "string" + }, + "committed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "position": { + "type": "integer", + "format": "int32" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + } + } + }, + "PrEvent": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "event_type", + "created_at" + ], + "properties": { + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "new_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "old_value": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + }, + "PrFile": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "path", + "status", + "additions", + "deletions", + "changes", + "created_at", + "updated_at" + ], + "properties": { + "additions": { + "type": "integer", + "format": "int32" + }, + "changes": { + "type": "integer", + "format": "int32" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deletions": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "old_path": { + "type": [ + "string", + "null" + ] + }, + "patch": { + "type": [ + "string", + "null" + ] + }, + "path": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrLabel": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "color", + "created_at", + "updated_at" + ], + "properties": { + "color": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrLabelRelation": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "label_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "label_id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + } + } + }, + "PrListFilters": { + "type": "object", + "properties": { + "author_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "draft": { + "type": [ + "boolean", + "null" + ] + }, + "state": { + "type": [ + "string", + "null" + ] + } + } + }, + "PrMergeStrategy": { + "type": "object", + "required": [ + "pull_request_id", + "strategy", + "auto_merge", + "delete_source_branch", + "merge_when_checks_pass", + "created_at", + "updated_at" + ], + "properties": { + "auto_merge": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "delete_source_branch": { + "type": "boolean" + }, + "merge_when_checks_pass": { + "type": "boolean" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "selected_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "squash_message": { + "type": [ + "string", + "null" + ] + }, + "squash_title": { + "type": [ + "string", + "null" + ] + }, + "strategy": { + "$ref": "#/components/schemas/MergeStrategyKind" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrReaction": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "user_id", + "content", + "target_type", + "created_at" + ], + "properties": { + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "$ref": "#/components/schemas/TargetType" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "PrReview": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "author_id", + "state", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "commit_sha": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "dismiss_reason": { + "type": [ + "string", + "null" + ] + }, + "dismissed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dismissed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "type": "string" + }, + "submitted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrReviewComment": { + "type": "object", + "required": [ + "id", + "review_id", + "pull_request_id", + "author_id", + "body", + "path", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "diff_hunk": { + "type": [ + "string", + "null" + ] + }, + "edited_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "in_reply_to_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "original_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "original_start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": "string" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "review_id": { + "type": "string", + "format": "uuid" + }, + "start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrStatus": { + "type": "object", + "required": [ + "pull_request_id", + "head_commit_sha", + "checks_state", + "mergeable_state", + "conflicts", + "approvals_count", + "requested_reviews_count", + "changed_files_count", + "additions_count", + "deletions_count", + "updated_at" + ], + "properties": { + "additions_count": { + "type": "integer", + "format": "int32" + }, + "approvals_count": { + "type": "integer", + "format": "int32" + }, + "changed_files_count": { + "type": "integer", + "format": "int32" + }, + "checks_state": { + "$ref": "#/components/schemas/State" + }, + "conflicts": { + "type": "boolean" + }, + "deletions_count": { + "type": "integer", + "format": "int32" + }, + "head_commit_sha": { + "type": "string" + }, + "mergeable_state": { + "$ref": "#/components/schemas/State" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "requested_reviews_count": { + "type": "integer", + "format": "int32" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "PrSubscription": { + "type": "object", + "required": [ + "id", + "pull_request_id", + "user_id", + "reason", + "muted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "muted": { + "type": "boolean" + }, + "pull_request_id": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "Priority": { + "type": "string", + "enum": [ + "None", + "Low", + "Medium", + "High", + "Critical", + "Urgent", + "Unknown" + ] + }, + "Provider": { + "type": "string", + "enum": [ + "Github", + "Gitlab", + "Google", + "Slack", + "Discord", + "Email", + "Web", + "Push", + "Openai", + "Anthropic", + "Gemini", + "Ollama", + "Azure", + "Aws", + "Stripe", + "Unknown" + ] + }, + "PullRequest": { + "type": "object", + "required": [ + "id", + "repo_id", + "author_id", + "number", + "title", + "state", + "source_repo_id", + "source_branch", + "target_repo_id", + "target_branch", + "head_commit_sha", + "draft", + "locked", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "base_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "closed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "closed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "draft": { + "type": "boolean" + }, + "head_commit_sha": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "locked": { + "type": "boolean" + }, + "merge_commit_sha": { + "type": [ + "string", + "null" + ] + }, + "merged_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "merged_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "number": { + "type": "integer", + "format": "int64" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "source_branch": { + "type": "string" + }, + "source_repo_id": { + "type": "string", + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "target_branch": { + "type": "string" + }, + "target_repo_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "Regenerate2FABackupCodesRequest": { + "type": "object", + "required": [ + "password" + ], + "properties": { + "password": { + "type": "string", + "description": "Current account password encrypted with the session RSA public key." + } + } + }, + "Regenerate2FABackupCodesResponse": { + "type": "object", + "required": [ + "backup_codes" + ], + "properties": { + "backup_codes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Newly generated one-time backup codes. Old backup codes become invalid." + } + } + }, + "RegisterEmailCodeParams": { + "type": "object", + "required": [ + "email", + "captcha" + ], + "properties": { + "captcha": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "RegisterEmailCodeResponse": { + "type": "object", + "required": [ + "expires_in_secs" + ], + "properties": { + "expires_in_secs": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "RegisterParams": { + "type": "object", + "required": [ + "username", + "email", + "password", + "captcha", + "email_code" + ], + "properties": { + "captcha": { + "type": "string" + }, + "email": { + "type": "string" + }, + "email_code": { + "type": "string" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "RegisterResponse": { + "type": "object", + "required": [ + "id", + "username" + ], + "properties": { + "avatar_url": { + "type": [ + "string", + "null" + ], + "description": "Avatar URL; usually absent right after registration." + }, + "display_name": { + "type": [ + "string", + "null" + ], + "description": "Display name initialized from username." + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Newly created user id." + }, + "username": { + "type": "string", + "description": "Unique username used for login and profile URL." + } + } + }, + "RelationType": { + "type": "string", + "enum": [ + "Closes", + "Fixes", + "References", + "Blocks", + "Duplicates", + "Related", + "Implements", + "Mentions", + "Resolves", + "Unknown" + ] + }, + "Repo": { + "type": "object", + "required": [ + "id", + "workspace_id", + "owner_id", + "name", + "default_branch", + "visibility", + "status", + "is_fork", + "storage_node_ids", + "primary_storage_node_id", + "storage_path", + "git_service", + "created_at", + "updated_at" + ], + "properties": { + "archived_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_branch": { + "type": "string" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "forked_from_repo_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "git_service": { + "$ref": "#/components/schemas/GitService" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_fork": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "owner_id": { + "type": "string", + "format": "uuid" + }, + "primary_storage_node_id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "storage_node_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "storage_path": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "RepoBranch": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "commit_sha", + "protected", + "default_branch", + "created_at", + "updated_at" + ], + "properties": { + "commit_sha": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "default_branch": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_push_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_push_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "name": { + "type": "string" + }, + "protected": { + "type": "boolean" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "RepoCommitComment": { + "type": "object", + "required": [ + "id", + "repo_id", + "push_commit_id", + "commit_sha", + "author_id", + "body", + "resolved", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": "string" + }, + "commit_sha": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "resolved": { + "type": "boolean" + }, + "resolved_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "resolved_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "RepoCommitStatus": { + "type": "object", + "required": [ + "id", + "repo_id", + "push_commit_id", + "latest_commit_sha", + "context", + "state", + "reported_at", + "created_at", + "updated_at" + ], + "properties": { + "context": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "latest_commit_sha": { + "type": "string" + }, + "push_commit_id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "reported_at": { + "type": "string", + "format": "date-time" + }, + "reported_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "state": { + "$ref": "#/components/schemas/State" + }, + "target_url": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "RepoDeployKey": { + "type": "object", + "required": [ + "id", + "repo_id", + "title", + "public_key", + "fingerprint_sha256", + "key_type", + "read_only", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint_sha256": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_type": { + "$ref": "#/components/schemas/KeyType" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "public_key": { + "type": "string" + }, + "read_only": { + "type": "boolean" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "RepoFork": { + "type": "object", + "required": [ + "id", + "parent_repo_id", + "fork_repo_id", + "forked_by", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "fork_repo_id": { + "type": "string", + "format": "uuid" + }, + "forked_by": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "parent_repo_id": { + "type": "string", + "format": "uuid" + } + } + }, + "RepoInvitation": { + "type": "object", + "required": [ + "id", + "repo_id", + "email", + "role", + "token_hash", + "invited_by", + "expires_at", + "created_at" + ], + "properties": { + "accepted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "accepted_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "token_hash": { + "type": "string" + } + } + }, + "RepoMember": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "role", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "joined_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_active_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "RepoRelease": { + "type": "object", + "required": [ + "id", + "repo_id", + "tag_name", + "title", + "draft", + "prerelease", + "author_id", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "body": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "draft": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "prerelease": { + "type": "boolean" + }, + "published_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "tag_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "tag_name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "RepoStar": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "RepoStats": { + "type": "object", + "required": [ + "repo_id", + "stars_count", + "watchers_count", + "forks_count", + "branches_count", + "tags_count", + "commits_count", + "releases_count", + "open_issues_count", + "open_pull_requests_count", + "size_bytes", + "updated_at" + ], + "properties": { + "branches_count": { + "type": "integer", + "format": "int64" + }, + "commits_count": { + "type": "integer", + "format": "int64" + }, + "forks_count": { + "type": "integer", + "format": "int64" + }, + "last_push_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "open_issues_count": { + "type": "integer", + "format": "int64" + }, + "open_pull_requests_count": { + "type": "integer", + "format": "int64" + }, + "releases_count": { + "type": "integer", + "format": "int64" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "size_bytes": { + "type": "integer", + "format": "int64" + }, + "stars_count": { + "type": "integer", + "format": "int64" + }, + "tags_count": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "watchers_count": { + "type": "integer", + "format": "int64" + } + } + }, + "RepoTag": { + "type": "object", + "required": [ + "id", + "repo_id", + "name", + "target_commit_sha", + "signed", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "signed": { + "type": "boolean" + }, + "tagger_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_commit_sha": { + "type": "string" + } + } + }, + "RepoWatch": { + "type": "object", + "required": [ + "id", + "repo_id", + "user_id", + "level", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "level": { + "$ref": "#/components/schemas/SubscriptionLevel" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "RepoWebhook": { + "type": "object", + "required": [ + "id", + "repo_id", + "url", + "events", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_delivery_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_delivery_status": { + "type": [ + "string", + "null" + ] + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + } + } + }, + "RequestApprovalParams": { + "type": "object", + "required": [ + "request_type" + ], + "properties": { + "reason": { + "type": [ + "string", + "null" + ] + }, + "request_type": { + "type": "string" + } + } + }, + "RequestType": { + "type": "string", + "enum": [ + "Join", + "Invite", + "Access", + "Approval", + "Billing", + "Delete", + "Transfer", + "Unknown" + ] + }, + "ResetPasswordRequest": { + "type": "object", + "required": [ + "email" + ], + "properties": { + "email": { + "type": "string" + } + } + }, + "ResetPasswordVerifyParams": { + "type": "object", + "required": [ + "token", + "password" + ], + "properties": { + "password": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "ReviewApprovalRequest": { + "type": "object", + "required": [ + "approved" + ], + "properties": { + "approved": { + "type": "boolean", + "description": "true to approve, false to reject." + } + } + }, + "ReviewCommentParams": { + "type": "object", + "required": [ + "path", + "body" + ], + "properties": { + "body": { + "type": "string" + }, + "diff_hunk": { + "type": [ + "string", + "null" + ] + }, + "line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "path": { + "type": "string" + }, + "start_line": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + } + }, + "Role": { + "type": "string", + "enum": [ + "Owner", + "Admin", + "Maintainer", + "Member", + "Guest", + "Viewer", + "Editor", + "Contributor", + "Moderator", + "User", + "Bot", + "Agent", + "Assistant", + "System", + "Author", + "Reviewer", + "Assignee", + "Unknown" + ] + }, + "RsaResponse": { + "type": "object", + "required": [ + "public_key" + ], + "properties": { + "public_key": { + "type": "string" + } + } + }, + "Scope": { + "type": "string", + "enum": [ + "Read", + "Write", + "Admin", + "RepoRead", + "RepoWrite", + "IssueRead", + "IssueWrite", + "PullRequestRead", + "PullRequestWrite", + "WorkspaceRead", + "WorkspaceWrite", + "UserRead", + "UserWrite", + "Unknown" + ] + }, + "SetBranchProtectionParams": { + "type": "object", + "required": [ + "protected" + ], + "properties": { + "protected": { + "type": "boolean", + "description": "Whether to enable branch protection" + } + } + }, + "State": { + "type": "string", + "enum": [ + "Open", + "Closed", + "Merged", + "Draft", + "Pending", + "Queued", + "Running", + "Success", + "Failure", + "Failed", + "Error", + "Skipped", + "Blocked", + "Clean", + "Dirty", + "Unknown" + ] + }, + "Status": { + "type": "string", + "description": "Cross-domain lifecycle/status values persisted as snake_case text.", + "enum": [ + "Active", + "Inactive", + "Enabled", + "Disabled", + "Pending", + "Queued", + "Running", + "Processing", + "Completed", + "Success", + "Failed", + "Error", + "Canceled", + "Cancelled", + "Draft", + "Open", + "Closed", + "Merged", + "Archived", + "Deleted", + "Revoked", + "Expired", + "Accepted", + "Rejected", + "Approved", + "Healthy", + "Degraded", + "Unhealthy", + "Online", + "Offline", + "Added", + "Modified", + "Removed", + "Renamed", + "Copied", + "Unknown" + ] + }, + "SubmitReviewParams": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "body": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": "string" + } + } + }, + "SubscriptionLevel": { + "type": "string", + "enum": [ + "All", + "Participating", + "Mention", + "Watch", + "Ignore", + "None", + "Custom", + "Unknown" + ] + }, + "TargetType": { + "type": "string", + "enum": [ + "User", + "Workspace", + "Repo", + "Issue", + "PullRequest", + "Channel", + "Message", + "Conversation", + "Agent", + "AiModel", + "Commit", + "Branch", + "Release", + "Unknown" + ] + }, + "Theme": { + "type": "string", + "enum": [ + "System", + "Light", + "Dark", + "Unknown" + ] + }, + "TransferIssueParams": { + "type": "object", + "required": [ + "target_workspace_name" + ], + "properties": { + "target_workspace_name": { + "type": "string", + "description": "Target workspace name to transfer the issue to" + } + } + }, + "TransferOwnerParams": { + "type": "object", + "required": [ + "new_owner_id" + ], + "properties": { + "new_owner_id": { + "type": "string", + "format": "uuid", + "description": "User ID of the new owner (must be a repository member)" + } + } + }, + "TransferOwnerRequest": { + "type": "object", + "required": [ + "new_owner_id" + ], + "properties": { + "new_owner_id": { + "type": "string", + "format": "uuid", + "description": "User ID of the new owner, who must be an active member." + } + } + }, + "UpdateBillingParams": { + "type": "object", + "properties": { + "billing_email": { + "type": [ + "string", + "null" + ] + }, + "plan": { + "type": [ + "string", + "null" + ] + }, + "seats": { + "type": [ + "integer", + "null" + ], + "format": "int32" + } + } + }, + "UpdateBrandingParams": { + "type": "object", + "properties": { + "accent_color": { + "type": [ + "string", + "null" + ] + }, + "custom_css": { + "type": [ + "string", + "null" + ] + }, + "enabled": { + "type": [ + "boolean", + "null" + ] + }, + "favicon_url": { + "type": [ + "string", + "null" + ] + }, + "logo_url": { + "type": [ + "string", + "null" + ] + }, + "primary_color": { + "type": [ + "string", + "null" + ] + }, + "support_url": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateCheckRunParams": { + "type": "object", + "properties": { + "conclusion": { + "type": [ + "string", + "null" + ] + }, + "details_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateCommentParams": { + "type": "object", + "required": [ + "body" + ], + "properties": { + "body": { + "type": "string" + } + } + }, + "UpdateIntegrationParams": { + "type": "object", + "properties": { + "config": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/WorkspaceIntegrationConfig" + } + ] + }, + "enabled": { + "type": [ + "boolean", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateIssueParams": { + "type": "object", + "properties": { + "body": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "milestone_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "priority": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateLabelParams": { + "type": "object", + "properties": { + "color": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateMemberRoleParams": { + "type": "object", + "required": [ + "role" + ], + "properties": { + "role": { + "type": "string" + } + } + }, + "UpdateMergeStrategyParams": { + "type": "object", + "properties": { + "auto_merge": { + "type": [ + "boolean", + "null" + ] + }, + "delete_source_branch": { + "type": [ + "boolean", + "null" + ] + }, + "merge_when_checks_pass": { + "type": [ + "boolean", + "null" + ] + }, + "squash_message": { + "type": [ + "string", + "null" + ] + }, + "squash_title": { + "type": [ + "string", + "null" + ] + }, + "strategy": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateMilestoneParams": { + "type": "object", + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "due_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "state": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdatePrLabelParams": { + "type": "object", + "properties": { + "color": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdatePrParams": { + "type": "object", + "properties": { + "body": { + "type": [ + "string", + "null" + ] + }, + "draft": { + "type": [ + "boolean", + "null" + ] + }, + "target_branch": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateProtectionRuleParams": { + "type": "object", + "properties": { + "allow_deletions": { + "type": [ + "boolean", + "null" + ] + }, + "allow_force_pushes": { + "type": [ + "boolean", + "null" + ] + }, + "dismiss_stale_reviews": { + "type": [ + "boolean", + "null" + ] + }, + "dismissal_allowances": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "push_allowances": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "require_approvals": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "require_code_owner_review": { + "type": [ + "boolean", + "null" + ] + }, + "require_conversation_resolution": { + "type": [ + "boolean", + "null" + ] + }, + "require_linear_history": { + "type": [ + "boolean", + "null" + ] + }, + "require_signed_commits": { + "type": [ + "boolean", + "null" + ] + }, + "require_status_checks": { + "type": [ + "boolean", + "null" + ] + }, + "required_status_checks": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + }, + "restrict_pushes": { + "type": [ + "boolean", + "null" + ] + }, + "restrict_review_dismissal": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateReleaseParams": { + "type": "object", + "properties": { + "body": { + "type": [ + "string", + "null" + ] + }, + "draft": { + "type": [ + "boolean", + "null" + ] + }, + "prerelease": { + "type": [ + "boolean", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateRepoMemberRoleParams": { + "type": "object", + "required": [ + "role" + ], + "properties": { + "role": { + "type": "string" + } + } + }, + "UpdateRepoParams": { + "type": "object", + "properties": { + "default_branch": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateTemplateParams": { + "type": "object", + "properties": { + "active": { + "type": [ + "boolean", + "null" + ] + }, + "body_template": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "labels": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "title_template": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateUserAccountParams": { + "type": "object", + "properties": { + "bio": { + "type": [ + "string", + "null" + ] + }, + "display_name": { + "type": [ + "string", + "null" + ] + }, + "username": { + "type": [ + "string", + "null" + ] + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateUserAppearanceParams": { + "type": "object", + "properties": { + "color_scheme": { + "type": [ + "string", + "null" + ] + }, + "density": { + "type": [ + "string", + "null" + ] + }, + "editor_theme": { + "type": [ + "string", + "null" + ] + }, + "font_size": { + "type": [ + "string", + "null" + ] + }, + "markdown_preview": { + "type": [ + "boolean", + "null" + ] + }, + "reduced_motion": { + "type": [ + "boolean", + "null" + ] + }, + "theme": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateUserNotifySettingParams": { + "type": "object", + "properties": { + "digest_frequency": { + "type": [ + "string", + "null" + ] + }, + "email_notifications": { + "type": [ + "boolean", + "null" + ] + }, + "marketing_emails": { + "type": [ + "boolean", + "null" + ] + }, + "mention_notifications": { + "type": [ + "boolean", + "null" + ] + }, + "review_notifications": { + "type": [ + "boolean", + "null" + ] + }, + "security_notifications": { + "type": [ + "boolean", + "null" + ] + }, + "web_notifications": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UpdateUserProfileParams": { + "type": "object", + "properties": { + "company": { + "type": [ + "string", + "null" + ] + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "profile_readme": { + "type": [ + "string", + "null" + ] + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "twitter_username": { + "type": [ + "string", + "null" + ] + }, + "website_url": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateWebhookParams": { + "type": "object", + "properties": { + "active": { + "type": [ + "boolean", + "null" + ] + }, + "events": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateWikiPageParams": { + "type": "object", + "properties": { + "commit_message": { + "type": [ + "string", + "null" + ] + }, + "content": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateWorkspaceParams": { + "type": "object", + "properties": { + "default_role": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "visibility": { + "type": [ + "string", + "null" + ] + } + } + }, + "UpdateWorkspaceSettingsParams": { + "type": "object", + "properties": { + "allow_member_invites": { + "type": [ + "boolean", + "null" + ] + }, + "allow_public_repos": { + "type": [ + "boolean", + "null" + ] + }, + "default_branch_name": { + "type": [ + "string", + "null" + ] + }, + "default_repo_visibility": { + "type": [ + "string", + "null" + ] + }, + "issue_tracking_enabled": { + "type": [ + "boolean", + "null" + ] + }, + "pull_requests_enabled": { + "type": [ + "boolean", + "null" + ] + }, + "require_two_factor": { + "type": [ + "boolean", + "null" + ] + }, + "wiki_enabled": { + "type": [ + "boolean", + "null" + ] + } + } + }, + "UploadUserAvatarParams": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "content_type": { + "type": [ + "string", + "null" + ] + }, + "data": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + }, + "file_name": { + "type": [ + "string", + "null" + ] + } + } + }, + "User": { + "type": "object", + "required": [ + "id", + "username", + "status", + "role", + "visibility", + "is_active", + "is_bot", + "created_at", + "updated_at" + ], + "properties": { + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "bio": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "display_name": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_active": { + "type": "boolean" + }, + "is_bot": { + "type": "boolean" + }, + "last_login_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "username": { + "type": "string" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + } + } + }, + "UserAppearance": { + "type": "object", + "required": [ + "user_id", + "theme", + "color_scheme", + "density", + "font_size", + "markdown_preview", + "reduced_motion", + "created_at", + "updated_at" + ], + "properties": { + "color_scheme": { + "$ref": "#/components/schemas/ColorScheme" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "density": { + "$ref": "#/components/schemas/Density" + }, + "editor_theme": { + "type": [ + "string", + "null" + ] + }, + "font_size": { + "$ref": "#/components/schemas/FontSize" + }, + "markdown_preview": { + "type": "boolean" + }, + "reduced_motion": { + "type": "boolean" + }, + "theme": { + "$ref": "#/components/schemas/Theme" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "UserAvatarResponse": { + "type": "object", + "required": [ + "avatar_url", + "storage_key" + ], + "properties": { + "avatar_url": { + "type": "string" + }, + "storage_key": { + "type": "string" + } + } + }, + "UserDevice": { + "type": "object", + "required": [ + "id", + "user_id", + "device_name", + "device_type", + "trusted", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "device_name": { + "type": "string" + }, + "device_type": { + "$ref": "#/components/schemas/DeviceType" + }, + "fingerprint": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "last_seen_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "trusted": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "UserGpgKey": { + "type": "object", + "required": [ + "id", + "user_id", + "key_id", + "public_key", + "fingerprint", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_id": { + "type": "string" + }, + "primary_email": { + "type": [ + "string", + "null" + ] + }, + "public_key": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "verified_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + } + } + }, + "UserNotifySetting": { + "type": "object", + "required": [ + "user_id", + "email_notifications", + "web_notifications", + "mention_notifications", + "review_notifications", + "security_notifications", + "marketing_emails", + "digest_frequency", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "digest_frequency": { + "$ref": "#/components/schemas/DigestFrequency" + }, + "email_notifications": { + "type": "boolean" + }, + "marketing_emails": { + "type": "boolean" + }, + "mention_notifications": { + "type": "boolean" + }, + "review_notifications": { + "type": "boolean" + }, + "security_notifications": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "web_notifications": { + "type": "boolean" + } + } + }, + "UserOAuthInfo": { + "type": "object", + "required": [ + "id", + "provider", + "provider_user_id", + "linked_at" + ], + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "linked_at": { + "type": "string", + "format": "date-time" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "provider_email": { + "type": [ + "string", + "null" + ] + }, + "provider_user_id": { + "type": "string" + }, + "provider_username": { + "type": [ + "string", + "null" + ] + }, + "token_expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + } + } + }, + "UserPersonalAccessTokenInfo": { + "type": "object", + "required": [ + "id", + "name", + "scopes", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "name": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "scopes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Scope" + } + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "UserProfile": { + "type": "object", + "required": [ + "user_id", + "created_at", + "updated_at" + ], + "properties": { + "company": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "language": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "profile_readme": { + "type": [ + "string", + "null" + ] + }, + "timezone": { + "type": [ + "string", + "null" + ] + }, + "twitter_username": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "website_url": { + "type": [ + "string", + "null" + ] + } + } + }, + "UserSecurityLog": { + "type": "object", + "required": [ + "id", + "user_id", + "event_type", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "event_type": { + "$ref": "#/components/schemas/EventType" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "UserSessionInfo": { + "type": "object", + "required": [ + "id", + "last_active_at", + "expires_at", + "created_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "last_active_at": { + "type": "string", + "format": "date-time" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "user_agent": { + "type": [ + "string", + "null" + ] + } + } + }, + "UserSshKey": { + "type": "object", + "required": [ + "id", + "user_id", + "title", + "public_key", + "fingerprint_sha256", + "key_type", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "fingerprint_sha256": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "key_type": { + "$ref": "#/components/schemas/KeyType" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "public_key": { + "type": "string" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + } + } + }, + "Value": {}, + "Verify2FAParams": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "code": { + "type": "string" + } + } + }, + "Visibility": { + "type": "string", + "enum": [ + "Public", + "Private", + "Internal", + "Workspace", + "Protected", + "Hidden", + "Secret", + "Unknown" + ] + }, + "WatchParams": { + "type": "object", + "properties": { + "level": { + "type": [ + "string", + "null" + ] + } + } + }, + "WikiCompareResult": { + "type": "object", + "description": "Result of comparing two wiki page revisions", + "required": [ + "old", + "new" + ], + "properties": { + "new": { + "$ref": "#/components/schemas/WikiPageRevision", + "description": "The newer revision being compared" + }, + "old": { + "$ref": "#/components/schemas/WikiPageRevision", + "description": "The older revision being compared" + } + } + }, + "WikiPage": { + "type": "object", + "required": [ + "id", + "repo_id", + "slug", + "title", + "content", + "author_id", + "version", + "created_at", + "updated_at" + ], + "properties": { + "author_id": { + "type": "string", + "format": "uuid" + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_editor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "repo_id": { + "type": "string", + "format": "uuid" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "WikiPageRevision": { + "type": "object", + "required": [ + "id", + "page_id", + "version", + "title", + "content", + "editor_id", + "created_at" + ], + "properties": { + "commit_message": { + "type": [ + "string", + "null" + ] + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "editor_id": { + "type": "string", + "format": "uuid" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "page_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "Workspace": { + "type": "object", + "required": [ + "id", + "owner_id", + "name", + "visibility", + "plan", + "status", + "default_role", + "is_personal", + "created_at", + "updated_at" + ], + "properties": { + "archived_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "avatar_url": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_role": { + "type": "string" + }, + "deleted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_personal": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "owner_id": { + "type": "string", + "format": "uuid" + }, + "plan": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "visibility": { + "$ref": "#/components/schemas/Visibility" + } + } + }, + "WorkspaceAuditLog": { + "type": "object", + "required": [ + "id", + "workspace_id", + "action", + "created_at" + ], + "properties": { + "action": { + "type": "string" + }, + "actor_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "ip_address": { + "type": [ + "string", + "null" + ] + }, + "metadata": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Value" + } + ] + }, + "target_id": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "target_type": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/TargetType" + } + ] + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceBilling": { + "type": "object", + "required": [ + "workspace_id", + "plan", + "status", + "seats", + "created_at", + "updated_at" + ], + "properties": { + "billing_email": { + "type": [ + "string", + "null" + ] + }, + "canceled_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "current_period_end": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "current_period_start": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "customer_id": { + "type": [ + "string", + "null" + ] + }, + "plan": { + "type": "string" + }, + "seats": { + "type": "integer", + "format": "int32" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "subscription_id": { + "type": [ + "string", + "null" + ] + }, + "trial_ends_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceCustomBranding": { + "type": "object", + "required": [ + "workspace_id", + "enabled", + "created_at", + "updated_at" + ], + "properties": { + "accent_color": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "custom_css": { + "type": [ + "string", + "null" + ] + }, + "enabled": { + "type": "boolean" + }, + "favicon_url": { + "type": [ + "string", + "null" + ] + }, + "logo_url": { + "type": [ + "string", + "null" + ] + }, + "primary_color": { + "type": [ + "string", + "null" + ] + }, + "support_url": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceDomain": { + "type": "object", + "required": [ + "id", + "workspace_id", + "domain", + "is_primary", + "is_verified", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "domain": { + "type": "string" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "is_primary": { + "type": "boolean" + }, + "is_verified": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "verification_token_hash": { + "type": [ + "string", + "null" + ] + }, + "verified_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceIntegration": { + "type": "object", + "required": [ + "id", + "workspace_id", + "provider", + "name", + "config", + "enabled", + "installed_by", + "created_at", + "updated_at" + ], + "properties": { + "config": {}, + "created_at": { + "type": "string", + "format": "date-time" + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "installed_by": { + "type": "string", + "format": "uuid" + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "name": { + "type": "string" + }, + "provider": { + "$ref": "#/components/schemas/Provider" + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceIntegrationConfig": { + "type": "object", + "required": [ + "scopes", + "permissions", + "repo_ids", + "channel_ids", + "settings", + "extra" + ], + "properties": { + "callback_url": { + "type": [ + "string", + "null" + ] + }, + "channel_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "extra": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Value" + }, + "propertyNames": { + "type": "string" + } + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Permission" + } + }, + "repo_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "scopes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Scope" + } + }, + "settings": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Value" + }, + "propertyNames": { + "type": "string" + } + } + } + }, + "WorkspaceInvitation": { + "type": "object", + "required": [ + "id", + "workspace_id", + "email", + "role", + "token_hash", + "invited_by", + "expires_at", + "created_at" + ], + "properties": { + "accepted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "accepted_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": "string", + "format": "uuid" + }, + "revoked_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "token_hash": { + "type": "string" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceMember": { + "type": "object", + "required": [ + "id", + "workspace_id", + "user_id", + "role", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "invited_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "joined_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_active_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "role": { + "$ref": "#/components/schemas/Role" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspacePendingApproval": { + "type": "object", + "required": [ + "id", + "workspace_id", + "requester_id", + "request_type", + "status", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": [ + "string", + "null" + ] + }, + "request_type": { + "$ref": "#/components/schemas/RequestType" + }, + "requester_id": { + "type": "string", + "format": "uuid" + }, + "reviewed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceSettings": { + "type": "object", + "required": [ + "workspace_id", + "allow_public_repos", + "allow_member_invites", + "require_two_factor", + "default_repo_visibility", + "default_branch_name", + "issue_tracking_enabled", + "pull_requests_enabled", + "wiki_enabled", + "created_at", + "updated_at" + ], + "properties": { + "allow_member_invites": { + "type": "boolean" + }, + "allow_public_repos": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "default_branch_name": { + "type": "string" + }, + "default_repo_visibility": { + "type": "string" + }, + "issue_tracking_enabled": { + "type": "boolean" + }, + "pull_requests_enabled": { + "type": "boolean" + }, + "require_two_factor": { + "type": "boolean" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "wiki_enabled": { + "type": "boolean" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceStats": { + "type": "object", + "required": [ + "workspace_id", + "members_count", + "repos_count", + "issues_count", + "pull_requests_count", + "storage_bytes", + "bandwidth_bytes", + "build_minutes_used", + "updated_at" + ], + "properties": { + "bandwidth_bytes": { + "type": "integer", + "format": "int64" + }, + "build_minutes_used": { + "type": "integer", + "format": "int64" + }, + "issues_count": { + "type": "integer", + "format": "int64" + }, + "last_activity_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "members_count": { + "type": "integer", + "format": "int64" + }, + "pull_requests_count": { + "type": "integer", + "format": "int64" + }, + "repos_count": { + "type": "integer", + "format": "int64" + }, + "storage_bytes": { + "type": "integer", + "format": "int64" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + }, + "WorkspaceWebhook": { + "type": "object", + "required": [ + "id", + "workspace_id", + "url", + "events", + "active", + "created_by", + "created_at", + "updated_at" + ], + "properties": { + "active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "type": "string", + "format": "uuid" + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + "id": { + "type": "string", + "format": "uuid" + }, + "last_delivery_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "last_delivery_status": { + "type": [ + "string", + "null" + ] + }, + "secret_ciphertext": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "url": { + "type": "string" + }, + "workspace_id": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "tags": [ + { + "name": "Auth", + "description": "Authentication, registration, session and email security endpoints." + }, + { + "name": "User", + "description": "User account management, profile, appearance, notification settings, SSH/GPG keys, sessions, devices, OAuth accounts, security logs, and personal access tokens." + }, + { + "name": "Workspaces", + "description": "Workspace CRUD, archiving, ownership transfer, and avatar management." + }, + { + "name": "Repos", + "description": "Repository management including branches, tags, releases, forks, stars, watches, members, invitations, deploy keys, webhooks, protection rules, commit statuses, and statistics." + }, + { + "name": "Issues", + "description": "Issue tracking, comments, labels, milestones, assignees, events, reactions, subscribers, templates, and cross-references." + }, + { + "name": "Pull Requests", + "description": "Pull request lifecycle including reviews, check runs, merge strategies, labels, assignees, events, reactions, and subscriptions." + }, + { + "name": "Wiki", + "description": "Wiki page management including CRUD operations, revision history, version comparison, and page reversion." + } + ] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..2e89b34 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "appwebks", + "private": true, + "version": "0.0.0", + "type": "module", + "imports": { + "@/*": "./src/*" + }, + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "genapi": "node genapi.js" + }, + "dependencies": { + "@solid-primitives/history": "^0.2.3", + "@solid-primitives/i18n": "^2.2.1", + "@solid-primitives/keyboard": "^1.3.5", + "@solid-primitives/sse": "^0.0.102", + "@solid-primitives/storage": "^4.3.4", + "@solid-primitives/websocket": "^1.4.0", + "@solidjs/meta": "^0.29.4", + "@solidjs/router": "^0.16.1", + "@tailwindcss/vite": "^4.3.0", + "@tanstack/solid-query": "^5.101.0", + "axios": "^1.17.0", + "ky": "^2.0.2", + "solid-icons": "^1.2.0", + "solid-js": "^1.9.12", + "tailwindcss": "^4.3.0", + "zod": "^4.4.3" + }, + "devDependencies": { + "@types/node": "^24.12.3", + "openapi-typescript-codegen": "^0.30.0", + "typescript": "~6.0.2", + "vite": "^8.0.12", + "vite-plugin-solid": "^2.11.12" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..f90339d --- /dev/null +++ b/src/App.css @@ -0,0 +1,184 @@ +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..17b1a58 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1 @@ +export default function App() { return null; } diff --git a/src/app/auth/auth.css b/src/app/auth/auth.css new file mode 100644 index 0000000..04b1079 --- /dev/null +++ b/src/app/auth/auth.css @@ -0,0 +1,579 @@ +/* ───────────────────────────────────────────────────────────────── + * Authks — Design System Tokens (Light + Dark) + * ───────────────────────────────────────────────────────────────── */ + +/* Override #root during auth pages */ +.auth-page #root { + width: 100%; + max-width: none; + border: none; + text-align: left; + padding: 0; + margin: 0; +} + +.auth-root { + /* Reset conflicting styles from index.css */ + margin: 0; + padding: 0; + border: none; + + /* Surfaces */ + --bg: #ffffff; + --surface: #f5f5f7; + --surface-warm: #fbfbfd; + + /* Foreground ramp */ + --fg: #1d1d1f; + --fg-2: #424245; + --muted: #6e6e73; + --meta: #86868b; + + /* Borders */ + --border: #d2d2d7; + --border-soft: #e8e8ed; + + /* Accent */ + --accent: #0071e3; + --accent-on: #ffffff; + --accent-hover: #0077ed; + --accent-active: #0066cc; + + /* Semantic */ + --success: #16a34a; + --warn: #eab308; + --danger: #dc2626; + + /* Typography */ + --font-display: "SF Pro Display", "SF Pro Icons", "Helvetica Neue", "Inter", system-ui, -apple-system, sans-serif; + --font-body: "SF Pro Text", "SF Pro Icons", "Helvetica Neue", "Inter", system-ui, -apple-system, sans-serif; + --font-mono: "SF Mono", ui-monospace, "JetBrains Mono", Menlo, Monaco, Consolas, monospace; + + /* Radius */ + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 18px; + --radius-pill: 980px; + + /* Motion */ + --motion-fast: 150ms; + --motion-base: 220ms; + --ease-standard: cubic-bezier(0.28, 0, 0.22, 1); + + /* Focus */ + --focus-ring: 0 0 0 4px color-mix(in oklab, var(--accent), transparent 65%); + + /* Elevation */ + --elev-flat: none; + --elev-ring: 0 0 0 1px var(--border); + --elev-raised: 0 12px 32px rgba(0, 0, 0, 0.08); + + font-family: var(--font-body); + font-size: 17px; + line-height: 1.47; + color: var(--fg); + background: var(--surface); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + min-height: 100dvh; +} + +@media (prefers-color-scheme: dark) { + .auth-root { + --bg: #1c1c1e; + --surface: #2c2c2e; + --surface-warm: #232325; + + --fg: #f5f5f7; + --fg-2: #d1d1d6; + --muted: #98989d; + --meta: #86868b; + + --border: #48484a; + --border-soft: #38383a; + + --accent: #0a84ff; + --accent-on: #ffffff; + --accent-hover: #409cff; + --accent-active: #0071e3; + + --success: #30d158; + --warn: #ffd60a; + --danger: #ff453a; + + --elev-raised: 0 12px 32px rgba(0, 0, 0, 0.4); + } +} + +.auth-root *, +.auth-root ::before, +.auth-root ::after { + box-sizing: border-box; +} + +.auth-root h1, +.auth-root h2, +.auth-root h3, +.auth-root h4, +.auth-root h5, +.auth-root h6 { + font-family: var(--font-display); + font-weight: 600; + font-size: inherit; + letter-spacing: -0.015em; + margin: 0; +} + +.auth-root a { + color: var(--accent); + text-decoration: none; + transition: color var(--motion-fast) var(--ease-standard); +} +.auth-root a:hover { + color: var(--accent-hover); + text-decoration: underline; +} + +/* ─── Form field base ─────────────────────────────────────────────── */ +.auth-root .field { + display: flex; + flex-direction: column; + gap: 6px; + min-width: 0; +} +.auth-root .field label { + font-size: 14px; + font-weight: 600; + color: var(--fg); +} +.auth-root .field .field-optional { + font-size: 12px; + font-weight: 400; + color: var(--meta); + margin-left: 4px; +} +.auth-root .field input { + width: 100%; + min-width: 0; + height: 48px; + padding: 0 16px; + font-family: var(--font-body); + font-size: 17px; + color: var(--fg); + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + outline: none; + transition: border-color var(--motion-fast) var(--ease-standard), + box-shadow var(--motion-fast) var(--ease-standard); +} +.auth-root .field input::placeholder { + color: var(--meta); +} +.auth-root .field input:hover { + border-color: var(--meta); +} +.auth-root .field input:focus-visible { + border-color: var(--accent); + box-shadow: var(--focus-ring); +} +.auth-root .field input.input-error { + border-color: var(--danger); +} +.auth-root .field input.input-error:focus-visible { + box-shadow: 0 0 0 4px color-mix(in oklab, var(--danger), transparent 65%); +} +.auth-root .field input:disabled { + opacity: 0.6; + cursor: not-allowed; + background: var(--surface); +} + +/* ─── Password group ──────────────────────────────────────────────── */ +.auth-root .password-group { + position: relative; + display: flex; + align-items: center; +} +.auth-root .password-group input { + width: 100%; + height: 48px; + padding: 0 44px 0 16px; + font-family: var(--font-body); + font-size: 17px; + color: var(--fg); + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + outline: none; + transition: border-color var(--motion-fast) var(--ease-standard), + box-shadow var(--motion-fast) var(--ease-standard); +} +.auth-root .password-group input::placeholder { + color: var(--meta); +} +.auth-root .password-group input:hover { + border-color: var(--meta); +} +.auth-root .password-group input:focus-visible { + border-color: var(--accent); + box-shadow: var(--focus-ring); +} +.auth-root .password-group input.input-error { + border-color: var(--danger); +} +.auth-root .password-group input.input-error:focus-visible { + box-shadow: 0 0 0 4px color-mix(in oklab, var(--danger), transparent 65%); +} +.auth-root .password-group input:disabled { + opacity: 0.6; + cursor: not-allowed; + background: var(--surface); +} + +.auth-root .eye-btn { + position: absolute; + right: 8px; + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + background: transparent; + border: none; + border-radius: 6px; + cursor: pointer; + color: var(--meta); + transition: background var(--motion-fast) var(--ease-standard); +} +.auth-root .eye-btn:hover { + background: color-mix(in oklab, var(--fg), transparent 94%); +} +.auth-root .eye-btn:focus-visible { + outline: none; + box-shadow: var(--focus-ring); +} + +/* ─── Error banner ─────────────────────────────────────────────────── */ +.auth-root .error-banner { + display: flex; + align-items: center; + gap: 10px; + padding: 12px 16px; + font-size: 14px; + color: var(--danger); + background: color-mix(in oklab, var(--danger), transparent 92%); + border: 1px solid color-mix(in oklab, var(--danger), transparent 80%); + border-radius: 12px; + line-height: 1.4; +} +.auth-root .error-banner[role="alert"]:focus { + outline: none; + box-shadow: 0 0 0 4px color-mix(in oklab, var(--danger), transparent 65%); +} + +/* ─── Buttons ────────────────────────────────────────────────────── */ +.auth-root .btn-primary { + display: inline-flex; + align-items: center; + justify-content: center; + height: 48px; + padding: 0 24px; + font-family: var(--font-body); + font-size: 17px; + font-weight: 600; + color: var(--accent-on); + background: var(--accent); + border: none; + border-radius: var(--radius-md); + cursor: pointer; + transition: background var(--motion-fast) var(--ease-standard), + transform var(--motion-fast) var(--ease-standard); + user-select: none; + -webkit-tap-highlight-color: transparent; +} +.auth-root .btn-primary:hover { + background: var(--accent-hover); +} +.auth-root .btn-primary:active { + background: var(--accent-active); + transform: scale(0.98); +} +.auth-root .btn-primary:focus-visible { + outline: none; + box-shadow: var(--focus-ring); +} +.auth-root .btn-primary:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.auth-root .btn-secondary { + display: inline-flex; + align-items: center; + justify-content: center; + height: 48px; + padding: 0 20px; + font-family: var(--font-body); + font-size: 17px; + font-weight: 600; + color: var(--accent); + background: transparent; + border: 1px solid var(--border-soft); + border-radius: var(--radius-md); + cursor: pointer; + transition: background var(--motion-fast) var(--ease-standard), + border-color var(--motion-fast) var(--ease-standard); +} +.auth-root .btn-secondary:hover { + background: color-mix(in oklab, var(--accent), transparent 92%); + border-color: color-mix(in oklab, var(--accent), transparent 70%); +} +.auth-root .btn-secondary:focus-visible { + outline: none; + box-shadow: var(--focus-ring); +} + +.auth-root .btn-block { + width: 100%; +} + +/* ─── Form layout primitives ──────────────────────────────────────── */ +.auth-root .form-stack { + display: flex; + flex-direction: column; + gap: 20px; +} + +.auth-root .form-row { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + gap: 16px; + width: 100%; +} +@media (max-width: 600px) { + .auth-root .form-row { + grid-template-columns: 1fr; + gap: 14px; + } +} + +.auth-root .form-header { + font-family: var(--font-display); + font-size: 28px; + font-weight: 600; + color: var(--fg); + letter-spacing: -0.015em; + text-align: center; + margin: 0 0 2px; +} +.auth-root .form-desc { + font-family: var(--font-body); + font-size: 15px; + color: var(--muted); + line-height: 1.47; + text-align: center; + margin: 0; +} +.auth-root .form-hint { + font-family: var(--font-body); + font-size: 13px; + color: var(--meta); + line-height: 1.4; + margin: -8px 0 0; +} + +/* ─── Divider ──────────────────────────────────────────────────────── */ +.auth-root .auth-divider { + display: flex; + align-items: center; + gap: 16px; + margin: 2px 0; +} +.auth-root .auth-divider::before, +.auth-root .auth-divider::after { + content: ''; + flex: 1; + height: 1px; + background: var(--border-soft); +} +.auth-root .auth-divider span { + font-family: var(--font-body); + font-size: 13px; + color: var(--meta); + flex-shrink: 0; +} + +/* ─── Spinner ──────────────────────────────────────────────────────── */ +.auth-root .spinner-sm { + display: inline-block; + width: 16px; + height: 16px; + border: 2px solid rgba(255, 255, 255, 0.3); + border-top-color: white; + border-radius: 50%; + animation: spin 0.6s linear infinite; + flex-shrink: 0; +} + +/* ─── Back link ────────────────────────────────────────────────────── */ +.auth-root .back-link { + display: inline-flex; + align-items: center; + gap: 6px; + font-family: var(--font-body); + font-size: 14px; + font-weight: 500; + color: var(--muted); + text-decoration: none; + transition: color var(--motion-fast) var(--ease-standard); +} +.auth-root .back-link:hover { + color: var(--fg); + text-decoration: none; +} + +.auth-root .forgot-link-row { + display: flex; + justify-content: flex-end; + margin-top: -8px; +} + +/* ─── Status icon ──────────────────────────────────────────────────── */ +.auth-root .status-icon { + width: 56px; + height: 56px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.auth-root .status-icon--accent { + background: color-mix(in oklab, var(--accent), transparent 90%); +} +.auth-root .status-icon--success { + background: color-mix(in oklab, var(--success), transparent 90%); +} +.auth-root .status-icon--warn { + background: color-mix(in oklab, var(--warn), transparent 90%); +} + +/* ─── Strength meter ──────────────────────────────────────────────── */ +.auth-root .strength-meter { + display: flex; + align-items: center; + gap: 10px; + margin-top: -2px; +} +.auth-root .strength-meter__track { + flex: 1; + height: 4px; + background: var(--border-soft); + border-radius: 2px; + overflow: hidden; +} +.auth-root .strength-meter__fill { + height: 100%; + border-radius: 2px; + transition: width var(--motion-base) var(--ease-standard), + background var(--motion-base) var(--ease-standard); +} +.auth-root .strength-meter__label { + font-family: var(--font-body); + font-size: 13px; + font-weight: 500; + min-width: 32px; + text-align: right; +} + +/* ─── Captcha ───────────────────────────────────────────────────── */ +.auth-root .captcha-group { + display: flex; + flex-direction: column; + gap: 6px; +} +.auth-root .captcha-group label { + font-size: 14px; + font-weight: 600; + color: var(--fg); +} +.auth-root .captcha-row { + display: flex; + gap: 12px; + align-items: center; +} +.auth-root .captcha-row img { + height: 48px; + border-radius: var(--radius-sm); + border: 1px solid var(--border-soft); + cursor: pointer; + flex-shrink: 0; +} +.auth-root .captcha-row input { + flex: 1; + min-width: 0; + height: 48px; + padding: 0 16px; + font-family: var(--font-body); + font-size: 17px; + color: var(--fg); + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + outline: none; + transition: border-color var(--motion-fast) var(--ease-standard), + box-shadow var(--motion-fast) var(--ease-standard); +} +.auth-root .captcha-row input::placeholder { + color: var(--meta); +} +.auth-root .captcha-row input:focus-visible { + border-color: var(--accent); + box-shadow: var(--focus-ring); +} + +/* ─── PIN code input ─────────────────────────────────────────────── */ +.auth-root .pin-code-row { + display: grid; + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 8px; +} +.auth-root .pin-code-input { + width: 100%; + min-width: 0; + height: 52px; + padding: 0; + font-family: var(--font-mono); + font-size: 24px; + font-weight: 600; + color: var(--fg); + text-align: center; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + outline: none; + transition: border-color var(--motion-fast) var(--ease-standard), + box-shadow var(--motion-fast) var(--ease-standard), + transform var(--motion-fast) var(--ease-standard); +} +.auth-root .pin-code-input:focus-visible { + border-color: var(--accent); + box-shadow: var(--focus-ring); + transform: translateY(-1px); +} +.auth-root .pin-code-input:disabled { + opacity: 0.6; + cursor: not-allowed; + background: var(--surface); +} + +/* ─── Animations ─────────────────────────────────────────────────── */ +@keyframes fade-in { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } +} +@keyframes spin { + to { transform: rotate(360deg); } +} diff --git a/src/app/auth/components/AuthLayout.tsx b/src/app/auth/components/AuthLayout.tsx new file mode 100644 index 0000000..e4fdf77 --- /dev/null +++ b/src/app/auth/components/AuthLayout.tsx @@ -0,0 +1,61 @@ +import { onMount, onCleanup, type JSX } from 'solid-js'; +import '@/app/auth/auth.css'; + +interface AuthLayoutProps { + children: JSX.Element; + eyebrow?: string; + maxWidth?: number; +} + +export default function AuthLayout({ children, eyebrow, maxWidth }: AuthLayoutProps) { + onMount(() => document.documentElement.classList.add('auth-page')); + onCleanup(() => document.documentElement.classList.remove('auth-page')); + + return ( +
+
+
+
+

AppKS

+
+ {eyebrow &&

{eyebrow}

} +
{children}
+
+ © {new Date().getFullYear()} AppKS. All rights reserved. +
+
+
+ ); +} + +const s: Record = { + wrapper: { + position: 'relative', display: 'flex', 'justify-content': 'center', + 'min-height': '100dvh', padding: '48px 16px', + }, + backdrop: { + position: 'fixed', inset: '0', background: 'var(--surface)', 'z-index': '0', + }, + container: { + position: 'relative', 'z-index': '1', width: '100%', + display: 'flex', 'flex-direction': 'column', 'align-items': 'center', + gap: '24px', animation: 'fade-in 0.4s var(--ease-standard) both', margin: 'auto 0', + }, + header: { display: 'flex', 'align-items': 'center', gap: '12px' }, + brandName: { + 'font-family': 'var(--font-display)', 'font-size': '22px', 'font-weight': '600', + color: 'var(--fg)', 'letter-spacing': '-0.015em', 'line-height': '1.15', margin: '0', + }, + eyebrow: { + 'font-family': 'var(--font-body)', 'font-size': '14px', 'font-weight': '500', + color: 'var(--muted)', 'text-align': 'center', margin: '-8px 0 0', + }, + card: { + width: '100%', background: 'var(--bg)', border: '1px solid var(--border-soft)', + 'border-radius': '18px', padding: '32px 28px', 'box-shadow': 'var(--elev-raised)', + }, + footer: { + 'font-family': 'var(--font-body)', 'font-size': '12px', color: 'var(--meta)', + 'letter-spacing': '0.02em', 'margin-top': '4px', + }, +}; diff --git a/src/app/auth/components/CaptchaBox.tsx b/src/app/auth/components/CaptchaBox.tsx new file mode 100644 index 0000000..ef104d5 --- /dev/null +++ b/src/app/auth/components/CaptchaBox.tsx @@ -0,0 +1,31 @@ +export function CaptchaBox(props: { + image: string; + value: string; + onChange: (v: string) => void; + onRefresh: () => void; + id?: string; +}) { + const inputId = props.id ?? 'captcha-input'; + + return ( +
+ +
+ Captcha + props.onChange(e.currentTarget.value)} + /> +
+
+ ); +} diff --git a/src/app/auth/components/FormElements.tsx b/src/app/auth/components/FormElements.tsx new file mode 100644 index 0000000..0a350c7 --- /dev/null +++ b/src/app/auth/components/FormElements.tsx @@ -0,0 +1,135 @@ +import { createSignal, onCleanup, onMount, type JSX } from 'solid-js'; +import { PASSWORD_MAX_LENGTH, calcStrength, meetsPasswordPolicy } from '@/app/auth/lib/password'; + +function WarningCircle(props: { size: number; color: string }) { + return ( + + + + ); +} + +function Eye(props: { size: number; color: string }) { + return ( + + + + ); +} + +function EyeSlash(props: { size: number; color: string }) { + return ( + + + + ); +} + +export function ErrorMessage(props: { children: JSX.Element; id?: string }) { + let ref: HTMLDivElement | undefined; + + onMount(() => { + const timeoutId = window.setTimeout(() => ref?.focus(), 0); + onCleanup(() => window.clearTimeout(timeoutId)); + }); + + return ( + + ); +} + +export function SubmitButton(props: { + loading: boolean; + disabled?: boolean; + loadingText?: string; + children: JSX.Element; +}) { + return ( + + ); +} + +interface PasswordFieldProps { + id: string; + label: string; + value: string; + onChange: (v: string) => void; + placeholder?: string; + autoComplete?: string; + autofocus?: boolean; + hasError?: boolean; + describedBy?: string; + disabled?: boolean; + maxLength?: number; +} + +export function PasswordField(props: PasswordFieldProps) { + const [visible, setVisible] = createSignal(false); + + return ( +
+ +
+ props.onChange(e.currentTarget.value)} + autofocus={props.autofocus} + class={props.hasError ? 'input-error' : ''} + aria-invalid={props.hasError} + aria-describedby={props.describedBy} + disabled={props.disabled} + maxLength={props.maxLength ?? PASSWORD_MAX_LENGTH} + /> + +
+
+ ); +} + +const STRENGTH_LABELS = ['', 'Weak', 'Fair', 'Strong', 'Very strong']; + +export function StrengthMeter(props: { password: string }) { + if (!props.password) return null; + const score = calcStrength(props.password); + const label = STRENGTH_LABELS[score] || ''; + const color = score <= 1 ? 'var(--danger)' : score === 2 ? 'var(--warn)' : 'var(--success)'; + + return ( +
+
+
+
+ {label} +
+ ); +} + +export { meetsPasswordPolicy, calcStrength }; diff --git a/src/app/auth/components/PinCodeInput.tsx b/src/app/auth/components/PinCodeInput.tsx new file mode 100644 index 0000000..bae79f7 --- /dev/null +++ b/src/app/auth/components/PinCodeInput.tsx @@ -0,0 +1,87 @@ +import { For } from 'solid-js'; + +interface PinCodeInputProps { + id: string; + label: string; + value: string; + length?: number; + disabled?: boolean; + autofocus?: boolean; + onChange: (value: string) => void; + onComplete?: (value: string) => void; +} + +export function PinCodeInput(props: PinCodeInputProps) { + const length = () => props.length ?? 6; + const indexes = () => Array.from({ length: length() }, (_, i) => i); + const digits = () => props.value.padEnd(length()).slice(0, length()).split(''); + const inputs: HTMLInputElement[] = []; + + function commit(next: string[]) { + const value = next.join('').slice(0, length()); + props.onChange(value); + if (value.length === length()) props.onComplete?.(value); + } + + function setFrom(index: number, raw: string) { + const values = digits(); + const chars = raw.replace(/\D/g, '').slice(0, length() - index).split(''); + if (chars.length === 0) { + values[index] = ''; + commit(values); + return; + } + + chars.forEach((char, offset) => { values[index + offset] = char; }); + commit(values); + const nextIndex = Math.min(index + chars.length, length() - 1); + inputs[nextIndex]?.focus(); + } + + function handleKeyDown(index: number, e: KeyboardEvent) { + if (e.key !== 'Backspace') return; + const values = digits(); + if (values[index]) { + values[index] = ''; + commit(values); + return; + } + + if (index > 0) { + e.preventDefault(); + values[index - 1] = ''; + commit(values); + inputs[index - 1]?.focus(); + } + } + + return ( +
+ +
+ {(index) => ( + { inputs[index] = el; }} + id={index === 0 ? props.id : undefined} + class="pin-code-input" + type="text" + inputmode="numeric" + pattern="[0-9]*" + autocomplete={index === 0 ? 'one-time-code' : 'off'} + value={digits()[index]} + maxlength={1} + disabled={props.disabled} + autofocus={props.autofocus && index === 0} + aria-label={`Digit ${index + 1} of ${length()}`} + onInput={(e) => setFrom(index, e.currentTarget.value)} + onKeyDown={(e) => handleKeyDown(index, e)} + onPaste={(e) => { + e.preventDefault(); + setFrom(index, e.clipboardData?.getData('text') ?? ''); + }} + /> + )} +
+
+ ); +} diff --git a/src/app/auth/hooks/useCaptcha.ts b/src/app/auth/hooks/useCaptcha.ts new file mode 100644 index 0000000..1c2547b --- /dev/null +++ b/src/app/auth/hooks/useCaptcha.ts @@ -0,0 +1,46 @@ +import { createSignal, onCleanup, onMount } from 'solid-js'; +import { AuthService } from '@/client'; +import type { ApiResponse_CaptchaResponse } from '@/client'; + +export function useCaptcha() { + const [captcha, setCaptcha] = createSignal({ image: '', rsaKey: null as string | null }); + const [captchaError, setCaptchaError] = createSignal(''); + const [captchaLoading, setCaptchaLoading] = createSignal(false); + let requestId = 0; + let disposed = false; + + const refresh = async (): Promise => { + const currentRequest = ++requestId; + setCaptchaLoading(true); + setCaptchaError(''); + + try { + const res: ApiResponse_CaptchaResponse = await AuthService.authGetCaptcha({ + w: 200, h: 60, dark: false, rsa: true, + }); + if (disposed || currentRequest !== requestId) return false; + + setCaptcha({ + image: res.data.base64, + rsaKey: res.data.rsa?.public_key ?? null, + }); + return true; + } catch { + if (!disposed && currentRequest === requestId) { + setCaptcha({ image: '', rsaKey: null }); + setCaptchaError('Captcha failed to load. Please refresh and try again.'); + } + return false; + } finally { + if (!disposed && currentRequest === requestId) setCaptchaLoading(false); + } + }; + + onMount(() => { void refresh(); }); + onCleanup(() => { + disposed = true; + requestId++; + }); + + return { captcha, captchaError, captchaLoading, refresh }; +} diff --git a/src/app/auth/lib/password.ts b/src/app/auth/lib/password.ts new file mode 100644 index 0000000..24bacd2 --- /dev/null +++ b/src/app/auth/lib/password.ts @@ -0,0 +1,22 @@ +export const PASSWORD_MIN_LENGTH = 12; +export const PASSWORD_MAX_LENGTH = 128; + +function categoryCount(pw: string): number { + const has = [/[A-Z]/.test(pw), /[a-z]/.test(pw), /\d/.test(pw), /[^a-zA-Z0-9]/.test(pw)]; + return has.filter(Boolean).length; +} + +export function meetsPasswordPolicy(pw: string): boolean { + return pw.length >= PASSWORD_MIN_LENGTH && categoryCount(pw) >= 3; +} + +export function calcStrength(pw: string): number { + if (!pw) return 0; + let s = 0; + if (pw.length >= PASSWORD_MIN_LENGTH) s++; + if (pw.length >= 16) s++; + if (/[a-z]/.test(pw) && /[A-Z]/.test(pw)) s++; + if (/\d/.test(pw)) s++; + if (/[^a-zA-Z0-9]/.test(pw)) s++; + return Math.min(s, 4); +} diff --git a/src/app/auth/lib/rsa.ts b/src/app/auth/lib/rsa.ts new file mode 100644 index 0000000..d91ddf1 --- /dev/null +++ b/src/app/auth/lib/rsa.ts @@ -0,0 +1,91 @@ +function pemToDer(pem: string): Uint8Array { + const b64 = pem + .replace(/-----BEGIN (?:RSA |)PUBLIC KEY-----/g, '') + .replace(/-----END (?:RSA |)PUBLIC KEY-----/g, '') + .replace(/\s/g, ''); + + if (!b64) throw new Error('Invalid RSA public key'); + return Uint8Array.from(atob(b64), (c) => c.charCodeAt(0)); +} + +function derLength(length: number): Uint8Array { + if (length < 0x80) return new Uint8Array([length]); + + const bytes: number[] = []; + let value = length; + while (value > 0) { + bytes.unshift(value & 0xff); + value >>= 8; + } + return new Uint8Array([0x80 | bytes.length, ...bytes]); +} + +function derTagged(tag: number, value: Uint8Array): Uint8Array { + const length = derLength(value.length); + const result = new Uint8Array(1 + length.length + value.length); + result[0] = tag; + result.set(length, 1); + result.set(value, 1 + length.length); + return result; +} + +function concatBytes(...parts: Uint8Array[]): Uint8Array { + const length = parts.reduce((sum, part) => sum + part.length, 0); + const result = new Uint8Array(length); + let offset = 0; + for (const part of parts) { + result.set(part, offset); + offset += part.length; + } + return result; +} + +function toArrayBuffer(bytes: Uint8Array): ArrayBuffer { + const buffer = new ArrayBuffer(bytes.length); + new Uint8Array(buffer).set(bytes); + return buffer; +} + +function pkcs1DerToSpkiDer(pkcs1: Uint8Array): ArrayBuffer { + const rsaEncryptionOid = new Uint8Array([ + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, + ]); + const nullParams = new Uint8Array([0x05, 0x00]); + const algorithmIdentifier = derTagged(0x30, concatBytes(rsaEncryptionOid, nullParams)); + const publicKeyBitString = derTagged(0x03, concatBytes(new Uint8Array([0x00]), pkcs1)); + return toArrayBuffer(derTagged(0x30, concatBytes(algorithmIdentifier, publicKeyBitString))); +} + +async function importRsaPublicKey(pem: string): Promise { + const der = pemToDer(pem); + + try { + return await crypto.subtle.importKey( + 'spki', toArrayBuffer(der), + { name: 'RSA-OAEP', hash: 'SHA-256' }, + false, ['encrypt'], + ); + } catch { + return await crypto.subtle.importKey( + 'spki', pkcs1DerToSpkiDer(der), + { name: 'RSA-OAEP', hash: 'SHA-256' }, + false, ['encrypt'], + ); + } +} + +function bytesToBase64(bytes: Uint8Array): string { + let binary = ''; + const chunkSize = 0x8000; + for (let i = 0; i < bytes.length; i += chunkSize) { + binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize)); + } + return btoa(binary); +} + +export async function rsaEncrypt(plaintext: string, publicKeyPem: string): Promise { + const key = await importRsaPublicKey(publicKeyPem); + const encoded = new TextEncoder().encode(plaintext); + const encrypted = await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, key, encoded); + return bytesToBase64(new Uint8Array(encrypted)); +} diff --git a/src/app/auth/pages/ForgotPassword.tsx b/src/app/auth/pages/ForgotPassword.tsx new file mode 100644 index 0000000..f3331fb --- /dev/null +++ b/src/app/auth/pages/ForgotPassword.tsx @@ -0,0 +1,106 @@ +import { createSignal, Show } from 'solid-js'; +import { useNavigate, useLocation } from '@solidjs/router'; +import AuthLayout from '@/app/auth/components/AuthLayout'; +import { SubmitButton, ErrorMessage } from '@/app/auth/components/FormElements'; +import { AuthService } from '@/client'; +import { ApiError } from '@/client/core/ApiError'; + +function ArrowLeft(props: { size: number }) { + return ( + + + + ); +} + +function Envelope(props: { size: number; color: string }) { + return ( + + + + ); +} + +export default function ForgotPassword() { + const navigate = useNavigate(); + const location = useLocation(); + + const [email, setEmail] = createSignal(''); + const [error, setError] = createSignal(''); + const [loading, setLoading] = createSignal(false); + const isSent = () => location.hash === '#sent'; + + function setStepSent() { navigate('/forgot-password#sent', { replace: true }); } + function setStepForm() { navigate('/forgot-password', { replace: true }); } + + async function handleSubmit(e: SubmitEvent) { + e.preventDefault(); + if (loading()) return; + setError(''); + if (!email().trim()) { setError('Please enter your email'); return; } + const emailRe = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRe.test(email().trim())) { setError('Invalid email format'); return; } + + setLoading(true); + try { + await AuthService.authRequestPasswordReset({ requestBody: { email: email().trim() } }); + setStepSent(); + } catch (err) { + if (err instanceof ApiError && err.status === 429) { + setError('Too many requests, please try again later'); + } else { + setError('Unable to request password reset, please try again'); + } + } finally { setLoading(false); } + } + + return ( + +
+
+ +
+

Email Sent

+

+ If {email() || 'the email address'} is registered, you will receive a password reset email. +

+

+ Please check your inbox and spam folder. The link is valid for 1 hour. +

+
+ + + + +
+
+ + } + > + +
+

Forgot Password

+

Enter your registered email to receive a password reset link.

+ + {error() && {error()}} + +
+ + setEmail(e.currentTarget.value)} autofocus /> +
+ + Send Reset Link + + +
+
+
+ ); +} diff --git a/src/app/auth/pages/Login.tsx b/src/app/auth/pages/Login.tsx new file mode 100644 index 0000000..2fc8f2d --- /dev/null +++ b/src/app/auth/pages/Login.tsx @@ -0,0 +1,192 @@ +import { createSignal, Show } from 'solid-js'; +import { useNavigate, useSearchParams } from '@solidjs/router'; +import AuthLayout from '@/app/auth/components/AuthLayout'; +import { PasswordField, SubmitButton, ErrorMessage } from '@/app/auth/components/FormElements'; +import { CaptchaBox } from '@/app/auth/components/CaptchaBox'; +import { PinCodeInput } from '@/app/auth/components/PinCodeInput'; +import { useCaptcha } from '@/app/auth/hooks/useCaptcha'; +import { PASSWORD_MAX_LENGTH } from '@/app/auth/lib/password'; +import { rsaEncrypt } from '@/app/auth/lib/rsa'; +import { AuthService, type LoginParams } from '@/client'; +import { ApiError } from '@/client/core/ApiError'; + +const ERROR_ID = 'login-error'; + +function isSafeLocalRedirect(value: string): boolean { + return value.startsWith('/') && !value.startsWith('//') && !value.includes('\\'); +} + +export default function Login() { + const navigate = useNavigate(); + const [searchParams] = useSearchParams(); + const { + captcha, captchaError, captchaLoading, refresh: refreshCaptcha, + } = useCaptcha(); + + const [loginValue, setLoginValue] = createSignal(''); + const [password, setPassword] = createSignal(''); + const [captchaText, setCaptchaText] = createSignal(''); + const [totpCode, setTotpCode] = createSignal(''); + const [show2FA, setShow2FA] = createSignal(false); + const [error, setError] = createSignal(''); + const [loading, setLoading] = createSignal(false); + + function handleCaptchaRefresh() { + setCaptchaText(''); + void refreshCaptcha(); + } + + function getRedirectTo(): string { + const r = searchParams.redirect; + if (typeof r === 'string' && isSafeLocalRedirect(r)) return r; + return '/'; + } + + async function submitLogin(totpOverride?: string) { + if (loading()) return; + setError(''); + + const totp = (totpOverride ?? totpCode()).trim(); + if (!loginValue().trim()) { setError('Please enter your username or email'); return; } + if (!password()) { setError('Please enter your password'); return; } + if (password().length > PASSWORD_MAX_LENGTH) { setError('Password is too long'); return; } + if (show2FA() && !/^\d{6}$/.test(totp)) { + setError('Please enter a valid 6-digit 2FA code'); + return; + } + if (!show2FA()) { + if (captchaLoading()) { setError('Captcha is still loading'); return; } + if (captchaError()) { setError(captchaError()); return; } + if (!captchaText().trim()) { setError('Please enter the captcha'); return; } + } + + setLoading(true); + try { + let rsaKey = captcha().rsaKey; + if (!rsaKey) { + const rsaRes = await AuthService.authGetRsaPublicKey(); + rsaKey = rsaRes.data.public_key; + } + + const encrypted = await rsaEncrypt(password(), rsaKey); + + const body: LoginParams = { + username: loginValue().trim(), + password: encrypted, + captcha: show2FA() ? '' : captchaText().trim(), + }; + if (show2FA()) body.totp_code = totp; + + await AuthService.authLogin({ requestBody: body }); + navigate(getRedirectTo(), { replace: true }); + } catch (err) { + if (err instanceof ApiError) { + const msg = String(err.body?.error ?? err.message ?? '').toLowerCase(); + if (msg.includes('two-factor') || msg.includes('2fa') || msg.includes('totp')) { + setShow2FA(true); + setTotpCode(''); + setError('Please enter your 2FA code'); + } else if (msg.includes('captcha')) { + setError('Invalid captcha, please try again'); + handleCaptchaRefresh(); + } else if (err.status === 404 || err.status === 400) { + setError('Invalid username, password, or verification code'); + } else if (err.status === 429) { + setError('Too many attempts, please try again later'); + } else { + setError('Login failed, please try again'); + } + } else { + setError('Unable to complete login, please try again'); + } + } finally { + setLoading(false); + } + } + + function handleSubmit(e: SubmitEvent) { + e.preventDefault(); + void submitLogin(); + } + + function handleTotpComplete(code: string) { + if (!loading()) void submitLogin(code); + } + + return ( + +
+

Sign In

+ + {(error() || (!show2FA() && captchaError())) && ( + {error() || captchaError()} + )} + +
+ + setLoginValue(e.currentTarget.value)} + autofocus + /> +
+ + + + + + + + + + + + + + + Sign In + + +
or
+ + + + + +
+ ); +} diff --git a/src/app/auth/pages/Register.tsx b/src/app/auth/pages/Register.tsx new file mode 100644 index 0000000..8b8bde5 --- /dev/null +++ b/src/app/auth/pages/Register.tsx @@ -0,0 +1,262 @@ +import { createSignal } from 'solid-js'; +import { useNavigate, useSearchParams } from '@solidjs/router'; +import AuthLayout from '@/app/auth/components/AuthLayout'; +import { PasswordField, SubmitButton, ErrorMessage, meetsPasswordPolicy } from '@/app/auth/components/FormElements'; +import { CaptchaBox } from '@/app/auth/components/CaptchaBox'; +import { useCaptcha } from '@/app/auth/hooks/useCaptcha'; +import { PASSWORD_MAX_LENGTH } from '@/app/auth/lib/password'; +import { rsaEncrypt } from '@/app/auth/lib/rsa'; +import { AuthService, type RegisterEmailCodeParams, type RegisterParams } from '@/client'; +import { ApiError } from '@/client/core/ApiError'; + +const ERROR_ID = 'register-error'; +const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + +function isSafeLocalRedirect(value: string): boolean { + return value.startsWith('/') && !value.startsWith('//') && !value.includes('\\'); +} + +export default function Register() { + const navigate = useNavigate(); + const { + captcha, captchaError, captchaLoading, refresh: refreshCaptcha, + } = useCaptcha(); + + const [form, setForm] = createSignal({ + username: '', email: '', password: '', confirmPassword: '', emailCode: '', + }); + const [captchaText, setCaptchaText] = createSignal(''); + const [step, setStep] = createSignal<'email' | 'register'>('email'); + const [error, setError] = createSignal(''); + const [loading, setLoading] = createSignal(false); + const [codeLoading, setCodeLoading] = createSignal(false); + + const [searchParams] = useSearchParams(); + function getRedirectTo(): string { + const r = searchParams.redirect; + if (typeof r === 'string' && isSafeLocalRedirect(r)) return r; + return '/'; + } + + function setField(key: keyof ReturnType) { + return (e: InputEvent & { currentTarget: HTMLInputElement }) => + setForm((prev) => ({ ...prev, [key]: e.currentTarget.value })); + } + + function handleCaptchaRefresh() { + setCaptchaText(''); + void refreshCaptcha(); + } + + function validateCaptcha(): boolean { + if (captchaLoading()) { setError('Captcha is still loading'); return false; } + if (captchaError()) { setError(captchaError()); return false; } + if (!captchaText().trim()) { setError('Please enter the captcha'); return false; } + return true; + } + + async function handleSendCode(e: MouseEvent) { + e.preventDefault(); + if (codeLoading()) return; + setError(''); + + const email = form().email.trim(); + if (!email) { setError('Please enter your email'); return; } + if (!EMAIL_RE.test(email)) { setError('Invalid email format'); return; } + if (!validateCaptcha()) return; + + setCodeLoading(true); + try { + const requestBody: RegisterEmailCodeParams = { email, captcha: captchaText().trim() }; + await AuthService.authSendRegisterEmailCode({ requestBody }); + setStep('register'); + handleCaptchaRefresh(); + } catch (err) { + if (err instanceof ApiError) { + const msg = String(err.body?.error ?? err.message ?? '').toLowerCase(); + if (msg.includes('captcha') || err.status === 400) { + setError('Invalid captcha or email, please try again'); + handleCaptchaRefresh(); + } else if (err.status === 409) { + setError('This email is already used'); + } else if (err.status === 429) { + setError('Too many requests, please try again later'); + } else { + setError('Failed to send code, please try again'); + } + } else { + setError('Unable to send code, please try again'); + } + } finally { + setCodeLoading(false); + } + } + + async function handleSubmit(e: SubmitEvent) { + e.preventDefault(); + if (loading()) return; + setError(''); + + const f = form(); + if (!f.username.trim()) { setError('Please enter a username'); return; } + if (!f.email.trim()) { setError('Please enter your email'); return; } + if (!f.emailCode.trim()) { setError('Please enter the verification code'); return; } + if (!/^\d{6}$/.test(f.emailCode.trim())) { setError('Please enter a valid 6-digit code'); return; } + if (!f.password) { setError('Please enter a password'); return; } + if (f.password.length > PASSWORD_MAX_LENGTH) { setError('Password is too long'); return; } + if (!meetsPasswordPolicy(f.password)) { + setError('Password must be at least 12 characters with 3 of: uppercase, lowercase, digit, special character'); + return; + } + if (f.password !== f.confirmPassword) { setError('Passwords do not match'); return; } + if (!EMAIL_RE.test(f.email.trim())) { setError('Invalid email format'); return; } + if (!validateCaptcha()) return; + + setLoading(true); + try { + let rsaKey = captcha().rsaKey; + if (!rsaKey) { + const rsaRes = await AuthService.authGetRsaPublicKey(); + rsaKey = rsaRes.data.public_key; + } + const encrypted = await rsaEncrypt(f.password, rsaKey); + const requestBody: RegisterParams = { + username: f.username.trim(), + email: f.email.trim(), + password: encrypted, + captcha: captchaText().trim(), + email_code: f.emailCode.trim(), + }; + + await AuthService.authRegister({ requestBody }); + navigate(getRedirectTo(), { replace: true }); + } catch (err) { + if (err instanceof ApiError) { + const msg = String(err.body?.error ?? err.message ?? '').toLowerCase(); + if (msg.includes('captcha') || err.status === 400) { + setError('Invalid captcha, code, or password. Please try again'); + handleCaptchaRefresh(); + } else if (err.status === 409) { + setError('Username or email is already taken'); + } else if (err.status === 429) { + setError('Too many attempts, please try again later'); + } else { + setError('Registration failed, please try again'); + } + } else { + setError('Unable to complete registration, please try again'); + } + } finally { + setLoading(false); + } + } + + if (step() === 'email') { + return ( + +
+

Register

+

Enter your email to receive a verification code.

+ + {(error() || captchaError()) && {error() || captchaError()}} + +
+ + +
+ + + + + +
or
+ + + + +
+
+ ); + } + + return ( + +
+

Register

+ + {(error() || captchaError()) && {error() || captchaError()}} + +
+ + +
+ +
+ + +
+ +
+ + +
+ + setForm((p) => ({ ...p, password: v }))} + autoComplete="new-password" placeholder="At least 12 characters" + hasError={!!error()} describedBy={error() ? ERROR_ID : undefined} /> + + setForm((p) => ({ ...p, confirmPassword: v }))} + autoComplete="new-password" placeholder="Re-enter your password" + hasError={!!error()} /> + +

+ At least 12 characters with 3 of: uppercase, lowercase, digit, special character. +

+ + + + Register + +
or
+ + + + + +
+ ); +} diff --git a/src/app/auth/pages/ResetPassword.tsx b/src/app/auth/pages/ResetPassword.tsx new file mode 100644 index 0000000..35579bc --- /dev/null +++ b/src/app/auth/pages/ResetPassword.tsx @@ -0,0 +1,158 @@ +import { createSignal } from 'solid-js'; +import { useSearchParams } from '@solidjs/router'; +import AuthLayout from '@/app/auth/components/AuthLayout'; +import { PasswordField, SubmitButton, ErrorMessage, StrengthMeter, meetsPasswordPolicy } from '@/app/auth/components/FormElements'; +import { PASSWORD_MAX_LENGTH } from '@/app/auth/lib/password'; +import { rsaEncrypt } from '@/app/auth/lib/rsa'; +import { AuthService } from '@/client'; +import { ApiError } from '@/client/core/ApiError'; + +function WarningCircle(props: { size: number; color: string }) { + return ( + + + + ); +} + +function CheckCircle(props: { size: number; color: string }) { + return ( + + + + ); +} + +function ArrowLeft(props: { size: number }) { + return ( + + + + ); +} + +function InvalidTokenView() { + return ( + +
+
+ +
+

Invalid Link

+

This password reset link is invalid or has expired. Please request a new one.

+ + + + + Back to Sign In + +
+
+ ); +} + +function SuccessView() { + return ( + +
+
+ +
+

Password Reset

+

+ Your password has been successfully reset. Please sign in with your new password. +

+ + + +
+
+ ); +} + +function ResetFormView(props: { token: string }) { + const [password, setPassword] = createSignal(''); + const [confirmPassword, setConfirmPassword] = createSignal(''); + const [success, setSuccess] = createSignal(false); + const [error, setError] = createSignal(''); + const [loading, setLoading] = createSignal(false); + + async function handleSubmit(e: SubmitEvent) { + e.preventDefault(); + if (loading()) return; + setError(''); + + if (!password()) { setError('Please enter a new password'); return; } + if (password().length > PASSWORD_MAX_LENGTH) { setError('Password is too long'); return; } + if (!meetsPasswordPolicy(password())) { + setError('Password must be at least 12 characters with 3 of: uppercase, lowercase, digit, special character'); + return; + } + if (password() !== confirmPassword()) { setError('Passwords do not match'); return; } + + setLoading(true); + try { + const rsaRes = await AuthService.authGetRsaPublicKey(); + const encrypted = await rsaEncrypt(password(), rsaRes.data.public_key); + + await AuthService.authVerifyPasswordReset({ + requestBody: { token: props.token, password: encrypted }, + }); + setSuccess(true); + } catch (err) { + if (err instanceof ApiError) { + if (err.status === 400) { + setError('Link is invalid or expired. Please request a new one.'); + } else if (err.status === 429) { + setError('Too many attempts, please try again later'); + } else { + setError('Reset failed, please try again'); + } + } else { + setError('Unable to reset password, please try again'); + } + } finally { setLoading(false); } + } + + if (success()) return ; + + return ( + +
+

Reset Password

+

Enter your new password.

+ + {error() && {error()}} + + + + + + + + Reset Password + + + +
+ ); +} + +export default function ResetPassword() { + const [searchParams] = useSearchParams(); + + function getToken(): string { + const t = searchParams.token; + if (typeof t === 'string') return t; + return ''; + } + + const token = getToken(); + if (!token) return ; + return ; +} diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 zcmV+cGycqpP)V|)f$;Qooc7=_G zlYe)HToTQIc!$)^+J1M1y0*T%w!p~7%ux`!eRhO?c80XDxKQ*R^lUUMnA>6NT^?feoZ8xxvP32D&s-9ow zqjcM}eesrC)NeDmsf)*P7wJ|K!&xP%Zy4iI8lF)Tv2!reW)tCzg_1=PmOwd1SQfxa z8;58t!=z~Ba7CYlNWVG>he8aRPY|+-JmozNhn!#9i#77Aa_Edt$ijyCWL#=~I>~2X zZNrQ8I0=D+NWD4pq=7~(i zhfThMNw|G>g^y9pGzxX7ZSApl@tIxFcs{p#MX{Ax&XZT+cR#U+OWc@S)pkIuI}dzu zH?^Q=<(y&Vq-oxSLfc0Zmq81bjZWf}RnssBaD6}2g-XJHLcN_|*IOu>m|x$nbm(?E zyNy!Zp=RroS;?Vg*kmoJYBi!n5{_^@rA!)=t#a^;N$8GL!*DsQb}`yvEuX!G@||An znOfUZAevPrkV_qjl|<~3QRZzG&h@C9Y5z zqpNH4xqbF_InIPh)kX}Vn^5kyed|mOuq+2>M;v~KO37a#yrEn3XDqtOl=rc6_KZ!; zreo)DFVB4|>1Zd(bvMI%8uM;3!)YMYu&cG?(PE!B~y@3yKBMt|R zAf=I16tFwPsl)!jDqvYkLHaAQ+f@W1m6F5aZvwhm4JL z{_l)@b;)mDSzle2gyFP5-r1x-5X{G}ot%VyWP@vEW80!Q=f%RTfpg>B*TA^pyWYUQ z<=xPtz}WcZ!;rFl4m1D&FFHv?K~#9!?A%+fn=lXt;9!Fc#kQ;zk~gZFsH z8e5iu@c_pzX&qb8&Dum*oXwB+fm6l6gFfC|o*wgEiy6tw~&co z9Vd_4)P%wP-KwQW7|lN-znGK#?N+j24U=$982myIBM+vsiKsc*@4-rwJxuAaHKna6 zT3wi!C~a4ZKH03qU}_1bKyx0&$CaK7_%Z+Kl$)fF5^op zZApQF2TvDav!s|krTjw-8US6ep z%!VmX4luub+fseQz_D9ATJQ?iQQwD}TZz{-yo#l12a%+7bT@E(X-hyaVS-5vuXc#^ zx^w;L21;NphGVoj*{s3f4dme0y2LC=G1-7THd`#z?;tuC{^9k(dM{Rf2GOxg7Jzho z7nSZHl7?M9kdalX`)YgoKEfiae5+;$(OGeN1eqxrv!ZCVKyH>xiyNqfe8xzY8*7)H zQls8KMp)F4D>ED;idMOU^^WhVF@q>ZSmeB0y~qC~|DB648hr%Sh|*T(4q|w2l?m2+ zvBVw3@7+Mz?^Yc#+se6KM;a<=(W-I>k)$-qL2V*t}VaW`;?P4)WqI%maIDq8!oUcSYAD`}wWjkSyAVsnF65#2zQ zZ>(K*TlS(E#4y$4Zq+e^_&}d)q20hCe3!LfLYP%nQpLJ~gM6a1hJlz3)aS<9C9me| zAcmJ#>tOwBy{HoP0Sm1&_(E+S@6 zgBIFUoei8zJmdpiq8q5=OY7t@`)JWxn_&GvKVr=Zdb_pEL_j|=?f;WK^U9Q0efd#K z9q7SfJTl4pmA$jsZ5oK8@O9#!I3Cv-kL)<8SalSsp#dcpvJ}Nz#G6FC0%9|7Fi#8; zGDJXtj!&GljT3*HE@0EE>G8Se&d)*nkqe}-?`3vPl&UqK?xG z!3XJ4M-x`EuQjhBbu?ik-)rmIt=DF_N?TVMP)8Gjn)TZ2V%H|zENbeix}kOxd@0}Q z>)HuH6Ean!uS#~4g2Ne2WsMGel|h%j9*W_quQheG^JqmKhc*RYzp0wKlGjBq2VzY_ zgOv8WC1+%W=W)k)Yp_`8kfE=uiiwOZTXi8Uj9YGr$f@yJcJ;#&-Nq~sJ7anE(@;QN z=~br%7%7`isKStX|7!1?L(apl^QvPKlrHV4S+6tNVQ*R1iGdC~WMNE1$a+=rpQmcB z>wxiLIBvOnm;u*;9Y!kJdy(T4lk|8>JAm(&wEsFIF1$_*{>2ZNd$V6DS=SfrGxAv0 zzKe377JI`&o9Ljr+VnS*EwehA{f&{cKZF(6*MG5!p5MvrFA3ll{fmRG*L@6^cb;o^ z3Wm8c?Sc6$`>~VEWw(c$Y?nRO;2Q$=ulpqPtM^=1IZx;@xK0PgO7rKQ^WHVLwtgUT z%|JF{^f(VH)wLKQ%dYiu2RmchBdxL0-M?wxxul_z*{h6ZZ`>-k(vizs((vW8Lt6Z6 zY;Dt?@JWyN`O`f;&d1Mb?e%9oyRK1ql?EE5XB2(W)|D1~Rx35$H6@6)$F?)7V|zEO zI}fu0-0}8W5=6sg$fPnZ~7=tTudl?Ecb@pxbo)vni%gP-?hL|%*?62C;x6?@E`VRnJv z?fTb;k4x;TS7Cu-z%J}uy}e-pwpLQ17Q@4DC+FCdAmNKklG$`I_pyw7E{fYmw~{Fj zi?6KcVy=Wrel)EB_DWO|0CKmI|13!gBV?X`Ozp7x>?6jr`>Qz=^4ea35!$*f}) zS$i+x_k+@P2q1RFUH^ZTTk7=n?cjfR>hTq3l3SY~#w+I8SSutXGyhw;Ws~=zMQ%Vc z>$On~47Ut?P*_!TOQ&PFmLAyJieB2X4_Fd_!WxI-AY`q1Lc-oK?+qcOTzlQ?@~x@OT}*9jTVNfl@3rGvZpWI=eKg>T zZb@6YWz)J=IhP7CF|c?G62vMEG%#U}?#86$0jR4sG~i(jRd#jmn`7b(O#?N;3a;1t zhXLssmUwGhp79luw#(*V8WL0|8+E z6=YZ_O@er~$LrD_PYGc(kJgB=;yw#+Z3X6LDUZ(NcwN=B-hjdiHm!JFar%m{(5bEW z@@_VEtG$5;`EJZ|OkJ@l&G9n((w@uNFwmU%bG|s#TbcJJos!{e+bjCjrCq_}LcN!UFgKtgg7siV*7# z!}1whTRRi*-avJPu->C}Z8EiuK$#886+H_#_!btv+rsiBbv2jAJvJ+O0{#}y(%L3H zfjU-kq_-L@2XrL*ae{{qYJkD{@dw%*bkh2P&YS-0!Xt!PRz7KHV0+~j(t9W8lAVWR zt@B*DgURgEz4>WuN>o?_iKcw$?k{||Pg7{Q2o4|VmJ)mg?{VQJA<}zEr^YAAS zgGm5RT4T3p)U;yz-tfBO^kw8?IoG!IVmc+Z3m#}AOQ?5MRa>)OcU!$N^_+yK6ayn? zK>~WK0!#ysuj^oNLakm)Zvu+J)OSubX^kv!c*xgdIvs;kln!rgG4*uZ;w0mQQO4XD zO9P{GNdv!=cQ(CAL{S(%KtuV^zC&Q{%g)PoXnp^gn^>c*`E>$hLYg2HjnbVGtWLa{7zHdG1jT@B{|Dm16 z7K2(jsfG+m*Zxof)iXxu+!H5Mo-0$pkyV3VV4B@Qms46M zuBxGRV@HxU7Wwx-6CB zaU*HO<_qn$5GH>&@?nRy1{z zkik!sLfWQ)r#75)vVwCBU*r_)Q6mp?!j85{#Xqse)ApRdE$V0%I0*~e(_{)5H)`Mk z#rExC>yjhZxuL@|+#v4#<Axw$+VpV zuT;!2Vww$je$DpAW`$FX_Ab|Ip%$;&T$-lW8jS~B$>G}rd>eQG+$h9lQx4Mx0w={m zx9?T6VU`>sR}XClkAhHEShOUe8awiq zmizhL+}5UKs3}6~It7vBTig9dfQ2Q8coo+Miiaw7n~>4ybv2Ptt0^^=VqX(t*Yya9 zr`FxxFX8(v*H=+uJ#JJWIB2A(==HDYx~^zZ2nu?2`}|Wsa*f3h3ixc+U|FDtAG$Y! z*lc_7se5Oso-Cgqe0){{!8H4g$3<8!R<6JOurD;((({c$1(pwb>(#TT!sge@4>r2@ zVL7>U`0`nsWAYErezk4(Z!gMI2?UTo{J3Ajo(u4)KYIRd>BRcG4BoS3G0EXyEp@tw z%P7__?A^a>Q&AKL@ayDO9D*Qkc!NHnO9l}kpp_6hXbMppYL(X1L?njdFT|-h2<_$; zAtDZ!1Rf%|yb!qbWKd}%0b`LzBeyNy43|QO(&h2mxQLUL)|0%agVOW)6TV!&Ip^Ls z`PG2cygM8)IecQx=Fc+nqYRo4hS^^-nM_&-y8?EJXUczP=DIw(GkTJdpEdh<_STs{ z|A)4n1GKdE=Wu!!nYoZHcUQ4S&R;oDOKX2lrkdF(mK>hz<$Pp>igjOcvoRIjlN=W8 zu8Gx5(roqn8$>gEE5vy{GiGeW8Tq{vnf3hS-V=$tZkQuftUVuU8o6k&dn=Yg3)6MOIH>nlK^-2+C6BZITr~1@So?NvG#TwL)|~=1YXGMTLpS<)ziK_CSOabe z=cB#5)yz|@0i9dSo?*CX)}UP=s6)B+F@~Em(u@Q(I9J9i_V{LmMu8BfXYMh~*oPP+ z!3~xTv|(>|=n6ZOtT~C@V!z!w%18*8T2t6}U2S##rC)mekBql&VsBX;$~ByGE$oA9 z`0Wzq8p?R{4)$l*on;!cLa}Dh^Xe?owiQZt9nH1fxxh$pN9K%CtOw?u3>85L7rr!d zXs)l{TZ{xXP&U8exz?9cv~dNNibOmt*K4I$?RxqIBZ0(?Mg-9FS{*9Bc49Qc1`=sIF-rye`aNT1G@4NwXcnyc@+bw_mTsR>5< zF<2;X0QesG_pw|TonqVBhRtfqI>ty(SIu&VOXd0CrLlfp+;WH7HYjhqnu^oAY!9cB z=B6#R?Rfz9BP`dJ=@v_?70s3HxQPk+{6Y+lM85f2NF^00*^OcM0~?JOZfR9ZPYF+# zYSs}(_BUYV8{n@2a1hD^SV41bwmi2uztR;PeBgF1F-`9>`zoNss-@3LaF2sjl~>OaaVmp7PNp+UT`6@}gR%uzqHDVeEZ14{Yt?n%JeQm+t(1_u zSc}oj^{b;+rlS|ME%+LjzSI&xu0Bblxo$MJ-J$kJ?Qu_XUXh}*@*-x@ny|}wVM%Lg z3tNB`yvr*}N?ClGL;H2cglcvErIccU3(eP7>@~4nOIcI~-`P8tSQnx=jI&{9)!1}l z;gQ%_h>ZlPSV@o@Azq1R$C6ja5!^ZGh;YRhhxs58qJWo9@Bceac&yy(pET1hnn`~7@}2L0&dfPKYs$ih7m2}R!25!(hxqA(!UIw; zK4+~Jowy3=RNC6nE=ncU{LH5?*9@W24lacJlvCZXB$CYtE@>c+~H zkV=(5I&gb{xn2!~f&fs2NQgAL6`p|kyt6kpWk}iVlqIp(H;ig`{_U9yxs1jzu^ETM z7~)Rg8C-NueqTYP&U8l{DY=Y47cR zOR@U%$KQV{mkRF|4)z9Y^t3K`@p>duY&QLUFeh6VoV`a`$U@)(z!-N*5Cj<11$EZW&hJLX83TO{lJYP74rlDZQPkm@t<=U^I)x@|UnHHkdQlh?!ltZwl92rE;;^ zZuIappj4dhld1}kttYYV-j|KF1Kus zWBnzttD^00%LFK(wrwNragFub6xiV8QE2rm<`&fcR4SLFcdtLxVuN!Aal-g6dE4%k zARZ}|xeo;K{0yf7@9aua%2j5o)CPcIOc6uLHFJOcgtB5owlcNAwyAHc0QB0Dts?c@ zUemG~j_E&W7R%+x-IO4FJl8e&*2Blmp1S#RA|)geVrxvP)NHdYuxi~g&Etn?QdNK8ZDKZ?QFLU?zh30G|t9G>a_X4zk}Ygw<^$7K!GIn(Io$>(d4ODJQ2XSd%jpK zm7>ptl$a3GyB}5-%p4>Q*p#VL^B{yQMuFCM^#l#+N!Ne z5_PrJWB=@Iy+t)H`g1lX`{bm($KE5I?0c(JEYm#t{F}j!xtsbob0{xu@0TB_*>G7w0ICn zr#VoBktqHZ~XxhiKD*lcG|b;H*|Ny3P^8ceV`sfBRfrhwZ!T+MFZ!F1Bt{q$8d9i6o?~ zODj^POr}&ivSa^R^YFIq7o0giLBKCycH_aU`F6)O6JX%nPTwh~Q`eq6*0iE#Srj2^ z*_hN3%*b83zfafy60@Cp3{J({RlSaEn&E?mrxRNC9GQ7#+f=s! z0KBf-9Ny_v2VbE%aB|Di)5kNJ^t&C`4D(>t7zYUWUFtbxt+Oq=!@O7BU)}>d*R72o zFF)3jQD_lLe4is&xzyJYC1-c{8TX$RU>&>P$%)ufpez0XSAukmh!xcekg`s$c<>-q zI#zn^JU0zzF}V60)o$_gY}PQH>b2M9&8fRZa#OauglPb zeQ@pMm&=!vNgos4CluQjLMV!pfkmxK+35bi^k&=k>9h02?l+u+m0agG;(h2|Jslc-llvtEwn~*w3bx7qnvZACG<8}AGeaDVvcHbKd2>3G^ zSFPULUn-?Pmo^-_`mLZr??uNH`2=I&yajlrF{DtUxMy#Nu}z=3y7qbUA;5`)hibMR zhXL@@uKyV0-2&A@t@!xyrBnMJl&^o@Gx$&5_q6?D=ji5grd-~=?dlg;ur(_V0wjh! zA=JV^C1m+DDkOsgr<%O9ZQFg!0}pD(#PSz4Dr_EyS5$`)VIAv);4n-SFP~YtC7sH= z7&*MfpH;gd*FHbkmD#)hVxb6xjc9~`t?_{=JS+@ip_cTicXxG<=7m9& zPX+Z8IC*GSAXuGCrZDHgR$r%jyk-fctis2Kx4HvZ|B~8uC@o)m^>Hy-O!&TKA?$&n zkP2Xc54w~!=z2?^NafyL*L0V9cbYrugHBBUj`xVyZmGFR&kvk#>1J*Z~i zNTz}?IAdJ$gkqd2!Gw(%LzE!O5s4C7q4%T~e_P{+z=DNDKrG**p=U`d5yg^vp`;Zn zsU=8gd0a9s4s0FPJePWR9eH5=+O^Kks&kC-iblNqTh2&Pw*^(4384f+D8N|fewZu_ zg2ejQ)ov;ztz;NQl7yj;A`(!H!XQu_$sqY9h_IrH*}_%1{L&_YLDvO?%R5Z-t+ClW z_qERbL?HKUZ!nt+!E9S`uoh^5A|DaIHe*_gf1`E_Vq+}{&T@t$EGhMnRjJ4z2w_W8 zp+qjs7as22^&S3wY1?+}^j-I=RcCE>#|39)g(lU7v_8;?=qK(9D8-*pPdiy)P3lIblG`+?%ea| zYoD3dopYt!tKgFicfNmNi(EWE=E4hC6(r|PYtanqJlmt57YOVrr2^tfrG(eG9C##X zu&1t@%L$RIvpj!wUA z8i>Pqot#_+Cnp6L2XPcZy1ar|9MnY+7eNvK1E)@Tr#2KsXq1*>)uUCozT7L##ok?o zhA6ofP4E|b*9tAfG?uf$#}>TIR&1A!yslP8}i7w-EzW(x#9VEvx18k%Tn=-$VV zkOtUr0b2!w3t>h?#8AZl^Az*(6KCGlD;4j~yx};`#2gN1_gv=%7KVzecIRakN{f*4 zeaI>yH;-o4OGhvGTU)(quWI)-q?V*(sVesSMv|wMUQ3hLEt=lBB$KZ9TyHr>)f7o%) zPYeU<3P)*P10*7vE)nA5#{c=6-E-_>r_u4e3i!I2+UksELwDqwMeBZ9FSP$;^Ajro z_@M#_Ss$?ejoB@!wN|kbGKs(0zLo%0QpQXW#t;oC$B0MZYZ&Ej?8~fNhcCVvPo3vo zFn0WWZaPliF^8_}yzb`*f@yg0uWv6HgNI)xa=pO%Ck(C<=-60l#uD3(wXP~c7!NoX z0&^6=N`zcc90F#qt@=Rn@r!3(*1v(Tl{B!m?Mc7yIA+nEHpY{YWr$=)F7rhR1P}(v zt{YhY#;jsW6G>#xhP*B`OCk|Pf+NN;ju1rxa*HAgoGq*rvqw&xe~;t1JA31$s?GBb z*g7&@cbKo4n<`>)!UlIAgR6q&))B0KYU8r66GbFj?8Guw4E%&}Qi_lT003LtoIZei zwD~=XZmeo+yZ2Pq3KYCF-R&11^p= z@H%s+=G`}wrbJ{()Mh71#2SP3Zy3m>l1n?0N-N1Q;z6?oSxr-G(H5m4EO>~&;}VKi zfY}3w+9z>vp#d)hVuu`)vG_aaH%3b=WKMnSu&c31;<3O;bz2iD=w+o4#oBb36 z5ZCF*Gu?zjZIR0S>_%pHY2$k8D^n7Sz_K8tCDeXM+dO<#LSg%h6`~dnVG1N@T7v&e z%wEd1!k{^zfz_1BTW{!$!B%g)J^2b87!9Y>>100X1SgT7s0z$o>^lAA=Gp_cC1(h=*5Tmf8z&LGJJ>$|K^~s`z9*OWz5MFUr?>Bi?_PGBB)#psD5?>n+q{o_ zz7~ez&;t#h8l$jwGPCC&xq2YetXYQT+0F3j(`xmNGf8dj#an|p#I*pvI*kwW4iuB> z+q3_7xB8y;pLzHG-S%+UHQA zvqp;$kmGJY>lLsN4C~&TcvAS1SErTcwcw0r@wngk zShAUA1M9b#g}^pL-zH7Q#z^&j#r9F8BTVfkR&qF<=e35goTu7c|GN)0mokj4m0%~0 zXJ8j4Hc_l;HJ&uU*Iw`8d_EscJ``s0tk9mkKo^&#TYXm-EoAzTQObxa@^u~g2t#T) zJz|rE!I_?i4dCJC=B8(_pZ{YR>|V?0iCcnU;E@$239^x?SYCfNaMHN;CtHIS_zHN9 zTkQc1v@O35okiFtq5_u+5FkY55ap@pi)O?}x0D1c*qB0KpYR}>Ul+B0Vmr}Z@+%mJ|As}sis_=ROPbov@*2thpE&?!V#Qgu$snYvCZ zrkhmkMU+fSf-s8(L37fPr&M*jRs{{THb!aXQu|P9l_-vJhHvLzMGH zE?1U0H_+PmNABp9`|KzkGfrrZ%XvdGo6*<{d5m9~L7 z_^`M;X6xDo=m6LY6RfvJEvsTK1!u8d2HPx|$S}p;sRy!I zWL55Yxu~_B`OP@~(q6&W3#)~I&+MGL%GWR$#udC151^wsswhqlii;rP9jJpiI7o&Z zAb})=HY7?4HA|re3ns`%$)FuvKCFWjhb~?IE)F6dF2K5}poj-NK6Gf;hw$t3=1txY zoxQxZWrQU6K!%|~!m?~Bnw-6Rr!F3BZ{u5!LqnZTDON}Coj9^@&le)V!NYrVwS~B% zEL+>Sr@}qGwGvu|HrOo|gSt__ezN^&%~{*)a=rf7y1HujUcr`zZB<4#l@T#eN)si} z)lZA<{=tKx8E%c9>A(##6}_p+~EZpKsl5a4pj`E*;_-6`ysiv zffA!7=MT1vCz}-m4~tjVey1b2KSR4OEtLd-(_DdUqYZ74LaDkhH?KFh?%WAOP2WbX zp@zT+Dx|5_f%JQiAGvVw!oh+g3e50u!aPfMxdC=E)XB{F5IcEZhePIM- zph6Y`$Oy?JBL<8Ex(SqEhLeQ@XcrdA>a?rx+_~HLA;l14)WmmpH}_w?Pg#HBZs0eS zwypwAW?M-x+3AU-(GGWSJ=ngxUEcEZ5OsX(Qlt!MQ zn^(`S{GHkAv(8@D`EAfSYig%Cxv?z!{=w^F#y)5_d7FuKZH7qlR-#5B0bt806%D0I zT7VdVP_?q*%Rq8UR;JkD4i^RXowt+E%#V2U>TfDqzZSDZ+dR!a#T3I>-z_$q9@k|m zy5~A*m~&JWP@E7a=pc}4kVHTc4h&R;Li7d@f`|hKMLkbb^uhOakNr3&FLjlm~i5NBM< zFaYI{;cpiHCNRdE0dg*>qIm(_t?#$h=(SCw?h3rJV2*ER8{O4^3#=dO)KwklZkoqU zS8i5c%YL*y*4;FY#D=XmkQnYj%LH)?02~gSJH`Qp1XY64g>%c_K$xseI&|e)7vRoL zAqRba$G@%fSGA7X7hQk%_3NVOYVS+$leU_!&6*5uN)8#5ZBz_6ASCA;azYS-Rt@ki zg2NWz(=;t}SC(~Ibl63$5C8FPmhXqb^)5#jaJ~I{Ex3xZ!+2h8$}}h_g@Be>HZ;72 z6#y#>AY3^skuVKF#0WxFBQ()5d5_nWb?c6c>EeMM|Mh+*&wEpPyxHCq{R-Gdr-`hN zF=1sxl&mBoK+#qRLl9#CEN|Fg8>nbmsTg3a1;#M9enQ$RgWk}kp#-5wh=EF&1tl%mJln2V^8o%Qv(*=zEuO7y z=m*8?xpUn-*@h5Cl_3BK3joiGkyaScK+>|MWdMRWm@RT!Q1piAlv5hL@B6>3&GI8) zP!xBc6}ZNIpJLL%2a8Y!+(<=f%WX>_uWVxlga9!D*oYt$l0cxRDMvqfU;Kq_mLK5k z)dvqYcgLa_Lz?3HyeF)@$%$&6lI?r4I>6W#M*<)vq{?&Oqrx``d`mhpVPr> z#q078F6gw_X<=?KR>8%^t%@wbITvNMu!hKiTSkCTJkw>1!e*Y{%31#_yMf=LW7{RJ zYoC^w$6%3cBtVG5)x#{Hg6IVTh9XEcM{gQwXk!R^y95^f-hZ`d{aVa+xW1EO4wDV4 zB?JgD7*?qkvc|$nIykTvNl2x0j3Q!MXoLL^)~}d7jcYf(H8D~c+?$pKL(px>Z3`eb z04RzS6_AgFT6Pn#iZAg$Sl_j8#;6ShF%&(Fag#E2asU@@LaN;=b=Wf7sgPKhfzhBM zC@eFL8^MrnA*9&Khe*Ab@CC9*uyJGXyi(;y2>lQLJZt;ShtJi?3Yf_t`F+$hY!+Q2Ndsx=U+bjTiAy7djLji>7k%k`$9&--f<*BNA3Hy&ZrHH|4 zG5H&9cB?O#zI1_OOf0Ce%mDfQxdtp3vU%(iY6yji3iISS61XLv#z|!zI_sZqza@B+ zyu9st5-h+`H7QUKx9}3w@oU@EO}&cEzG?fu!!bLO->%zkcg;i9^j`S~=WKMnDi1f= P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/src/assets/solid.svg b/src/assets/solid.svg new file mode 100644 index 0000000..025aa30 --- /dev/null +++ b/src/assets/solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/client/core/ApiError.ts b/src/client/core/ApiError.ts new file mode 100644 index 0000000..aa8765c --- /dev/null +++ b/src/client/core/ApiError.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiRequestOptions } from './ApiRequestOptions'; +import type { ApiResult } from './ApiResult'; + +export class ApiError extends Error { + public readonly url: string; + public readonly status: number; + public readonly statusText: string; + public readonly body: any; + public readonly request: ApiRequestOptions; + + constructor(request: ApiRequestOptions, response: ApiResult, message: string) { + super(message); + + this.name = 'ApiError'; + this.url = response.url; + this.status = response.status; + this.statusText = response.statusText; + this.body = response.body; + this.request = request; + } +} diff --git a/src/client/core/ApiRequestOptions.ts b/src/client/core/ApiRequestOptions.ts new file mode 100644 index 0000000..4ab55de --- /dev/null +++ b/src/client/core/ApiRequestOptions.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiRequestOptions = { + readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; + readonly url: string; + readonly path?: Record; + readonly cookies?: Record; + readonly headers?: Record; + readonly query?: Record; + readonly formData?: Record; + readonly body?: any; + readonly mediaType?: string; + readonly responseHeader?: string; + readonly errors?: Record; +}; diff --git a/src/client/core/ApiResult.ts b/src/client/core/ApiResult.ts new file mode 100644 index 0000000..26ddfde --- /dev/null +++ b/src/client/core/ApiResult.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResult = { + readonly url: string; + readonly ok: boolean; + readonly status: number; + readonly statusText: string; + readonly body: any; +}; diff --git a/src/client/core/CancelablePromise.ts b/src/client/core/CancelablePromise.ts new file mode 100644 index 0000000..0cf7e4c --- /dev/null +++ b/src/client/core/CancelablePromise.ts @@ -0,0 +1,131 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export class CancelError extends Error { + + constructor(message: string) { + super(message); + this.name = 'CancelError'; + } + + public get isCancelled(): boolean { + return true; + } +} + +export interface OnCancel { + readonly isResolved: boolean; + readonly isRejected: boolean; + readonly isCancelled: boolean; + + (cancelHandler: () => void): void; +} + +export class CancelablePromise implements Promise { + #isResolved: boolean; + #isRejected: boolean; + #isCancelled: boolean; + readonly #cancelHandlers: (() => void)[]; + readonly #promise: Promise; + #resolve?: (value: T | PromiseLike) => void; + #reject?: (reason?: any) => void; + + constructor( + executor: ( + resolve: (value: T | PromiseLike) => void, + reject: (reason?: any) => void, + onCancel: OnCancel + ) => void + ) { + this.#isResolved = false; + this.#isRejected = false; + this.#isCancelled = false; + this.#cancelHandlers = []; + this.#promise = new Promise((resolve, reject) => { + this.#resolve = resolve; + this.#reject = reject; + + const onResolve = (value: T | PromiseLike): void => { + if (this.#isResolved || this.#isRejected || this.#isCancelled) { + return; + } + this.#isResolved = true; + if (this.#resolve) this.#resolve(value); + }; + + const onReject = (reason?: any): void => { + if (this.#isResolved || this.#isRejected || this.#isCancelled) { + return; + } + this.#isRejected = true; + if (this.#reject) this.#reject(reason); + }; + + const onCancel = (cancelHandler: () => void): void => { + if (this.#isResolved || this.#isRejected || this.#isCancelled) { + return; + } + this.#cancelHandlers.push(cancelHandler); + }; + + Object.defineProperty(onCancel, 'isResolved', { + get: (): boolean => this.#isResolved, + }); + + Object.defineProperty(onCancel, 'isRejected', { + get: (): boolean => this.#isRejected, + }); + + Object.defineProperty(onCancel, 'isCancelled', { + get: (): boolean => this.#isCancelled, + }); + + return executor(onResolve, onReject, onCancel as OnCancel); + }); + } + + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } + + public then( + onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onRejected?: ((reason: any) => TResult2 | PromiseLike) | null + ): Promise { + return this.#promise.then(onFulfilled, onRejected); + } + + public catch( + onRejected?: ((reason: any) => TResult | PromiseLike) | null + ): Promise { + return this.#promise.catch(onRejected); + } + + public finally(onFinally?: (() => void) | null): Promise { + return this.#promise.finally(onFinally); + } + + public cancel(): void { + if (this.#isResolved || this.#isRejected || this.#isCancelled) { + return; + } + this.#isCancelled = true; + if (this.#cancelHandlers.length) { + try { + for (const cancelHandler of this.#cancelHandlers) { + cancelHandler(); + } + } catch (error) { + console.warn('Cancellation threw an error', error); + return; + } + } + this.#cancelHandlers.length = 0; + if (this.#reject) this.#reject(new CancelError('Request aborted')); + } + + public get isCancelled(): boolean { + return this.#isCancelled; + } +} diff --git a/src/client/core/OpenAPI.ts b/src/client/core/OpenAPI.ts new file mode 100644 index 0000000..b7eb3f6 --- /dev/null +++ b/src/client/core/OpenAPI.ts @@ -0,0 +1,32 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiRequestOptions } from './ApiRequestOptions'; + +type Resolver = (options: ApiRequestOptions) => Promise; +type Headers = Record; + +export type OpenAPIConfig = { + BASE: string; + VERSION: string; + WITH_CREDENTIALS: boolean; + CREDENTIALS: 'include' | 'omit' | 'same-origin'; + TOKEN?: string | Resolver | undefined; + USERNAME?: string | Resolver | undefined; + PASSWORD?: string | Resolver | undefined; + HEADERS?: Headers | Resolver | undefined; + ENCODE_PATH?: ((path: string) => string) | undefined; +}; + +export const OpenAPI: OpenAPIConfig = { + BASE: '', + VERSION: '0.1.0', + WITH_CREDENTIALS: true, + CREDENTIALS: 'include', + TOKEN: undefined, + USERNAME: undefined, + PASSWORD: undefined, + HEADERS: undefined, + ENCODE_PATH: undefined, +}; diff --git a/src/client/core/request.ts b/src/client/core/request.ts new file mode 100644 index 0000000..87d01a9 --- /dev/null +++ b/src/client/core/request.ts @@ -0,0 +1,323 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import axios from 'axios'; +import type { AxiosError, AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios'; +import FormData from 'form-data'; + +import { ApiError } from './ApiError'; +import type { ApiRequestOptions } from './ApiRequestOptions'; +import type { ApiResult } from './ApiResult'; +import { CancelablePromise } from './CancelablePromise'; +import type { OnCancel } from './CancelablePromise'; +import type { OpenAPIConfig } from './OpenAPI'; + +export const isDefined = (value: T | null | undefined): value is Exclude => { + return value !== undefined && value !== null; +}; + +export const isString = (value: any): value is string => { + return typeof value === 'string'; +}; + +export const isStringWithValue = (value: any): value is string => { + return isString(value) && value !== ''; +}; + +export const isBlob = (value: any): value is Blob => { + return ( + typeof value === 'object' && + typeof value.type === 'string' && + typeof value.stream === 'function' && + typeof value.arrayBuffer === 'function' && + typeof value.constructor === 'function' && + typeof value.constructor.name === 'string' && + /^(Blob|File)$/.test(value.constructor.name) && + /^(Blob|File)$/.test(value[Symbol.toStringTag]) + ); +}; + +export const isFormData = (value: any): value is FormData => { + return value instanceof FormData; +}; + +export const isSuccess = (status: number): boolean => { + return status >= 200 && status < 300; +}; + +export const base64 = (str: string): string => { + try { + return btoa(str); + } catch (err) { + // @ts-ignore + return Buffer.from(str).toString('base64'); + } +}; + +export const getQueryString = (params: Record): string => { + const qs: string[] = []; + + const append = (key: string, value: any) => { + qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + }; + + const process = (key: string, value: any) => { + if (isDefined(value)) { + if (Array.isArray(value)) { + value.forEach(v => { + process(key, v); + }); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => { + process(`${key}[${k}]`, v); + }); + } else { + append(key, value); + } + } + }; + + Object.entries(params).forEach(([key, value]) => { + process(key, value); + }); + + if (qs.length > 0) { + return `?${qs.join('&')}`; + } + + return ''; +}; + +const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => { + const encoder = config.ENCODE_PATH || encodeURI; + + const path = options.url + .replace('{api-version}', config.VERSION) + .replace(/{(.*?)}/g, (substring: string, group: string) => { + if (options.path?.hasOwnProperty(group)) { + return encoder(String(options.path[group])); + } + return substring; + }); + + const url = `${config.BASE}${path}`; + if (options.query) { + return `${url}${getQueryString(options.query)}`; + } + return url; +}; + +export const getFormData = (options: ApiRequestOptions): FormData | undefined => { + if (options.formData) { + const formData = new FormData(); + + const process = (key: string, value: any) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; + + Object.entries(options.formData) + .filter(([_, value]) => isDefined(value)) + .forEach(([key, value]) => { + if (Array.isArray(value)) { + value.forEach(v => process(key, v)); + } else { + process(key, value); + } + }); + + return formData; + } + return undefined; +}; + +type Resolver = (options: ApiRequestOptions) => Promise; + +export const resolve = async (options: ApiRequestOptions, resolver?: T | Resolver): Promise => { + if (typeof resolver === 'function') { + return (resolver as Resolver)(options); + } + return resolver; +}; + +export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions, formData?: FormData): Promise> => { + const [token, username, password, additionalHeaders] = await Promise.all([ + resolve(options, config.TOKEN), + resolve(options, config.USERNAME), + resolve(options, config.PASSWORD), + resolve(options, config.HEADERS), + ]); + + const formHeaders = typeof formData?.getHeaders === 'function' && formData?.getHeaders() || {} + + const headers = Object.entries({ + Accept: 'application/json', + ...additionalHeaders, + ...options.headers, + ...formHeaders, + }) + .filter(([_, value]) => isDefined(value)) + .reduce((headers, [key, value]) => ({ + ...headers, + [key]: String(value), + }), {} as Record); + + if (isStringWithValue(token)) { + headers['Authorization'] = `Bearer ${token}`; + } + + if (isStringWithValue(username) && isStringWithValue(password)) { + const credentials = base64(`${username}:${password}`); + headers['Authorization'] = `Basic ${credentials}`; + } + + if (options.body !== undefined) { + if (options.mediaType) { + headers['Content-Type'] = options.mediaType; + } else if (isBlob(options.body)) { + headers['Content-Type'] = options.body.type || 'application/octet-stream'; + } else if (isString(options.body)) { + headers['Content-Type'] = 'text/plain'; + } else if (!isFormData(options.body)) { + headers['Content-Type'] = 'application/json'; + } + } + + return headers; +}; + +export const getRequestBody = (options: ApiRequestOptions): any => { + if (options.body) { + return options.body; + } + return undefined; +}; + +export const sendRequest = async ( + config: OpenAPIConfig, + options: ApiRequestOptions, + url: string, + body: any, + formData: FormData | undefined, + headers: Record, + onCancel: OnCancel, + axiosClient: AxiosInstance +): Promise> => { + const source = axios.CancelToken.source(); + + const requestConfig: AxiosRequestConfig = { + url, + headers, + data: body ?? formData, + method: options.method, + withCredentials: config.WITH_CREDENTIALS, + withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false, + cancelToken: source.token, + }; + + onCancel(() => source.cancel('The user aborted a request.')); + + try { + return await axiosClient.request(requestConfig); + } catch (error) { + const axiosError = error as AxiosError; + if (axiosError.response) { + return axiosError.response; + } + throw error; + } +}; + +export const getResponseHeader = (response: AxiosResponse, responseHeader?: string): string | undefined => { + if (responseHeader) { + const content = response.headers[responseHeader]; + if (isString(content)) { + return content; + } + } + return undefined; +}; + +export const getResponseBody = (response: AxiosResponse): any => { + if (response.status !== 204) { + return response.data; + } + return undefined; +}; + +export const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => { + const errors: Record = { + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: 'Internal Server Error', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + ...options.errors, + } + + const error = errors[result.status]; + if (error) { + throw new ApiError(options, result, error); + } + + if (!result.ok) { + const errorStatus = result.status ?? 'unknown'; + const errorStatusText = result.statusText ?? 'unknown'; + const errorBody = (() => { + try { + return JSON.stringify(result.body, null, 2); + } catch (e) { + return undefined; + } + })(); + + throw new ApiError(options, result, + `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}` + ); + } +}; + +/** + * Request method + * @param config The OpenAPI configuration object + * @param options The request options from the service + * @param axiosClient The axios client instance to use + * @returns CancelablePromise + * @throws ApiError + */ +export const request = (config: OpenAPIConfig, options: ApiRequestOptions, axiosClient: AxiosInstance = axios): CancelablePromise => { + return new CancelablePromise(async (resolve, reject, onCancel) => { + try { + const url = getUrl(config, options); + const formData = getFormData(options); + const body = getRequestBody(options); + const headers = await getHeaders(config, options, formData); + + if (!onCancel.isCancelled) { + const response = await sendRequest(config, options, url, body, formData, headers, onCancel, axiosClient); + const responseBody = getResponseBody(response); + const responseHeader = getResponseHeader(response, options.responseHeader); + + const result: ApiResult = { + url, + ok: isSuccess(response.status), + status: response.status, + statusText: response.statusText, + body: responseHeader ?? responseBody, + }; + + catchErrorCodes(options, result); + + resolve(result.body); + } + } catch (error) { + reject(error); + } + }); +}; diff --git a/src/client/index.ts b/src/client/index.ts new file mode 100644 index 0000000..e2420d2 --- /dev/null +++ b/src/client/index.ts @@ -0,0 +1,678 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export { ApiError } from './core/ApiError'; +export { CancelablePromise, CancelError } from './core/CancelablePromise'; +export { OpenAPI } from './core/OpenAPI'; +export type { OpenAPIConfig } from './core/OpenAPI'; + +export type { AcceptInvitationParams } from './models/AcceptInvitationParams'; +export type { AcceptInvitationRequest } from './models/AcceptInvitationRequest'; +export type { AddDeployKeyParams } from './models/AddDeployKeyParams'; +export type { AddDomainParams } from './models/AddDomainParams'; +export type { AddGpgKeyParams } from './models/AddGpgKeyParams'; +export type { AddMemberParams } from './models/AddMemberParams'; +export type { AddReplyParams } from './models/AddReplyParams'; +export type { AddRepoMemberParams } from './models/AddRepoMemberParams'; +export type { AddSshKeyParams } from './models/AddSshKeyParams'; +export type { ApiEmptyResponse } from './models/ApiEmptyResponse'; +export type { ApiErrorResponse } from './models/ApiErrorResponse'; +export type { ApiResponse_BranchMergeCheck } from './models/ApiResponse_BranchMergeCheck'; +export type { ApiResponse_BranchProtectionRule } from './models/ApiResponse_BranchProtectionRule'; +export type { ApiResponse_CaptchaResponse } from './models/ApiResponse_CaptchaResponse'; +export type { ApiResponse_ContextMe } from './models/ApiResponse_ContextMe'; +export type { ApiResponse_CreateInvitationResponse } from './models/ApiResponse_CreateInvitationResponse'; +export type { ApiResponse_EmailResponse } from './models/ApiResponse_EmailResponse'; +export type { ApiResponse_Enable2FAResponse } from './models/ApiResponse_Enable2FAResponse'; +export type { ApiResponse_Get2FAStatusResponse } from './models/ApiResponse_Get2FAStatusResponse'; +export type { ApiResponse_Issue } from './models/ApiResponse_Issue'; +export type { ApiResponse_IssueAssignee } from './models/ApiResponse_IssueAssignee'; +export type { ApiResponse_IssueComment } from './models/ApiResponse_IssueComment'; +export type { ApiResponse_IssueEvent } from './models/ApiResponse_IssueEvent'; +export type { ApiResponse_IssueLabel } from './models/ApiResponse_IssueLabel'; +export type { ApiResponse_IssueLabelRelation } from './models/ApiResponse_IssueLabelRelation'; +export type { ApiResponse_IssueMilestone } from './models/ApiResponse_IssueMilestone'; +export type { ApiResponse_IssuePrRelation } from './models/ApiResponse_IssuePrRelation'; +export type { ApiResponse_IssueReaction } from './models/ApiResponse_IssueReaction'; +export type { ApiResponse_IssueRepoRelation } from './models/ApiResponse_IssueRepoRelation'; +export type { ApiResponse_IssueSubscriber } from './models/ApiResponse_IssueSubscriber'; +export type { ApiResponse_IssueTemplate } from './models/ApiResponse_IssueTemplate'; +export type { ApiResponse_Option_BranchProtectionRule } from './models/ApiResponse_Option_BranchProtectionRule'; +export type { ApiResponse_PrAssignee } from './models/ApiResponse_PrAssignee'; +export type { ApiResponse_PrCheckRun } from './models/ApiResponse_PrCheckRun'; +export type { ApiResponse_PrCommit } from './models/ApiResponse_PrCommit'; +export type { ApiResponse_PrEvent } from './models/ApiResponse_PrEvent'; +export type { ApiResponse_PrFile } from './models/ApiResponse_PrFile'; +export type { ApiResponse_PrLabel } from './models/ApiResponse_PrLabel'; +export type { ApiResponse_PrLabelRelation } from './models/ApiResponse_PrLabelRelation'; +export type { ApiResponse_PrMergeStrategy } from './models/ApiResponse_PrMergeStrategy'; +export type { ApiResponse_PrReaction } from './models/ApiResponse_PrReaction'; +export type { ApiResponse_PrReview } from './models/ApiResponse_PrReview'; +export type { ApiResponse_PrReviewComment } from './models/ApiResponse_PrReviewComment'; +export type { ApiResponse_PrStatus } from './models/ApiResponse_PrStatus'; +export type { ApiResponse_PrSubscription } from './models/ApiResponse_PrSubscription'; +export type { ApiResponse_PullRequest } from './models/ApiResponse_PullRequest'; +export type { ApiResponse_Regenerate2FABackupCodesResponse } from './models/ApiResponse_Regenerate2FABackupCodesResponse'; +export type { ApiResponse_RegisterEmailCodeResponse } from './models/ApiResponse_RegisterEmailCodeResponse'; +export type { ApiResponse_RegisterResponse } from './models/ApiResponse_RegisterResponse'; +export type { ApiResponse_Repo } from './models/ApiResponse_Repo'; +export type { ApiResponse_RepoBranch } from './models/ApiResponse_RepoBranch'; +export type { ApiResponse_RepoCommitComment } from './models/ApiResponse_RepoCommitComment'; +export type { ApiResponse_RepoCommitStatus } from './models/ApiResponse_RepoCommitStatus'; +export type { ApiResponse_RepoDeployKey } from './models/ApiResponse_RepoDeployKey'; +export type { ApiResponse_RepoFork } from './models/ApiResponse_RepoFork'; +export type { ApiResponse_RepoInvitation } from './models/ApiResponse_RepoInvitation'; +export type { ApiResponse_RepoMember } from './models/ApiResponse_RepoMember'; +export type { ApiResponse_RepoRelease } from './models/ApiResponse_RepoRelease'; +export type { ApiResponse_RepoStar } from './models/ApiResponse_RepoStar'; +export type { ApiResponse_RepoStats } from './models/ApiResponse_RepoStats'; +export type { ApiResponse_RepoTag } from './models/ApiResponse_RepoTag'; +export type { ApiResponse_RepoWatch } from './models/ApiResponse_RepoWatch'; +export type { ApiResponse_RepoWebhook } from './models/ApiResponse_RepoWebhook'; +export type { ApiResponse_RsaResponse } from './models/ApiResponse_RsaResponse'; +export type { ApiResponse_String } from './models/ApiResponse_String'; +export type { ApiResponse_User } from './models/ApiResponse_User'; +export type { ApiResponse_UserAppearance } from './models/ApiResponse_UserAppearance'; +export type { ApiResponse_UserAvatarResponse } from './models/ApiResponse_UserAvatarResponse'; +export type { ApiResponse_UserDevice } from './models/ApiResponse_UserDevice'; +export type { ApiResponse_UserGpgKey } from './models/ApiResponse_UserGpgKey'; +export type { ApiResponse_UserNotifySetting } from './models/ApiResponse_UserNotifySetting'; +export type { ApiResponse_UserOAuthInfo } from './models/ApiResponse_UserOAuthInfo'; +export type { ApiResponse_UserPersonalAccessTokenInfo } from './models/ApiResponse_UserPersonalAccessTokenInfo'; +export type { ApiResponse_UserProfile } from './models/ApiResponse_UserProfile'; +export type { ApiResponse_UserSecurityLog } from './models/ApiResponse_UserSecurityLog'; +export type { ApiResponse_UserSessionInfo } from './models/ApiResponse_UserSessionInfo'; +export type { ApiResponse_UserSshKey } from './models/ApiResponse_UserSshKey'; +export type { ApiResponse_Vec_BranchProtectionRule } from './models/ApiResponse_Vec_BranchProtectionRule'; +export type { ApiResponse_Vec_Issue } from './models/ApiResponse_Vec_Issue'; +export type { ApiResponse_Vec_IssueAssignee } from './models/ApiResponse_Vec_IssueAssignee'; +export type { ApiResponse_Vec_IssueComment } from './models/ApiResponse_Vec_IssueComment'; +export type { ApiResponse_Vec_IssueEvent } from './models/ApiResponse_Vec_IssueEvent'; +export type { ApiResponse_Vec_IssueLabel } from './models/ApiResponse_Vec_IssueLabel'; +export type { ApiResponse_Vec_IssueLabelRelation } from './models/ApiResponse_Vec_IssueLabelRelation'; +export type { ApiResponse_Vec_IssueMilestone } from './models/ApiResponse_Vec_IssueMilestone'; +export type { ApiResponse_Vec_IssuePrRelation } from './models/ApiResponse_Vec_IssuePrRelation'; +export type { ApiResponse_Vec_IssueReaction } from './models/ApiResponse_Vec_IssueReaction'; +export type { ApiResponse_Vec_IssueRepoRelation } from './models/ApiResponse_Vec_IssueRepoRelation'; +export type { ApiResponse_Vec_IssueSubscriber } from './models/ApiResponse_Vec_IssueSubscriber'; +export type { ApiResponse_Vec_IssueTemplate } from './models/ApiResponse_Vec_IssueTemplate'; +export type { ApiResponse_Vec_PrAssignee } from './models/ApiResponse_Vec_PrAssignee'; +export type { ApiResponse_Vec_PrCheckRun } from './models/ApiResponse_Vec_PrCheckRun'; +export type { ApiResponse_Vec_PrCommit } from './models/ApiResponse_Vec_PrCommit'; +export type { ApiResponse_Vec_PrEvent } from './models/ApiResponse_Vec_PrEvent'; +export type { ApiResponse_Vec_PrFile } from './models/ApiResponse_Vec_PrFile'; +export type { ApiResponse_Vec_PrLabel } from './models/ApiResponse_Vec_PrLabel'; +export type { ApiResponse_Vec_PrLabelRelation } from './models/ApiResponse_Vec_PrLabelRelation'; +export type { ApiResponse_Vec_PrReaction } from './models/ApiResponse_Vec_PrReaction'; +export type { ApiResponse_Vec_PrReview } from './models/ApiResponse_Vec_PrReview'; +export type { ApiResponse_Vec_PrReviewComment } from './models/ApiResponse_Vec_PrReviewComment'; +export type { ApiResponse_Vec_PrSubscription } from './models/ApiResponse_Vec_PrSubscription'; +export type { ApiResponse_Vec_PullRequest } from './models/ApiResponse_Vec_PullRequest'; +export type { ApiResponse_Vec_Repo } from './models/ApiResponse_Vec_Repo'; +export type { ApiResponse_Vec_RepoBranch } from './models/ApiResponse_Vec_RepoBranch'; +export type { ApiResponse_Vec_RepoCommitComment } from './models/ApiResponse_Vec_RepoCommitComment'; +export type { ApiResponse_Vec_RepoCommitStatus } from './models/ApiResponse_Vec_RepoCommitStatus'; +export type { ApiResponse_Vec_RepoDeployKey } from './models/ApiResponse_Vec_RepoDeployKey'; +export type { ApiResponse_Vec_RepoFork } from './models/ApiResponse_Vec_RepoFork'; +export type { ApiResponse_Vec_RepoInvitation } from './models/ApiResponse_Vec_RepoInvitation'; +export type { ApiResponse_Vec_RepoMember } from './models/ApiResponse_Vec_RepoMember'; +export type { ApiResponse_Vec_RepoRelease } from './models/ApiResponse_Vec_RepoRelease'; +export type { ApiResponse_Vec_RepoStar } from './models/ApiResponse_Vec_RepoStar'; +export type { ApiResponse_Vec_RepoTag } from './models/ApiResponse_Vec_RepoTag'; +export type { ApiResponse_Vec_RepoWatch } from './models/ApiResponse_Vec_RepoWatch'; +export type { ApiResponse_Vec_RepoWebhook } from './models/ApiResponse_Vec_RepoWebhook'; +export type { ApiResponse_Vec_UserDevice } from './models/ApiResponse_Vec_UserDevice'; +export type { ApiResponse_Vec_UserGpgKey } from './models/ApiResponse_Vec_UserGpgKey'; +export type { ApiResponse_Vec_UserOAuthInfo } from './models/ApiResponse_Vec_UserOAuthInfo'; +export type { ApiResponse_Vec_UserPersonalAccessTokenInfo } from './models/ApiResponse_Vec_UserPersonalAccessTokenInfo'; +export type { ApiResponse_Vec_UserSecurityLog } from './models/ApiResponse_Vec_UserSecurityLog'; +export type { ApiResponse_Vec_UserSessionInfo } from './models/ApiResponse_Vec_UserSessionInfo'; +export type { ApiResponse_Vec_UserSshKey } from './models/ApiResponse_Vec_UserSshKey'; +export type { ApiResponse_Vec_WikiPage } from './models/ApiResponse_Vec_WikiPage'; +export type { ApiResponse_Vec_WikiPageRevision } from './models/ApiResponse_Vec_WikiPageRevision'; +export type { ApiResponse_Vec_Workspace } from './models/ApiResponse_Vec_Workspace'; +export type { ApiResponse_Vec_WorkspaceAuditLog } from './models/ApiResponse_Vec_WorkspaceAuditLog'; +export type { ApiResponse_Vec_WorkspaceDomain } from './models/ApiResponse_Vec_WorkspaceDomain'; +export type { ApiResponse_Vec_WorkspaceIntegration } from './models/ApiResponse_Vec_WorkspaceIntegration'; +export type { ApiResponse_Vec_WorkspaceInvitation } from './models/ApiResponse_Vec_WorkspaceInvitation'; +export type { ApiResponse_Vec_WorkspaceMember } from './models/ApiResponse_Vec_WorkspaceMember'; +export type { ApiResponse_Vec_WorkspacePendingApproval } from './models/ApiResponse_Vec_WorkspacePendingApproval'; +export type { ApiResponse_Vec_WorkspaceWebhook } from './models/ApiResponse_Vec_WorkspaceWebhook'; +export type { ApiResponse_WikiCompareResult } from './models/ApiResponse_WikiCompareResult'; +export type { ApiResponse_WikiPage } from './models/ApiResponse_WikiPage'; +export type { ApiResponse_WikiPageRevision } from './models/ApiResponse_WikiPageRevision'; +export type { ApiResponse_Workspace } from './models/ApiResponse_Workspace'; +export type { ApiResponse_WorkspaceBilling } from './models/ApiResponse_WorkspaceBilling'; +export type { ApiResponse_WorkspaceCustomBranding } from './models/ApiResponse_WorkspaceCustomBranding'; +export type { ApiResponse_WorkspaceDomain } from './models/ApiResponse_WorkspaceDomain'; +export type { ApiResponse_WorkspaceIntegration } from './models/ApiResponse_WorkspaceIntegration'; +export type { ApiResponse_WorkspaceInvitation } from './models/ApiResponse_WorkspaceInvitation'; +export type { ApiResponse_WorkspaceMember } from './models/ApiResponse_WorkspaceMember'; +export type { ApiResponse_WorkspacePendingApproval } from './models/ApiResponse_WorkspacePendingApproval'; +export type { ApiResponse_WorkspaceSettings } from './models/ApiResponse_WorkspaceSettings'; +export type { ApiResponse_WorkspaceStats } from './models/ApiResponse_WorkspaceStats'; +export type { ApiResponse_WorkspaceWebhook } from './models/ApiResponse_WorkspaceWebhook'; +export type { BranchMergeCheck } from './models/BranchMergeCheck'; +export type { BranchProtectionRule } from './models/BranchProtectionRule'; +export type { CaptchaQuery } from './models/CaptchaQuery'; +export type { CaptchaResponse } from './models/CaptchaResponse'; +export type { ColorScheme } from './models/ColorScheme'; +export type { ContextMe } from './models/ContextMe'; +export type { CreateBranchParams } from './models/CreateBranchParams'; +export type { CreateCheckRunParams } from './models/CreateCheckRunParams'; +export type { CreateCommentParams } from './models/CreateCommentParams'; +export type { CreateCommitCommentParams } from './models/CreateCommitCommentParams'; +export type { CreateCommitStatusParams } from './models/CreateCommitStatusParams'; +export type { CreateIntegrationParams } from './models/CreateIntegrationParams'; +export type { CreateInvitationParams } from './models/CreateInvitationParams'; +export type { CreateInvitationResponse } from './models/CreateInvitationResponse'; +export type { CreateIssueParams } from './models/CreateIssueParams'; +export type { CreateIssueReactionParams } from './models/CreateIssueReactionParams'; +export type { CreateLabelParams } from './models/CreateLabelParams'; +export type { CreateMilestoneParams } from './models/CreateMilestoneParams'; +export type { CreatePrLabelParams } from './models/CreatePrLabelParams'; +export type { CreateProtectionRuleParams } from './models/CreateProtectionRuleParams'; +export type { CreatePrParams } from './models/CreatePrParams'; +export type { CreateReactionParams } from './models/CreateReactionParams'; +export type { CreateReleaseParams } from './models/CreateReleaseParams'; +export type { CreateRepoInvitationParams } from './models/CreateRepoInvitationParams'; +export type { CreateRepoParams } from './models/CreateRepoParams'; +export type { CreateReviewParams } from './models/CreateReviewParams'; +export type { CreateTagParams } from './models/CreateTagParams'; +export type { CreateTemplateParams } from './models/CreateTemplateParams'; +export type { CreateWebhookParams } from './models/CreateWebhookParams'; +export type { CreateWikiPageParams } from './models/CreateWikiPageParams'; +export type { CreateWorkspaceParams } from './models/CreateWorkspaceParams'; +export type { Density } from './models/Density'; +export type { DeviceType } from './models/DeviceType'; +export type { DigestFrequency } from './models/DigestFrequency'; +export type { Disable2FAParams } from './models/Disable2FAParams'; +export type { DismissReviewParams } from './models/DismissReviewParams'; +export type { EmailChangeRequest } from './models/EmailChangeRequest'; +export type { EmailResponse } from './models/EmailResponse'; +export type { EmailVerifyRequest } from './models/EmailVerifyRequest'; +export type { Enable2FAResponse } from './models/Enable2FAResponse'; +export type { EventType } from './models/EventType'; +export type { FontSize } from './models/FontSize'; +export type { ForkRepoParams } from './models/ForkRepoParams'; +export type { Get2FAStatusResponse } from './models/Get2FAStatusResponse'; +export type { GitService } from './models/GitService'; +export type { Issue } from './models/Issue'; +export type { IssueAssignee } from './models/IssueAssignee'; +export type { IssueComment } from './models/IssueComment'; +export type { IssueEvent } from './models/IssueEvent'; +export type { IssueLabel } from './models/IssueLabel'; +export type { IssueLabelRelation } from './models/IssueLabelRelation'; +export type { IssueListFilters } from './models/IssueListFilters'; +export type { IssueMilestone } from './models/IssueMilestone'; +export type { IssuePrRelation } from './models/IssuePrRelation'; +export type { IssueReaction } from './models/IssueReaction'; +export type { IssueRepoRelation } from './models/IssueRepoRelation'; +export type { IssueSubscriber } from './models/IssueSubscriber'; +export type { IssueTemplate } from './models/IssueTemplate'; +export type { KeyType } from './models/KeyType'; +export type { LinkPrParams } from './models/LinkPrParams'; +export type { LinkRepoParams } from './models/LinkRepoParams'; +export type { LockIssueParams } from './models/LockIssueParams'; +export type { LockPrParams } from './models/LockPrParams'; +export type { LoginParams } from './models/LoginParams'; +export type { MergePrParams } from './models/MergePrParams'; +export type { MergeStrategyKind } from './models/MergeStrategyKind'; +export type { MuteIssueParams } from './models/MuteIssueParams'; +export type { MutePrParams } from './models/MutePrParams'; +export type { Permission } from './models/Permission'; +export type { PrAssignee } from './models/PrAssignee'; +export type { PrCheckRun } from './models/PrCheckRun'; +export type { PrCommit } from './models/PrCommit'; +export type { PrEvent } from './models/PrEvent'; +export type { PrFile } from './models/PrFile'; +export type { Priority } from './models/Priority'; +export type { PrLabel } from './models/PrLabel'; +export type { PrLabelRelation } from './models/PrLabelRelation'; +export type { PrListFilters } from './models/PrListFilters'; +export type { PrMergeStrategy } from './models/PrMergeStrategy'; +export type { Provider } from './models/Provider'; +export type { PrReaction } from './models/PrReaction'; +export type { PrReview } from './models/PrReview'; +export type { PrReviewComment } from './models/PrReviewComment'; +export type { PrStatus } from './models/PrStatus'; +export type { PrSubscription } from './models/PrSubscription'; +export type { PullRequest } from './models/PullRequest'; +export type { Regenerate2FABackupCodesRequest } from './models/Regenerate2FABackupCodesRequest'; +export type { Regenerate2FABackupCodesResponse } from './models/Regenerate2FABackupCodesResponse'; +export type { RegisterEmailCodeParams } from './models/RegisterEmailCodeParams'; +export type { RegisterEmailCodeResponse } from './models/RegisterEmailCodeResponse'; +export type { RegisterParams } from './models/RegisterParams'; +export type { RegisterResponse } from './models/RegisterResponse'; +export type { RelationType } from './models/RelationType'; +export type { Repo } from './models/Repo'; +export type { RepoBranch } from './models/RepoBranch'; +export type { RepoCommitComment } from './models/RepoCommitComment'; +export type { RepoCommitStatus } from './models/RepoCommitStatus'; +export type { RepoDeployKey } from './models/RepoDeployKey'; +export type { RepoFork } from './models/RepoFork'; +export type { RepoInvitation } from './models/RepoInvitation'; +export type { RepoMember } from './models/RepoMember'; +export type { RepoRelease } from './models/RepoRelease'; +export type { RepoStar } from './models/RepoStar'; +export type { RepoStats } from './models/RepoStats'; +export type { RepoTag } from './models/RepoTag'; +export type { RepoWatch } from './models/RepoWatch'; +export type { RepoWebhook } from './models/RepoWebhook'; +export type { RequestApprovalParams } from './models/RequestApprovalParams'; +export type { RequestType } from './models/RequestType'; +export type { ResetPasswordRequest } from './models/ResetPasswordRequest'; +export type { ResetPasswordVerifyParams } from './models/ResetPasswordVerifyParams'; +export type { ReviewApprovalRequest } from './models/ReviewApprovalRequest'; +export type { ReviewCommentParams } from './models/ReviewCommentParams'; +export type { Role } from './models/Role'; +export type { RsaResponse } from './models/RsaResponse'; +export type { Scope } from './models/Scope'; +export type { SetBranchProtectionParams } from './models/SetBranchProtectionParams'; +export type { State } from './models/State'; +export type { Status } from './models/Status'; +export type { SubmitReviewParams } from './models/SubmitReviewParams'; +export type { SubscriptionLevel } from './models/SubscriptionLevel'; +export type { TargetType } from './models/TargetType'; +export type { Theme } from './models/Theme'; +export type { TransferIssueParams } from './models/TransferIssueParams'; +export type { TransferOwnerParams } from './models/TransferOwnerParams'; +export type { TransferOwnerRequest } from './models/TransferOwnerRequest'; +export type { UpdateBillingParams } from './models/UpdateBillingParams'; +export type { UpdateBrandingParams } from './models/UpdateBrandingParams'; +export type { UpdateCheckRunParams } from './models/UpdateCheckRunParams'; +export type { UpdateCommentParams } from './models/UpdateCommentParams'; +export type { UpdateIntegrationParams } from './models/UpdateIntegrationParams'; +export type { UpdateIssueParams } from './models/UpdateIssueParams'; +export type { UpdateLabelParams } from './models/UpdateLabelParams'; +export type { UpdateMemberRoleParams } from './models/UpdateMemberRoleParams'; +export type { UpdateMergeStrategyParams } from './models/UpdateMergeStrategyParams'; +export type { UpdateMilestoneParams } from './models/UpdateMilestoneParams'; +export type { UpdatePrLabelParams } from './models/UpdatePrLabelParams'; +export type { UpdateProtectionRuleParams } from './models/UpdateProtectionRuleParams'; +export type { UpdatePrParams } from './models/UpdatePrParams'; +export type { UpdateReleaseParams } from './models/UpdateReleaseParams'; +export type { UpdateRepoMemberRoleParams } from './models/UpdateRepoMemberRoleParams'; +export type { UpdateRepoParams } from './models/UpdateRepoParams'; +export type { UpdateTemplateParams } from './models/UpdateTemplateParams'; +export type { UpdateUserAccountParams } from './models/UpdateUserAccountParams'; +export type { UpdateUserAppearanceParams } from './models/UpdateUserAppearanceParams'; +export type { UpdateUserNotifySettingParams } from './models/UpdateUserNotifySettingParams'; +export type { UpdateUserProfileParams } from './models/UpdateUserProfileParams'; +export type { UpdateWebhookParams } from './models/UpdateWebhookParams'; +export type { UpdateWikiPageParams } from './models/UpdateWikiPageParams'; +export type { UpdateWorkspaceParams } from './models/UpdateWorkspaceParams'; +export type { UpdateWorkspaceSettingsParams } from './models/UpdateWorkspaceSettingsParams'; +export type { UploadUserAvatarParams } from './models/UploadUserAvatarParams'; +export type { User } from './models/User'; +export type { UserAppearance } from './models/UserAppearance'; +export type { UserAvatarResponse } from './models/UserAvatarResponse'; +export type { UserDevice } from './models/UserDevice'; +export type { UserGpgKey } from './models/UserGpgKey'; +export type { UserNotifySetting } from './models/UserNotifySetting'; +export type { UserOAuthInfo } from './models/UserOAuthInfo'; +export type { UserPersonalAccessTokenInfo } from './models/UserPersonalAccessTokenInfo'; +export type { UserProfile } from './models/UserProfile'; +export type { UserSecurityLog } from './models/UserSecurityLog'; +export type { UserSessionInfo } from './models/UserSessionInfo'; +export type { UserSshKey } from './models/UserSshKey'; +export type { Value } from './models/Value'; +export type { Verify2FAParams } from './models/Verify2FAParams'; +export type { Visibility } from './models/Visibility'; +export type { WatchParams } from './models/WatchParams'; +export type { WikiCompareResult } from './models/WikiCompareResult'; +export type { WikiPage } from './models/WikiPage'; +export type { WikiPageRevision } from './models/WikiPageRevision'; +export type { Workspace } from './models/Workspace'; +export type { WorkspaceAuditLog } from './models/WorkspaceAuditLog'; +export type { WorkspaceBilling } from './models/WorkspaceBilling'; +export type { WorkspaceCustomBranding } from './models/WorkspaceCustomBranding'; +export type { WorkspaceDomain } from './models/WorkspaceDomain'; +export type { WorkspaceIntegration } from './models/WorkspaceIntegration'; +export type { WorkspaceIntegrationConfig } from './models/WorkspaceIntegrationConfig'; +export type { WorkspaceInvitation } from './models/WorkspaceInvitation'; +export type { WorkspaceMember } from './models/WorkspaceMember'; +export type { WorkspacePendingApproval } from './models/WorkspacePendingApproval'; +export type { WorkspaceSettings } from './models/WorkspaceSettings'; +export type { WorkspaceStats } from './models/WorkspaceStats'; +export type { WorkspaceWebhook } from './models/WorkspaceWebhook'; + +export { $AcceptInvitationParams } from './schemas/$AcceptInvitationParams'; +export { $AcceptInvitationRequest } from './schemas/$AcceptInvitationRequest'; +export { $AddDeployKeyParams } from './schemas/$AddDeployKeyParams'; +export { $AddDomainParams } from './schemas/$AddDomainParams'; +export { $AddGpgKeyParams } from './schemas/$AddGpgKeyParams'; +export { $AddMemberParams } from './schemas/$AddMemberParams'; +export { $AddReplyParams } from './schemas/$AddReplyParams'; +export { $AddRepoMemberParams } from './schemas/$AddRepoMemberParams'; +export { $AddSshKeyParams } from './schemas/$AddSshKeyParams'; +export { $ApiEmptyResponse } from './schemas/$ApiEmptyResponse'; +export { $ApiErrorResponse } from './schemas/$ApiErrorResponse'; +export { $ApiResponse_BranchMergeCheck } from './schemas/$ApiResponse_BranchMergeCheck'; +export { $ApiResponse_BranchProtectionRule } from './schemas/$ApiResponse_BranchProtectionRule'; +export { $ApiResponse_CaptchaResponse } from './schemas/$ApiResponse_CaptchaResponse'; +export { $ApiResponse_ContextMe } from './schemas/$ApiResponse_ContextMe'; +export { $ApiResponse_CreateInvitationResponse } from './schemas/$ApiResponse_CreateInvitationResponse'; +export { $ApiResponse_EmailResponse } from './schemas/$ApiResponse_EmailResponse'; +export { $ApiResponse_Enable2FAResponse } from './schemas/$ApiResponse_Enable2FAResponse'; +export { $ApiResponse_Get2FAStatusResponse } from './schemas/$ApiResponse_Get2FAStatusResponse'; +export { $ApiResponse_Issue } from './schemas/$ApiResponse_Issue'; +export { $ApiResponse_IssueAssignee } from './schemas/$ApiResponse_IssueAssignee'; +export { $ApiResponse_IssueComment } from './schemas/$ApiResponse_IssueComment'; +export { $ApiResponse_IssueEvent } from './schemas/$ApiResponse_IssueEvent'; +export { $ApiResponse_IssueLabel } from './schemas/$ApiResponse_IssueLabel'; +export { $ApiResponse_IssueLabelRelation } from './schemas/$ApiResponse_IssueLabelRelation'; +export { $ApiResponse_IssueMilestone } from './schemas/$ApiResponse_IssueMilestone'; +export { $ApiResponse_IssuePrRelation } from './schemas/$ApiResponse_IssuePrRelation'; +export { $ApiResponse_IssueReaction } from './schemas/$ApiResponse_IssueReaction'; +export { $ApiResponse_IssueRepoRelation } from './schemas/$ApiResponse_IssueRepoRelation'; +export { $ApiResponse_IssueSubscriber } from './schemas/$ApiResponse_IssueSubscriber'; +export { $ApiResponse_IssueTemplate } from './schemas/$ApiResponse_IssueTemplate'; +export { $ApiResponse_Option_BranchProtectionRule } from './schemas/$ApiResponse_Option_BranchProtectionRule'; +export { $ApiResponse_PrAssignee } from './schemas/$ApiResponse_PrAssignee'; +export { $ApiResponse_PrCheckRun } from './schemas/$ApiResponse_PrCheckRun'; +export { $ApiResponse_PrCommit } from './schemas/$ApiResponse_PrCommit'; +export { $ApiResponse_PrEvent } from './schemas/$ApiResponse_PrEvent'; +export { $ApiResponse_PrFile } from './schemas/$ApiResponse_PrFile'; +export { $ApiResponse_PrLabel } from './schemas/$ApiResponse_PrLabel'; +export { $ApiResponse_PrLabelRelation } from './schemas/$ApiResponse_PrLabelRelation'; +export { $ApiResponse_PrMergeStrategy } from './schemas/$ApiResponse_PrMergeStrategy'; +export { $ApiResponse_PrReaction } from './schemas/$ApiResponse_PrReaction'; +export { $ApiResponse_PrReview } from './schemas/$ApiResponse_PrReview'; +export { $ApiResponse_PrReviewComment } from './schemas/$ApiResponse_PrReviewComment'; +export { $ApiResponse_PrStatus } from './schemas/$ApiResponse_PrStatus'; +export { $ApiResponse_PrSubscription } from './schemas/$ApiResponse_PrSubscription'; +export { $ApiResponse_PullRequest } from './schemas/$ApiResponse_PullRequest'; +export { $ApiResponse_Regenerate2FABackupCodesResponse } from './schemas/$ApiResponse_Regenerate2FABackupCodesResponse'; +export { $ApiResponse_RegisterEmailCodeResponse } from './schemas/$ApiResponse_RegisterEmailCodeResponse'; +export { $ApiResponse_RegisterResponse } from './schemas/$ApiResponse_RegisterResponse'; +export { $ApiResponse_Repo } from './schemas/$ApiResponse_Repo'; +export { $ApiResponse_RepoBranch } from './schemas/$ApiResponse_RepoBranch'; +export { $ApiResponse_RepoCommitComment } from './schemas/$ApiResponse_RepoCommitComment'; +export { $ApiResponse_RepoCommitStatus } from './schemas/$ApiResponse_RepoCommitStatus'; +export { $ApiResponse_RepoDeployKey } from './schemas/$ApiResponse_RepoDeployKey'; +export { $ApiResponse_RepoFork } from './schemas/$ApiResponse_RepoFork'; +export { $ApiResponse_RepoInvitation } from './schemas/$ApiResponse_RepoInvitation'; +export { $ApiResponse_RepoMember } from './schemas/$ApiResponse_RepoMember'; +export { $ApiResponse_RepoRelease } from './schemas/$ApiResponse_RepoRelease'; +export { $ApiResponse_RepoStar } from './schemas/$ApiResponse_RepoStar'; +export { $ApiResponse_RepoStats } from './schemas/$ApiResponse_RepoStats'; +export { $ApiResponse_RepoTag } from './schemas/$ApiResponse_RepoTag'; +export { $ApiResponse_RepoWatch } from './schemas/$ApiResponse_RepoWatch'; +export { $ApiResponse_RepoWebhook } from './schemas/$ApiResponse_RepoWebhook'; +export { $ApiResponse_RsaResponse } from './schemas/$ApiResponse_RsaResponse'; +export { $ApiResponse_String } from './schemas/$ApiResponse_String'; +export { $ApiResponse_User } from './schemas/$ApiResponse_User'; +export { $ApiResponse_UserAppearance } from './schemas/$ApiResponse_UserAppearance'; +export { $ApiResponse_UserAvatarResponse } from './schemas/$ApiResponse_UserAvatarResponse'; +export { $ApiResponse_UserDevice } from './schemas/$ApiResponse_UserDevice'; +export { $ApiResponse_UserGpgKey } from './schemas/$ApiResponse_UserGpgKey'; +export { $ApiResponse_UserNotifySetting } from './schemas/$ApiResponse_UserNotifySetting'; +export { $ApiResponse_UserOAuthInfo } from './schemas/$ApiResponse_UserOAuthInfo'; +export { $ApiResponse_UserPersonalAccessTokenInfo } from './schemas/$ApiResponse_UserPersonalAccessTokenInfo'; +export { $ApiResponse_UserProfile } from './schemas/$ApiResponse_UserProfile'; +export { $ApiResponse_UserSecurityLog } from './schemas/$ApiResponse_UserSecurityLog'; +export { $ApiResponse_UserSessionInfo } from './schemas/$ApiResponse_UserSessionInfo'; +export { $ApiResponse_UserSshKey } from './schemas/$ApiResponse_UserSshKey'; +export { $ApiResponse_Vec_BranchProtectionRule } from './schemas/$ApiResponse_Vec_BranchProtectionRule'; +export { $ApiResponse_Vec_Issue } from './schemas/$ApiResponse_Vec_Issue'; +export { $ApiResponse_Vec_IssueAssignee } from './schemas/$ApiResponse_Vec_IssueAssignee'; +export { $ApiResponse_Vec_IssueComment } from './schemas/$ApiResponse_Vec_IssueComment'; +export { $ApiResponse_Vec_IssueEvent } from './schemas/$ApiResponse_Vec_IssueEvent'; +export { $ApiResponse_Vec_IssueLabel } from './schemas/$ApiResponse_Vec_IssueLabel'; +export { $ApiResponse_Vec_IssueLabelRelation } from './schemas/$ApiResponse_Vec_IssueLabelRelation'; +export { $ApiResponse_Vec_IssueMilestone } from './schemas/$ApiResponse_Vec_IssueMilestone'; +export { $ApiResponse_Vec_IssuePrRelation } from './schemas/$ApiResponse_Vec_IssuePrRelation'; +export { $ApiResponse_Vec_IssueReaction } from './schemas/$ApiResponse_Vec_IssueReaction'; +export { $ApiResponse_Vec_IssueRepoRelation } from './schemas/$ApiResponse_Vec_IssueRepoRelation'; +export { $ApiResponse_Vec_IssueSubscriber } from './schemas/$ApiResponse_Vec_IssueSubscriber'; +export { $ApiResponse_Vec_IssueTemplate } from './schemas/$ApiResponse_Vec_IssueTemplate'; +export { $ApiResponse_Vec_PrAssignee } from './schemas/$ApiResponse_Vec_PrAssignee'; +export { $ApiResponse_Vec_PrCheckRun } from './schemas/$ApiResponse_Vec_PrCheckRun'; +export { $ApiResponse_Vec_PrCommit } from './schemas/$ApiResponse_Vec_PrCommit'; +export { $ApiResponse_Vec_PrEvent } from './schemas/$ApiResponse_Vec_PrEvent'; +export { $ApiResponse_Vec_PrFile } from './schemas/$ApiResponse_Vec_PrFile'; +export { $ApiResponse_Vec_PrLabel } from './schemas/$ApiResponse_Vec_PrLabel'; +export { $ApiResponse_Vec_PrLabelRelation } from './schemas/$ApiResponse_Vec_PrLabelRelation'; +export { $ApiResponse_Vec_PrReaction } from './schemas/$ApiResponse_Vec_PrReaction'; +export { $ApiResponse_Vec_PrReview } from './schemas/$ApiResponse_Vec_PrReview'; +export { $ApiResponse_Vec_PrReviewComment } from './schemas/$ApiResponse_Vec_PrReviewComment'; +export { $ApiResponse_Vec_PrSubscription } from './schemas/$ApiResponse_Vec_PrSubscription'; +export { $ApiResponse_Vec_PullRequest } from './schemas/$ApiResponse_Vec_PullRequest'; +export { $ApiResponse_Vec_Repo } from './schemas/$ApiResponse_Vec_Repo'; +export { $ApiResponse_Vec_RepoBranch } from './schemas/$ApiResponse_Vec_RepoBranch'; +export { $ApiResponse_Vec_RepoCommitComment } from './schemas/$ApiResponse_Vec_RepoCommitComment'; +export { $ApiResponse_Vec_RepoCommitStatus } from './schemas/$ApiResponse_Vec_RepoCommitStatus'; +export { $ApiResponse_Vec_RepoDeployKey } from './schemas/$ApiResponse_Vec_RepoDeployKey'; +export { $ApiResponse_Vec_RepoFork } from './schemas/$ApiResponse_Vec_RepoFork'; +export { $ApiResponse_Vec_RepoInvitation } from './schemas/$ApiResponse_Vec_RepoInvitation'; +export { $ApiResponse_Vec_RepoMember } from './schemas/$ApiResponse_Vec_RepoMember'; +export { $ApiResponse_Vec_RepoRelease } from './schemas/$ApiResponse_Vec_RepoRelease'; +export { $ApiResponse_Vec_RepoStar } from './schemas/$ApiResponse_Vec_RepoStar'; +export { $ApiResponse_Vec_RepoTag } from './schemas/$ApiResponse_Vec_RepoTag'; +export { $ApiResponse_Vec_RepoWatch } from './schemas/$ApiResponse_Vec_RepoWatch'; +export { $ApiResponse_Vec_RepoWebhook } from './schemas/$ApiResponse_Vec_RepoWebhook'; +export { $ApiResponse_Vec_UserDevice } from './schemas/$ApiResponse_Vec_UserDevice'; +export { $ApiResponse_Vec_UserGpgKey } from './schemas/$ApiResponse_Vec_UserGpgKey'; +export { $ApiResponse_Vec_UserOAuthInfo } from './schemas/$ApiResponse_Vec_UserOAuthInfo'; +export { $ApiResponse_Vec_UserPersonalAccessTokenInfo } from './schemas/$ApiResponse_Vec_UserPersonalAccessTokenInfo'; +export { $ApiResponse_Vec_UserSecurityLog } from './schemas/$ApiResponse_Vec_UserSecurityLog'; +export { $ApiResponse_Vec_UserSessionInfo } from './schemas/$ApiResponse_Vec_UserSessionInfo'; +export { $ApiResponse_Vec_UserSshKey } from './schemas/$ApiResponse_Vec_UserSshKey'; +export { $ApiResponse_Vec_WikiPage } from './schemas/$ApiResponse_Vec_WikiPage'; +export { $ApiResponse_Vec_WikiPageRevision } from './schemas/$ApiResponse_Vec_WikiPageRevision'; +export { $ApiResponse_Vec_Workspace } from './schemas/$ApiResponse_Vec_Workspace'; +export { $ApiResponse_Vec_WorkspaceAuditLog } from './schemas/$ApiResponse_Vec_WorkspaceAuditLog'; +export { $ApiResponse_Vec_WorkspaceDomain } from './schemas/$ApiResponse_Vec_WorkspaceDomain'; +export { $ApiResponse_Vec_WorkspaceIntegration } from './schemas/$ApiResponse_Vec_WorkspaceIntegration'; +export { $ApiResponse_Vec_WorkspaceInvitation } from './schemas/$ApiResponse_Vec_WorkspaceInvitation'; +export { $ApiResponse_Vec_WorkspaceMember } from './schemas/$ApiResponse_Vec_WorkspaceMember'; +export { $ApiResponse_Vec_WorkspacePendingApproval } from './schemas/$ApiResponse_Vec_WorkspacePendingApproval'; +export { $ApiResponse_Vec_WorkspaceWebhook } from './schemas/$ApiResponse_Vec_WorkspaceWebhook'; +export { $ApiResponse_WikiCompareResult } from './schemas/$ApiResponse_WikiCompareResult'; +export { $ApiResponse_WikiPage } from './schemas/$ApiResponse_WikiPage'; +export { $ApiResponse_WikiPageRevision } from './schemas/$ApiResponse_WikiPageRevision'; +export { $ApiResponse_Workspace } from './schemas/$ApiResponse_Workspace'; +export { $ApiResponse_WorkspaceBilling } from './schemas/$ApiResponse_WorkspaceBilling'; +export { $ApiResponse_WorkspaceCustomBranding } from './schemas/$ApiResponse_WorkspaceCustomBranding'; +export { $ApiResponse_WorkspaceDomain } from './schemas/$ApiResponse_WorkspaceDomain'; +export { $ApiResponse_WorkspaceIntegration } from './schemas/$ApiResponse_WorkspaceIntegration'; +export { $ApiResponse_WorkspaceInvitation } from './schemas/$ApiResponse_WorkspaceInvitation'; +export { $ApiResponse_WorkspaceMember } from './schemas/$ApiResponse_WorkspaceMember'; +export { $ApiResponse_WorkspacePendingApproval } from './schemas/$ApiResponse_WorkspacePendingApproval'; +export { $ApiResponse_WorkspaceSettings } from './schemas/$ApiResponse_WorkspaceSettings'; +export { $ApiResponse_WorkspaceStats } from './schemas/$ApiResponse_WorkspaceStats'; +export { $ApiResponse_WorkspaceWebhook } from './schemas/$ApiResponse_WorkspaceWebhook'; +export { $BranchMergeCheck } from './schemas/$BranchMergeCheck'; +export { $BranchProtectionRule } from './schemas/$BranchProtectionRule'; +export { $CaptchaQuery } from './schemas/$CaptchaQuery'; +export { $CaptchaResponse } from './schemas/$CaptchaResponse'; +export { $ColorScheme } from './schemas/$ColorScheme'; +export { $ContextMe } from './schemas/$ContextMe'; +export { $CreateBranchParams } from './schemas/$CreateBranchParams'; +export { $CreateCheckRunParams } from './schemas/$CreateCheckRunParams'; +export { $CreateCommentParams } from './schemas/$CreateCommentParams'; +export { $CreateCommitCommentParams } from './schemas/$CreateCommitCommentParams'; +export { $CreateCommitStatusParams } from './schemas/$CreateCommitStatusParams'; +export { $CreateIntegrationParams } from './schemas/$CreateIntegrationParams'; +export { $CreateInvitationParams } from './schemas/$CreateInvitationParams'; +export { $CreateInvitationResponse } from './schemas/$CreateInvitationResponse'; +export { $CreateIssueParams } from './schemas/$CreateIssueParams'; +export { $CreateIssueReactionParams } from './schemas/$CreateIssueReactionParams'; +export { $CreateLabelParams } from './schemas/$CreateLabelParams'; +export { $CreateMilestoneParams } from './schemas/$CreateMilestoneParams'; +export { $CreatePrLabelParams } from './schemas/$CreatePrLabelParams'; +export { $CreateProtectionRuleParams } from './schemas/$CreateProtectionRuleParams'; +export { $CreatePrParams } from './schemas/$CreatePrParams'; +export { $CreateReactionParams } from './schemas/$CreateReactionParams'; +export { $CreateReleaseParams } from './schemas/$CreateReleaseParams'; +export { $CreateRepoInvitationParams } from './schemas/$CreateRepoInvitationParams'; +export { $CreateRepoParams } from './schemas/$CreateRepoParams'; +export { $CreateReviewParams } from './schemas/$CreateReviewParams'; +export { $CreateTagParams } from './schemas/$CreateTagParams'; +export { $CreateTemplateParams } from './schemas/$CreateTemplateParams'; +export { $CreateWebhookParams } from './schemas/$CreateWebhookParams'; +export { $CreateWikiPageParams } from './schemas/$CreateWikiPageParams'; +export { $CreateWorkspaceParams } from './schemas/$CreateWorkspaceParams'; +export { $Density } from './schemas/$Density'; +export { $DeviceType } from './schemas/$DeviceType'; +export { $DigestFrequency } from './schemas/$DigestFrequency'; +export { $Disable2FAParams } from './schemas/$Disable2FAParams'; +export { $DismissReviewParams } from './schemas/$DismissReviewParams'; +export { $EmailChangeRequest } from './schemas/$EmailChangeRequest'; +export { $EmailResponse } from './schemas/$EmailResponse'; +export { $EmailVerifyRequest } from './schemas/$EmailVerifyRequest'; +export { $Enable2FAResponse } from './schemas/$Enable2FAResponse'; +export { $EventType } from './schemas/$EventType'; +export { $FontSize } from './schemas/$FontSize'; +export { $ForkRepoParams } from './schemas/$ForkRepoParams'; +export { $Get2FAStatusResponse } from './schemas/$Get2FAStatusResponse'; +export { $GitService } from './schemas/$GitService'; +export { $Issue } from './schemas/$Issue'; +export { $IssueAssignee } from './schemas/$IssueAssignee'; +export { $IssueComment } from './schemas/$IssueComment'; +export { $IssueEvent } from './schemas/$IssueEvent'; +export { $IssueLabel } from './schemas/$IssueLabel'; +export { $IssueLabelRelation } from './schemas/$IssueLabelRelation'; +export { $IssueListFilters } from './schemas/$IssueListFilters'; +export { $IssueMilestone } from './schemas/$IssueMilestone'; +export { $IssuePrRelation } from './schemas/$IssuePrRelation'; +export { $IssueReaction } from './schemas/$IssueReaction'; +export { $IssueRepoRelation } from './schemas/$IssueRepoRelation'; +export { $IssueSubscriber } from './schemas/$IssueSubscriber'; +export { $IssueTemplate } from './schemas/$IssueTemplate'; +export { $KeyType } from './schemas/$KeyType'; +export { $LinkPrParams } from './schemas/$LinkPrParams'; +export { $LinkRepoParams } from './schemas/$LinkRepoParams'; +export { $LockIssueParams } from './schemas/$LockIssueParams'; +export { $LockPrParams } from './schemas/$LockPrParams'; +export { $LoginParams } from './schemas/$LoginParams'; +export { $MergePrParams } from './schemas/$MergePrParams'; +export { $MergeStrategyKind } from './schemas/$MergeStrategyKind'; +export { $MuteIssueParams } from './schemas/$MuteIssueParams'; +export { $MutePrParams } from './schemas/$MutePrParams'; +export { $Permission } from './schemas/$Permission'; +export { $PrAssignee } from './schemas/$PrAssignee'; +export { $PrCheckRun } from './schemas/$PrCheckRun'; +export { $PrCommit } from './schemas/$PrCommit'; +export { $PrEvent } from './schemas/$PrEvent'; +export { $PrFile } from './schemas/$PrFile'; +export { $Priority } from './schemas/$Priority'; +export { $PrLabel } from './schemas/$PrLabel'; +export { $PrLabelRelation } from './schemas/$PrLabelRelation'; +export { $PrListFilters } from './schemas/$PrListFilters'; +export { $PrMergeStrategy } from './schemas/$PrMergeStrategy'; +export { $Provider } from './schemas/$Provider'; +export { $PrReaction } from './schemas/$PrReaction'; +export { $PrReview } from './schemas/$PrReview'; +export { $PrReviewComment } from './schemas/$PrReviewComment'; +export { $PrStatus } from './schemas/$PrStatus'; +export { $PrSubscription } from './schemas/$PrSubscription'; +export { $PullRequest } from './schemas/$PullRequest'; +export { $Regenerate2FABackupCodesRequest } from './schemas/$Regenerate2FABackupCodesRequest'; +export { $Regenerate2FABackupCodesResponse } from './schemas/$Regenerate2FABackupCodesResponse'; +export { $RegisterEmailCodeParams } from './schemas/$RegisterEmailCodeParams'; +export { $RegisterEmailCodeResponse } from './schemas/$RegisterEmailCodeResponse'; +export { $RegisterParams } from './schemas/$RegisterParams'; +export { $RegisterResponse } from './schemas/$RegisterResponse'; +export { $RelationType } from './schemas/$RelationType'; +export { $Repo } from './schemas/$Repo'; +export { $RepoBranch } from './schemas/$RepoBranch'; +export { $RepoCommitComment } from './schemas/$RepoCommitComment'; +export { $RepoCommitStatus } from './schemas/$RepoCommitStatus'; +export { $RepoDeployKey } from './schemas/$RepoDeployKey'; +export { $RepoFork } from './schemas/$RepoFork'; +export { $RepoInvitation } from './schemas/$RepoInvitation'; +export { $RepoMember } from './schemas/$RepoMember'; +export { $RepoRelease } from './schemas/$RepoRelease'; +export { $RepoStar } from './schemas/$RepoStar'; +export { $RepoStats } from './schemas/$RepoStats'; +export { $RepoTag } from './schemas/$RepoTag'; +export { $RepoWatch } from './schemas/$RepoWatch'; +export { $RepoWebhook } from './schemas/$RepoWebhook'; +export { $RequestApprovalParams } from './schemas/$RequestApprovalParams'; +export { $RequestType } from './schemas/$RequestType'; +export { $ResetPasswordRequest } from './schemas/$ResetPasswordRequest'; +export { $ResetPasswordVerifyParams } from './schemas/$ResetPasswordVerifyParams'; +export { $ReviewApprovalRequest } from './schemas/$ReviewApprovalRequest'; +export { $ReviewCommentParams } from './schemas/$ReviewCommentParams'; +export { $Role } from './schemas/$Role'; +export { $RsaResponse } from './schemas/$RsaResponse'; +export { $Scope } from './schemas/$Scope'; +export { $SetBranchProtectionParams } from './schemas/$SetBranchProtectionParams'; +export { $State } from './schemas/$State'; +export { $Status } from './schemas/$Status'; +export { $SubmitReviewParams } from './schemas/$SubmitReviewParams'; +export { $SubscriptionLevel } from './schemas/$SubscriptionLevel'; +export { $TargetType } from './schemas/$TargetType'; +export { $Theme } from './schemas/$Theme'; +export { $TransferIssueParams } from './schemas/$TransferIssueParams'; +export { $TransferOwnerParams } from './schemas/$TransferOwnerParams'; +export { $TransferOwnerRequest } from './schemas/$TransferOwnerRequest'; +export { $UpdateBillingParams } from './schemas/$UpdateBillingParams'; +export { $UpdateBrandingParams } from './schemas/$UpdateBrandingParams'; +export { $UpdateCheckRunParams } from './schemas/$UpdateCheckRunParams'; +export { $UpdateCommentParams } from './schemas/$UpdateCommentParams'; +export { $UpdateIntegrationParams } from './schemas/$UpdateIntegrationParams'; +export { $UpdateIssueParams } from './schemas/$UpdateIssueParams'; +export { $UpdateLabelParams } from './schemas/$UpdateLabelParams'; +export { $UpdateMemberRoleParams } from './schemas/$UpdateMemberRoleParams'; +export { $UpdateMergeStrategyParams } from './schemas/$UpdateMergeStrategyParams'; +export { $UpdateMilestoneParams } from './schemas/$UpdateMilestoneParams'; +export { $UpdatePrLabelParams } from './schemas/$UpdatePrLabelParams'; +export { $UpdateProtectionRuleParams } from './schemas/$UpdateProtectionRuleParams'; +export { $UpdatePrParams } from './schemas/$UpdatePrParams'; +export { $UpdateReleaseParams } from './schemas/$UpdateReleaseParams'; +export { $UpdateRepoMemberRoleParams } from './schemas/$UpdateRepoMemberRoleParams'; +export { $UpdateRepoParams } from './schemas/$UpdateRepoParams'; +export { $UpdateTemplateParams } from './schemas/$UpdateTemplateParams'; +export { $UpdateUserAccountParams } from './schemas/$UpdateUserAccountParams'; +export { $UpdateUserAppearanceParams } from './schemas/$UpdateUserAppearanceParams'; +export { $UpdateUserNotifySettingParams } from './schemas/$UpdateUserNotifySettingParams'; +export { $UpdateUserProfileParams } from './schemas/$UpdateUserProfileParams'; +export { $UpdateWebhookParams } from './schemas/$UpdateWebhookParams'; +export { $UpdateWikiPageParams } from './schemas/$UpdateWikiPageParams'; +export { $UpdateWorkspaceParams } from './schemas/$UpdateWorkspaceParams'; +export { $UpdateWorkspaceSettingsParams } from './schemas/$UpdateWorkspaceSettingsParams'; +export { $UploadUserAvatarParams } from './schemas/$UploadUserAvatarParams'; +export { $User } from './schemas/$User'; +export { $UserAppearance } from './schemas/$UserAppearance'; +export { $UserAvatarResponse } from './schemas/$UserAvatarResponse'; +export { $UserDevice } from './schemas/$UserDevice'; +export { $UserGpgKey } from './schemas/$UserGpgKey'; +export { $UserNotifySetting } from './schemas/$UserNotifySetting'; +export { $UserOAuthInfo } from './schemas/$UserOAuthInfo'; +export { $UserPersonalAccessTokenInfo } from './schemas/$UserPersonalAccessTokenInfo'; +export { $UserProfile } from './schemas/$UserProfile'; +export { $UserSecurityLog } from './schemas/$UserSecurityLog'; +export { $UserSessionInfo } from './schemas/$UserSessionInfo'; +export { $UserSshKey } from './schemas/$UserSshKey'; +export { $Value } from './schemas/$Value'; +export { $Verify2FAParams } from './schemas/$Verify2FAParams'; +export { $Visibility } from './schemas/$Visibility'; +export { $WatchParams } from './schemas/$WatchParams'; +export { $WikiCompareResult } from './schemas/$WikiCompareResult'; +export { $WikiPage } from './schemas/$WikiPage'; +export { $WikiPageRevision } from './schemas/$WikiPageRevision'; +export { $Workspace } from './schemas/$Workspace'; +export { $WorkspaceAuditLog } from './schemas/$WorkspaceAuditLog'; +export { $WorkspaceBilling } from './schemas/$WorkspaceBilling'; +export { $WorkspaceCustomBranding } from './schemas/$WorkspaceCustomBranding'; +export { $WorkspaceDomain } from './schemas/$WorkspaceDomain'; +export { $WorkspaceIntegration } from './schemas/$WorkspaceIntegration'; +export { $WorkspaceIntegrationConfig } from './schemas/$WorkspaceIntegrationConfig'; +export { $WorkspaceInvitation } from './schemas/$WorkspaceInvitation'; +export { $WorkspaceMember } from './schemas/$WorkspaceMember'; +export { $WorkspacePendingApproval } from './schemas/$WorkspacePendingApproval'; +export { $WorkspaceSettings } from './schemas/$WorkspaceSettings'; +export { $WorkspaceStats } from './schemas/$WorkspaceStats'; +export { $WorkspaceWebhook } from './schemas/$WorkspaceWebhook'; + +export { AuthService } from './services/AuthService'; +export { IssuesService } from './services/IssuesService'; +export { PullRequestsService } from './services/PullRequestsService'; +export { ReposService } from './services/ReposService'; +export { UserService } from './services/UserService'; +export { WikiService } from './services/WikiService'; +export { WorkspacesService } from './services/WorkspacesService'; diff --git a/src/client/models/AcceptInvitationParams.ts b/src/client/models/AcceptInvitationParams.ts new file mode 100644 index 0000000..2d26518 --- /dev/null +++ b/src/client/models/AcceptInvitationParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AcceptInvitationParams = { + /** + * Invitation token (received via email) + */ + token: string; +}; + diff --git a/src/client/models/AcceptInvitationRequest.ts b/src/client/models/AcceptInvitationRequest.ts new file mode 100644 index 0000000..7906aa2 --- /dev/null +++ b/src/client/models/AcceptInvitationRequest.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AcceptInvitationRequest = { + /** + * The plaintext invitation token from the email link. + */ + token: string; +}; + diff --git a/src/client/models/AddDeployKeyParams.ts b/src/client/models/AddDeployKeyParams.ts new file mode 100644 index 0000000..79b9953 --- /dev/null +++ b/src/client/models/AddDeployKeyParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddDeployKeyParams = { + key_type: string; + public_key: string; + read_only?: boolean | null; + title: string; +}; + diff --git a/src/client/models/AddDomainParams.ts b/src/client/models/AddDomainParams.ts new file mode 100644 index 0000000..0d78435 --- /dev/null +++ b/src/client/models/AddDomainParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddDomainParams = { + domain: string; +}; + diff --git a/src/client/models/AddGpgKeyParams.ts b/src/client/models/AddGpgKeyParams.ts new file mode 100644 index 0000000..6e5349b --- /dev/null +++ b/src/client/models/AddGpgKeyParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddGpgKeyParams = { + expires_at?: string | null; + key_id: string; + primary_email?: string | null; + public_key: string; +}; + diff --git a/src/client/models/AddMemberParams.ts b/src/client/models/AddMemberParams.ts new file mode 100644 index 0000000..039e2b3 --- /dev/null +++ b/src/client/models/AddMemberParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddMemberParams = { + role?: string | null; + user_id: string; +}; + diff --git a/src/client/models/AddReplyParams.ts b/src/client/models/AddReplyParams.ts new file mode 100644 index 0000000..7e1d885 --- /dev/null +++ b/src/client/models/AddReplyParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddReplyParams = { + body: string; +}; + diff --git a/src/client/models/AddRepoMemberParams.ts b/src/client/models/AddRepoMemberParams.ts new file mode 100644 index 0000000..739673b --- /dev/null +++ b/src/client/models/AddRepoMemberParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddRepoMemberParams = { + role?: string | null; + user_id: string; +}; + diff --git a/src/client/models/AddSshKeyParams.ts b/src/client/models/AddSshKeyParams.ts new file mode 100644 index 0000000..8501ff4 --- /dev/null +++ b/src/client/models/AddSshKeyParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type AddSshKeyParams = { + expires_at?: string | null; + key_type: string; + public_key: string; + title: string; +}; + diff --git a/src/client/models/ApiEmptyResponse.ts b/src/client/models/ApiEmptyResponse.ts new file mode 100644 index 0000000..6feeaf7 --- /dev/null +++ b/src/client/models/ApiEmptyResponse.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiEmptyResponse = { + /** + * Human-readable success message. + */ + message: string; +}; + diff --git a/src/client/models/ApiErrorResponse.ts b/src/client/models/ApiErrorResponse.ts new file mode 100644 index 0000000..04645a4 --- /dev/null +++ b/src/client/models/ApiErrorResponse.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiErrorResponse = { + /** + * Stable, client-safe error message. + */ + error: string; +}; + diff --git a/src/client/models/ApiResponse_BranchMergeCheck.ts b/src/client/models/ApiResponse_BranchMergeCheck.ts new file mode 100644 index 0000000..f759d37 --- /dev/null +++ b/src/client/models/ApiResponse_BranchMergeCheck.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_BranchMergeCheck = { + data: { + allowed: boolean; + reasons: Array; + }; +}; + diff --git a/src/client/models/ApiResponse_BranchProtectionRule.ts b/src/client/models/ApiResponse_BranchProtectionRule.ts new file mode 100644 index 0000000..1157b5d --- /dev/null +++ b/src/client/models/ApiResponse_BranchProtectionRule.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_BranchProtectionRule = { + data: { + allow_deletions: boolean; + allow_force_pushes: boolean; + created_at: string; + created_by?: string | null; + dismiss_stale_reviews: boolean; + dismissal_allowances: Array; + id: string; + pattern: string; + push_allowances: Array; + repo_id: string; + require_approvals: number; + require_code_owner_review: boolean; + require_conversation_resolution: boolean; + require_linear_history: boolean; + require_signed_commits: boolean; + require_status_checks: boolean; + required_status_checks: Array; + restrict_pushes: boolean; + restrict_review_dismissal: boolean; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_CaptchaResponse.ts b/src/client/models/ApiResponse_CaptchaResponse.ts new file mode 100644 index 0000000..63e7100 --- /dev/null +++ b/src/client/models/ApiResponse_CaptchaResponse.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { CaptchaQuery } from './CaptchaQuery'; +import type { RsaResponse } from './RsaResponse'; +export type ApiResponse_CaptchaResponse = { + data: { + base64: string; + req: CaptchaQuery; + rsa?: (null | RsaResponse); + }; +}; + diff --git a/src/client/models/ApiResponse_ContextMe.ts b/src/client/models/ApiResponse_ContextMe.ts new file mode 100644 index 0000000..66b31aa --- /dev/null +++ b/src/client/models/ApiResponse_ContextMe.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_ContextMe = { + data: { + avatar_url?: string | null; + display_name?: string | null; + has_unread_notifications: number; + id: string; + language: string; + timezone: string; + username: string; + }; +}; + diff --git a/src/client/models/ApiResponse_CreateInvitationResponse.ts b/src/client/models/ApiResponse_CreateInvitationResponse.ts new file mode 100644 index 0000000..ac8e517 --- /dev/null +++ b/src/client/models/ApiResponse_CreateInvitationResponse.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { WorkspaceInvitation } from './WorkspaceInvitation'; +export type ApiResponse_CreateInvitationResponse = { + data: { + invitation: WorkspaceInvitation; + }; +}; + diff --git a/src/client/models/ApiResponse_EmailResponse.ts b/src/client/models/ApiResponse_EmailResponse.ts new file mode 100644 index 0000000..9c0a536 --- /dev/null +++ b/src/client/models/ApiResponse_EmailResponse.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_EmailResponse = { + data: { + email?: string | null; + }; +}; + diff --git a/src/client/models/ApiResponse_Enable2FAResponse.ts b/src/client/models/ApiResponse_Enable2FAResponse.ts new file mode 100644 index 0000000..ba851e4 --- /dev/null +++ b/src/client/models/ApiResponse_Enable2FAResponse.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Enable2FAResponse = { + data: { + backup_codes: Array; + qr_code: string; + secret: string; + }; +}; + diff --git a/src/client/models/ApiResponse_Get2FAStatusResponse.ts b/src/client/models/ApiResponse_Get2FAStatusResponse.ts new file mode 100644 index 0000000..040893e --- /dev/null +++ b/src/client/models/ApiResponse_Get2FAStatusResponse.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Get2FAStatusResponse = { + data: { + has_backup_codes: boolean; + is_enabled: boolean; + method?: string | null; + }; +}; + diff --git a/src/client/models/ApiResponse_Issue.ts b/src/client/models/ApiResponse_Issue.ts new file mode 100644 index 0000000..a960e06 --- /dev/null +++ b/src/client/models/ApiResponse_Issue.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Priority } from './Priority'; +import type { State } from './State'; +import type { Visibility } from './Visibility'; +export type ApiResponse_Issue = { + data: { + author_id: string; + body?: string | null; + closed_at?: string | null; + closed_by?: string | null; + created_at: string; + deleted_at?: string | null; + due_at?: string | null; + id: string; + locked: boolean; + milestone_id?: string | null; + number: number; + priority: Priority; + state: State; + title: string; + updated_at: string; + visibility: Visibility; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueAssignee.ts b/src/client/models/ApiResponse_IssueAssignee.ts new file mode 100644 index 0000000..7bc19fa --- /dev/null +++ b/src/client/models/ApiResponse_IssueAssignee.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_IssueAssignee = { + data: { + assigned_by?: string | null; + assignee_id: string; + created_at: string; + id: string; + issue_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueComment.ts b/src/client/models/ApiResponse_IssueComment.ts new file mode 100644 index 0000000..790123d --- /dev/null +++ b/src/client/models/ApiResponse_IssueComment.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_IssueComment = { + data: { + author_id: string; + body: string; + created_at: string; + deleted_at?: string | null; + edited_at?: string | null; + id: string; + issue_id: string; + reply_to_comment_id?: string | null; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueEvent.ts b/src/client/models/ApiResponse_IssueEvent.ts new file mode 100644 index 0000000..025b85f --- /dev/null +++ b/src/client/models/ApiResponse_IssueEvent.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type ApiResponse_IssueEvent = { + data: { + actor_id?: string | null; + created_at: string; + event_type: EventType; + id: string; + issue_id: string; + metadata?: (null | Value); + new_value?: (null | Value); + old_value?: (null | Value); + }; +}; + diff --git a/src/client/models/ApiResponse_IssueLabel.ts b/src/client/models/ApiResponse_IssueLabel.ts new file mode 100644 index 0000000..89ffc58 --- /dev/null +++ b/src/client/models/ApiResponse_IssueLabel.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_IssueLabel = { + data: { + color: string; + created_at: string; + created_by?: string | null; + description?: string | null; + id: string; + name: string; + repo_id: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueLabelRelation.ts b/src/client/models/ApiResponse_IssueLabelRelation.ts new file mode 100644 index 0000000..3b6985b --- /dev/null +++ b/src/client/models/ApiResponse_IssueLabelRelation.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_IssueLabelRelation = { + data: { + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + label_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueMilestone.ts b/src/client/models/ApiResponse_IssueMilestone.ts new file mode 100644 index 0000000..5da3e29 --- /dev/null +++ b/src/client/models/ApiResponse_IssueMilestone.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_IssueMilestone = { + data: { + closed_at?: string | null; + created_at: string; + created_by: string; + description?: string | null; + due_at?: string | null; + id: string; + repo_id: string; + state: State; + title: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssuePrRelation.ts b/src/client/models/ApiResponse_IssuePrRelation.ts new file mode 100644 index 0000000..28e7e0e --- /dev/null +++ b/src/client/models/ApiResponse_IssuePrRelation.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RelationType } from './RelationType'; +export type ApiResponse_IssuePrRelation = { + data: { + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + pull_request_id: string; + relation_type: RelationType; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueReaction.ts b/src/client/models/ApiResponse_IssueReaction.ts new file mode 100644 index 0000000..cb85c9a --- /dev/null +++ b/src/client/models/ApiResponse_IssueReaction.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +export type ApiResponse_IssueReaction = { + data: { + content: string; + created_at: string; + id: string; + issue_id: string; + target_id?: string | null; + target_type: TargetType; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueRepoRelation.ts b/src/client/models/ApiResponse_IssueRepoRelation.ts new file mode 100644 index 0000000..4cc4136 --- /dev/null +++ b/src/client/models/ApiResponse_IssueRepoRelation.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RelationType } from './RelationType'; +export type ApiResponse_IssueRepoRelation = { + data: { + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + relation_type: RelationType; + repo_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueSubscriber.ts b/src/client/models/ApiResponse_IssueSubscriber.ts new file mode 100644 index 0000000..6aa5b38 --- /dev/null +++ b/src/client/models/ApiResponse_IssueSubscriber.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_IssueSubscriber = { + data: { + created_at: string; + id: string; + issue_id: string; + muted: boolean; + reason: string; + updated_at: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_IssueTemplate.ts b/src/client/models/ApiResponse_IssueTemplate.ts new file mode 100644 index 0000000..3105d28 --- /dev/null +++ b/src/client/models/ApiResponse_IssueTemplate.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_IssueTemplate = { + data: { + active: boolean; + body_template: string; + created_at: string; + created_by: string; + description?: string | null; + id: string; + labels: Array; + name: string; + repo_id: string; + title_template?: string | null; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_Option_BranchProtectionRule.ts b/src/client/models/ApiResponse_Option_BranchProtectionRule.ts new file mode 100644 index 0000000..07deb38 --- /dev/null +++ b/src/client/models/ApiResponse_Option_BranchProtectionRule.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Option_BranchProtectionRule = { + data: (null | { + allow_deletions: boolean; + allow_force_pushes: boolean; + created_at: string; + created_by?: string | null; + dismiss_stale_reviews: boolean; + dismissal_allowances: Array; + id: string; + pattern: string; + push_allowances: Array; + repo_id: string; + require_approvals: number; + require_code_owner_review: boolean; + require_conversation_resolution: boolean; + require_linear_history: boolean; + require_signed_commits: boolean; + require_status_checks: boolean; + required_status_checks: Array; + restrict_pushes: boolean; + restrict_review_dismissal: boolean; + updated_at: string; + }); +}; + diff --git a/src/client/models/ApiResponse_PrAssignee.ts b/src/client/models/ApiResponse_PrAssignee.ts new file mode 100644 index 0000000..dd63a2a --- /dev/null +++ b/src/client/models/ApiResponse_PrAssignee.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrAssignee = { + data: { + assigned_by?: string | null; + assignee_id: string; + created_at: string; + id: string; + pull_request_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrCheckRun.ts b/src/client/models/ApiResponse_PrCheckRun.ts new file mode 100644 index 0000000..0b70358 --- /dev/null +++ b/src/client/models/ApiResponse_PrCheckRun.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type ApiResponse_PrCheckRun = { + data: { + commit_sha: string; + completed_at?: string | null; + conclusion?: (null | Status); + created_at: string; + details_url?: string | null; + external_id?: string | null; + id: string; + name: string; + pull_request_id: string; + started_at?: string | null; + status: Status; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrCommit.ts b/src/client/models/ApiResponse_PrCommit.ts new file mode 100644 index 0000000..37043ff --- /dev/null +++ b/src/client/models/ApiResponse_PrCommit.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrCommit = { + data: { + authored_at?: string | null; + commit_sha: string; + committed_at?: string | null; + created_at: string; + id: string; + position: number; + pull_request_id: string; + repo_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrEvent.ts b/src/client/models/ApiResponse_PrEvent.ts new file mode 100644 index 0000000..bdbccf0 --- /dev/null +++ b/src/client/models/ApiResponse_PrEvent.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type ApiResponse_PrEvent = { + data: { + actor_id?: string | null; + created_at: string; + event_type: EventType; + id: string; + metadata?: (null | Value); + new_value?: (null | Value); + old_value?: (null | Value); + pull_request_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrFile.ts b/src/client/models/ApiResponse_PrFile.ts new file mode 100644 index 0000000..1334b69 --- /dev/null +++ b/src/client/models/ApiResponse_PrFile.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type ApiResponse_PrFile = { + data: { + additions: number; + changes: number; + created_at: string; + deletions: number; + id: string; + old_path?: string | null; + patch?: string | null; + path: string; + pull_request_id: string; + status: Status; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrLabel.ts b/src/client/models/ApiResponse_PrLabel.ts new file mode 100644 index 0000000..ff4dd07 --- /dev/null +++ b/src/client/models/ApiResponse_PrLabel.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrLabel = { + data: { + color: string; + created_at: string; + created_by?: string | null; + description?: string | null; + id: string; + name: string; + repo_id: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrLabelRelation.ts b/src/client/models/ApiResponse_PrLabelRelation.ts new file mode 100644 index 0000000..4b9d6b3 --- /dev/null +++ b/src/client/models/ApiResponse_PrLabelRelation.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrLabelRelation = { + data: { + created_at: string; + created_by?: string | null; + id: string; + label_id: string; + pull_request_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrMergeStrategy.ts b/src/client/models/ApiResponse_PrMergeStrategy.ts new file mode 100644 index 0000000..1c6bc92 --- /dev/null +++ b/src/client/models/ApiResponse_PrMergeStrategy.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { MergeStrategyKind } from './MergeStrategyKind'; +export type ApiResponse_PrMergeStrategy = { + data: { + auto_merge: boolean; + created_at: string; + delete_source_branch: boolean; + merge_when_checks_pass: boolean; + pull_request_id: string; + selected_by?: string | null; + squash_message?: string | null; + squash_title?: string | null; + strategy: MergeStrategyKind; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrReaction.ts b/src/client/models/ApiResponse_PrReaction.ts new file mode 100644 index 0000000..5c7ccef --- /dev/null +++ b/src/client/models/ApiResponse_PrReaction.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +export type ApiResponse_PrReaction = { + data: { + content: string; + created_at: string; + id: string; + pull_request_id: string; + target_id?: string | null; + target_type: TargetType; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrReview.ts b/src/client/models/ApiResponse_PrReview.ts new file mode 100644 index 0000000..568bf70 --- /dev/null +++ b/src/client/models/ApiResponse_PrReview.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrReview = { + data: { + author_id: string; + body?: string | null; + commit_sha?: string | null; + created_at: string; + dismiss_reason?: string | null; + dismissed_at?: string | null; + dismissed_by?: string | null; + id: string; + pull_request_id: string; + state: string; + submitted_at?: string | null; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrReviewComment.ts b/src/client/models/ApiResponse_PrReviewComment.ts new file mode 100644 index 0000000..b428c6f --- /dev/null +++ b/src/client/models/ApiResponse_PrReviewComment.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrReviewComment = { + data: { + author_id: string; + body: string; + created_at: string; + diff_hunk?: string | null; + edited_at?: string | null; + id: string; + in_reply_to_id?: string | null; + line?: number | null; + original_line?: number | null; + original_start_line?: number | null; + path: string; + pull_request_id: string; + review_id: string; + start_line?: number | null; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrStatus.ts b/src/client/models/ApiResponse_PrStatus.ts new file mode 100644 index 0000000..9ccb19d --- /dev/null +++ b/src/client/models/ApiResponse_PrStatus.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_PrStatus = { + data: { + additions_count: number; + approvals_count: number; + changed_files_count: number; + checks_state: State; + conflicts: boolean; + deletions_count: number; + head_commit_sha: string; + mergeable_state: State; + pull_request_id: string; + requested_reviews_count: number; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PrSubscription.ts b/src/client/models/ApiResponse_PrSubscription.ts new file mode 100644 index 0000000..6d7653c --- /dev/null +++ b/src/client/models/ApiResponse_PrSubscription.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_PrSubscription = { + data: { + created_at: string; + id: string; + muted: boolean; + pull_request_id: string; + reason: string; + updated_at: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_PullRequest.ts b/src/client/models/ApiResponse_PullRequest.ts new file mode 100644 index 0000000..3f59ecc --- /dev/null +++ b/src/client/models/ApiResponse_PullRequest.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_PullRequest = { + data: { + author_id: string; + base_commit_sha?: string | null; + body?: string | null; + closed_at?: string | null; + closed_by?: string | null; + created_at: string; + deleted_at?: string | null; + draft: boolean; + head_commit_sha: string; + id: string; + locked: boolean; + merge_commit_sha?: string | null; + merged_at?: string | null; + merged_by?: string | null; + number: number; + repo_id: string; + source_branch: string; + source_repo_id: string; + state: State; + target_branch: string; + target_repo_id: string; + title: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_Regenerate2FABackupCodesResponse.ts b/src/client/models/ApiResponse_Regenerate2FABackupCodesResponse.ts new file mode 100644 index 0000000..aa872f8 --- /dev/null +++ b/src/client/models/ApiResponse_Regenerate2FABackupCodesResponse.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Regenerate2FABackupCodesResponse = { + data: { + /** + * Newly generated one-time backup codes. Old backup codes become invalid. + */ + backup_codes: Array; + }; +}; + diff --git a/src/client/models/ApiResponse_RegisterEmailCodeResponse.ts b/src/client/models/ApiResponse_RegisterEmailCodeResponse.ts new file mode 100644 index 0000000..2900e5d --- /dev/null +++ b/src/client/models/ApiResponse_RegisterEmailCodeResponse.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RegisterEmailCodeResponse = { + data: { + expires_in_secs: number; + }; +}; + diff --git a/src/client/models/ApiResponse_RegisterResponse.ts b/src/client/models/ApiResponse_RegisterResponse.ts new file mode 100644 index 0000000..0bb8c28 --- /dev/null +++ b/src/client/models/ApiResponse_RegisterResponse.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RegisterResponse = { + data: { + /** + * Avatar URL; usually absent right after registration. + */ + avatar_url?: string | null; + /** + * Display name initialized from username. + */ + display_name?: string | null; + /** + * Newly created user id. + */ + id: string; + /** + * Unique username used for login and profile URL. + */ + username: string; + }; +}; + diff --git a/src/client/models/ApiResponse_Repo.ts b/src/client/models/ApiResponse_Repo.ts new file mode 100644 index 0000000..1e53627 --- /dev/null +++ b/src/client/models/ApiResponse_Repo.ts @@ -0,0 +1,30 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { GitService } from './GitService'; +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type ApiResponse_Repo = { + data: { + archived_at?: string | null; + created_at: string; + default_branch: string; + deleted_at?: string | null; + description?: string | null; + forked_from_repo_id?: string | null; + git_service: GitService; + id: string; + is_fork: boolean; + name: string; + owner_id: string; + primary_storage_node_id: string; + status: Status; + storage_node_ids: Array; + storage_path: string; + updated_at: string; + visibility: Visibility; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoBranch.ts b/src/client/models/ApiResponse_RepoBranch.ts new file mode 100644 index 0000000..a33a0f9 --- /dev/null +++ b/src/client/models/ApiResponse_RepoBranch.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoBranch = { + data: { + commit_sha: string; + created_at: string; + created_by?: string | null; + default_branch: boolean; + id: string; + last_push_at?: string | null; + last_push_id?: string | null; + name: string; + protected: boolean; + repo_id: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoCommitComment.ts b/src/client/models/ApiResponse_RepoCommitComment.ts new file mode 100644 index 0000000..ee7a5e6 --- /dev/null +++ b/src/client/models/ApiResponse_RepoCommitComment.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoCommitComment = { + data: { + author_id: string; + body: string; + commit_sha: string; + created_at: string; + deleted_at?: string | null; + id: string; + line?: number | null; + path?: string | null; + push_commit_id: string; + repo_id: string; + resolved: boolean; + resolved_at?: string | null; + resolved_by?: string | null; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoCommitStatus.ts b/src/client/models/ApiResponse_RepoCommitStatus.ts new file mode 100644 index 0000000..d75fc14 --- /dev/null +++ b/src/client/models/ApiResponse_RepoCommitStatus.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_RepoCommitStatus = { + data: { + context: string; + created_at: string; + description?: string | null; + id: string; + latest_commit_sha: string; + push_commit_id: string; + repo_id: string; + reported_at: string; + reported_by?: string | null; + state: State; + target_url?: string | null; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoDeployKey.ts b/src/client/models/ApiResponse_RepoDeployKey.ts new file mode 100644 index 0000000..f14e0ab --- /dev/null +++ b/src/client/models/ApiResponse_RepoDeployKey.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { KeyType } from './KeyType'; +export type ApiResponse_RepoDeployKey = { + data: { + created_at: string; + created_by: string; + expires_at?: string | null; + fingerprint_sha256: string; + id: string; + key_type: KeyType; + last_used_at?: string | null; + public_key: string; + read_only: boolean; + repo_id: string; + revoked_at?: string | null; + title: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoFork.ts b/src/client/models/ApiResponse_RepoFork.ts new file mode 100644 index 0000000..1c8cf32 --- /dev/null +++ b/src/client/models/ApiResponse_RepoFork.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoFork = { + data: { + created_at: string; + fork_repo_id: string; + forked_by: string; + id: string; + parent_repo_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoInvitation.ts b/src/client/models/ApiResponse_RepoInvitation.ts new file mode 100644 index 0000000..ea78639 --- /dev/null +++ b/src/client/models/ApiResponse_RepoInvitation.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +export type ApiResponse_RepoInvitation = { + data: { + accepted_at?: string | null; + accepted_by?: string | null; + created_at: string; + email: string; + expires_at: string; + id: string; + invited_by: string; + repo_id: string; + revoked_at?: string | null; + role: Role; + token_hash: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoMember.ts b/src/client/models/ApiResponse_RepoMember.ts new file mode 100644 index 0000000..cb08144 --- /dev/null +++ b/src/client/models/ApiResponse_RepoMember.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +export type ApiResponse_RepoMember = { + data: { + created_at: string; + id: string; + invited_by?: string | null; + joined_at?: string | null; + last_active_at?: string | null; + repo_id: string; + role: Role; + status: Status; + updated_at: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoRelease.ts b/src/client/models/ApiResponse_RepoRelease.ts new file mode 100644 index 0000000..7e2e53e --- /dev/null +++ b/src/client/models/ApiResponse_RepoRelease.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoRelease = { + data: { + author_id: string; + body?: string | null; + created_at: string; + deleted_at?: string | null; + draft: boolean; + id: string; + prerelease: boolean; + published_at?: string | null; + repo_id: string; + tag_id?: string | null; + tag_name: string; + title: string; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoStar.ts b/src/client/models/ApiResponse_RepoStar.ts new file mode 100644 index 0000000..5916ea3 --- /dev/null +++ b/src/client/models/ApiResponse_RepoStar.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoStar = { + data: { + created_at: string; + id: string; + repo_id: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoStats.ts b/src/client/models/ApiResponse_RepoStats.ts new file mode 100644 index 0000000..f340254 --- /dev/null +++ b/src/client/models/ApiResponse_RepoStats.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoStats = { + data: { + branches_count: number; + commits_count: number; + forks_count: number; + last_push_at?: string | null; + open_issues_count: number; + open_pull_requests_count: number; + releases_count: number; + repo_id: string; + size_bytes: number; + stars_count: number; + tags_count: number; + updated_at: string; + watchers_count: number; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoTag.ts b/src/client/models/ApiResponse_RepoTag.ts new file mode 100644 index 0000000..28c0644 --- /dev/null +++ b/src/client/models/ApiResponse_RepoTag.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RepoTag = { + data: { + created_at: string; + id: string; + message?: string | null; + name: string; + repo_id: string; + signed: boolean; + tagger_id?: string | null; + target_commit_sha: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoWatch.ts b/src/client/models/ApiResponse_RepoWatch.ts new file mode 100644 index 0000000..7776bbc --- /dev/null +++ b/src/client/models/ApiResponse_RepoWatch.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { SubscriptionLevel } from './SubscriptionLevel'; +export type ApiResponse_RepoWatch = { + data: { + created_at: string; + id: string; + level: SubscriptionLevel; + repo_id: string; + updated_at: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RepoWebhook.ts b/src/client/models/ApiResponse_RepoWebhook.ts new file mode 100644 index 0000000..4460823 --- /dev/null +++ b/src/client/models/ApiResponse_RepoWebhook.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type ApiResponse_RepoWebhook = { + data: { + active: boolean; + created_at: string; + created_by: string; + events: Array; + id: string; + last_delivery_at?: string | null; + last_delivery_status?: string | null; + repo_id: string; + secret_ciphertext?: string | null; + updated_at: string; + url: string; + }; +}; + diff --git a/src/client/models/ApiResponse_RsaResponse.ts b/src/client/models/ApiResponse_RsaResponse.ts new file mode 100644 index 0000000..e888c9f --- /dev/null +++ b/src/client/models/ApiResponse_RsaResponse.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_RsaResponse = { + data: { + public_key: string; + }; +}; + diff --git a/src/client/models/ApiResponse_String.ts b/src/client/models/ApiResponse_String.ts new file mode 100644 index 0000000..3d39fc8 --- /dev/null +++ b/src/client/models/ApiResponse_String.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_String = { + data: string; +}; + diff --git a/src/client/models/ApiResponse_User.ts b/src/client/models/ApiResponse_User.ts new file mode 100644 index 0000000..a846422 --- /dev/null +++ b/src/client/models/ApiResponse_User.ts @@ -0,0 +1,26 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type ApiResponse_User = { + data: { + avatar_url?: string | null; + bio?: string | null; + created_at: string; + deleted_at?: string | null; + display_name?: string | null; + id: string; + is_active: boolean; + is_bot: boolean; + last_login_at?: string | null; + role: Role; + status: Status; + updated_at: string; + username: string; + visibility: Visibility; + }; +}; + diff --git a/src/client/models/ApiResponse_UserAppearance.ts b/src/client/models/ApiResponse_UserAppearance.ts new file mode 100644 index 0000000..45e18df --- /dev/null +++ b/src/client/models/ApiResponse_UserAppearance.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ColorScheme } from './ColorScheme'; +import type { Density } from './Density'; +import type { FontSize } from './FontSize'; +import type { Theme } from './Theme'; +export type ApiResponse_UserAppearance = { + data: { + color_scheme: ColorScheme; + created_at: string; + density: Density; + editor_theme?: string | null; + font_size: FontSize; + markdown_preview: boolean; + reduced_motion: boolean; + theme: Theme; + updated_at: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_UserAvatarResponse.ts b/src/client/models/ApiResponse_UserAvatarResponse.ts new file mode 100644 index 0000000..d511938 --- /dev/null +++ b/src/client/models/ApiResponse_UserAvatarResponse.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_UserAvatarResponse = { + data: { + avatar_url: string; + storage_key: string; + }; +}; + diff --git a/src/client/models/ApiResponse_UserDevice.ts b/src/client/models/ApiResponse_UserDevice.ts new file mode 100644 index 0000000..a54d43b --- /dev/null +++ b/src/client/models/ApiResponse_UserDevice.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { DeviceType } from './DeviceType'; +export type ApiResponse_UserDevice = { + data: { + created_at: string; + device_name: string; + device_type: DeviceType; + fingerprint?: string | null; + id: string; + ip_address?: string | null; + last_seen_at?: string | null; + trusted: boolean; + updated_at: string; + user_agent?: string | null; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_UserGpgKey.ts b/src/client/models/ApiResponse_UserGpgKey.ts new file mode 100644 index 0000000..04be03c --- /dev/null +++ b/src/client/models/ApiResponse_UserGpgKey.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_UserGpgKey = { + data: { + created_at: string; + expires_at?: string | null; + fingerprint: string; + id: string; + key_id: string; + primary_email?: string | null; + public_key: string; + revoked_at?: string | null; + updated_at: string; + user_id: string; + verified_at?: string | null; + }; +}; + diff --git a/src/client/models/ApiResponse_UserNotifySetting.ts b/src/client/models/ApiResponse_UserNotifySetting.ts new file mode 100644 index 0000000..9c90d28 --- /dev/null +++ b/src/client/models/ApiResponse_UserNotifySetting.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { DigestFrequency } from './DigestFrequency'; +export type ApiResponse_UserNotifySetting = { + data: { + created_at: string; + digest_frequency: DigestFrequency; + email_notifications: boolean; + marketing_emails: boolean; + mention_notifications: boolean; + review_notifications: boolean; + security_notifications: boolean; + updated_at: string; + user_id: string; + web_notifications: boolean; + }; +}; + diff --git a/src/client/models/ApiResponse_UserOAuthInfo.ts b/src/client/models/ApiResponse_UserOAuthInfo.ts new file mode 100644 index 0000000..75d6969 --- /dev/null +++ b/src/client/models/ApiResponse_UserOAuthInfo.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Provider } from './Provider'; +export type ApiResponse_UserOAuthInfo = { + data: { + id: string; + last_used_at?: string | null; + linked_at: string; + provider: Provider; + provider_email?: string | null; + provider_user_id: string; + provider_username?: string | null; + token_expires_at?: string | null; + }; +}; + diff --git a/src/client/models/ApiResponse_UserPersonalAccessTokenInfo.ts b/src/client/models/ApiResponse_UserPersonalAccessTokenInfo.ts new file mode 100644 index 0000000..29c7b41 --- /dev/null +++ b/src/client/models/ApiResponse_UserPersonalAccessTokenInfo.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Scope } from './Scope'; +export type ApiResponse_UserPersonalAccessTokenInfo = { + data: { + created_at: string; + expires_at?: string | null; + id: string; + last_used_at?: string | null; + name: string; + revoked_at?: string | null; + scopes: Array; + updated_at: string; + }; +}; + diff --git a/src/client/models/ApiResponse_UserProfile.ts b/src/client/models/ApiResponse_UserProfile.ts new file mode 100644 index 0000000..e23e92c --- /dev/null +++ b/src/client/models/ApiResponse_UserProfile.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_UserProfile = { + data: { + company?: string | null; + created_at: string; + full_name?: string | null; + language?: string | null; + location?: string | null; + profile_readme?: string | null; + timezone?: string | null; + twitter_username?: string | null; + updated_at: string; + user_id: string; + website_url?: string | null; + }; +}; + diff --git a/src/client/models/ApiResponse_UserSecurityLog.ts b/src/client/models/ApiResponse_UserSecurityLog.ts new file mode 100644 index 0000000..9b9590c --- /dev/null +++ b/src/client/models/ApiResponse_UserSecurityLog.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type ApiResponse_UserSecurityLog = { + data: { + created_at: string; + description?: string | null; + event_type: EventType; + id: string; + ip_address?: string | null; + metadata?: (null | Value); + user_agent?: string | null; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_UserSessionInfo.ts b/src/client/models/ApiResponse_UserSessionInfo.ts new file mode 100644 index 0000000..a981ff8 --- /dev/null +++ b/src/client/models/ApiResponse_UserSessionInfo.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_UserSessionInfo = { + data: { + created_at: string; + expires_at: string; + id: string; + ip_address?: string | null; + last_active_at: string; + revoked_at?: string | null; + user_agent?: string | null; + }; +}; + diff --git a/src/client/models/ApiResponse_UserSshKey.ts b/src/client/models/ApiResponse_UserSshKey.ts new file mode 100644 index 0000000..6ff5f2a --- /dev/null +++ b/src/client/models/ApiResponse_UserSshKey.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { KeyType } from './KeyType'; +export type ApiResponse_UserSshKey = { + data: { + created_at: string; + expires_at?: string | null; + fingerprint_sha256: string; + id: string; + key_type: KeyType; + last_used_at?: string | null; + public_key: string; + revoked_at?: string | null; + title: string; + updated_at: string; + user_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_Vec_BranchProtectionRule.ts b/src/client/models/ApiResponse_Vec_BranchProtectionRule.ts new file mode 100644 index 0000000..0c56d5f --- /dev/null +++ b/src/client/models/ApiResponse_Vec_BranchProtectionRule.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_BranchProtectionRule = { + data: Array<{ + allow_deletions: boolean; + allow_force_pushes: boolean; + created_at: string; + created_by?: string | null; + dismiss_stale_reviews: boolean; + dismissal_allowances: Array; + id: string; + pattern: string; + push_allowances: Array; + repo_id: string; + require_approvals: number; + require_code_owner_review: boolean; + require_conversation_resolution: boolean; + require_linear_history: boolean; + require_signed_commits: boolean; + require_status_checks: boolean; + required_status_checks: Array; + restrict_pushes: boolean; + restrict_review_dismissal: boolean; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_Issue.ts b/src/client/models/ApiResponse_Vec_Issue.ts new file mode 100644 index 0000000..fddc345 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_Issue.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Priority } from './Priority'; +import type { State } from './State'; +import type { Visibility } from './Visibility'; +export type ApiResponse_Vec_Issue = { + data: Array<{ + author_id: string; + body?: string | null; + closed_at?: string | null; + closed_by?: string | null; + created_at: string; + deleted_at?: string | null; + due_at?: string | null; + id: string; + locked: boolean; + milestone_id?: string | null; + number: number; + priority: Priority; + state: State; + title: string; + updated_at: string; + visibility: Visibility; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueAssignee.ts b/src/client/models/ApiResponse_Vec_IssueAssignee.ts new file mode 100644 index 0000000..28aa878 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueAssignee.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_IssueAssignee = { + data: Array<{ + assigned_by?: string | null; + assignee_id: string; + created_at: string; + id: string; + issue_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueComment.ts b/src/client/models/ApiResponse_Vec_IssueComment.ts new file mode 100644 index 0000000..084a630 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueComment.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_IssueComment = { + data: Array<{ + author_id: string; + body: string; + created_at: string; + deleted_at?: string | null; + edited_at?: string | null; + id: string; + issue_id: string; + reply_to_comment_id?: string | null; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueEvent.ts b/src/client/models/ApiResponse_Vec_IssueEvent.ts new file mode 100644 index 0000000..dfafe03 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueEvent.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type ApiResponse_Vec_IssueEvent = { + data: Array<{ + actor_id?: string | null; + created_at: string; + event_type: EventType; + id: string; + issue_id: string; + metadata?: (null | Value); + new_value?: (null | Value); + old_value?: (null | Value); + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueLabel.ts b/src/client/models/ApiResponse_Vec_IssueLabel.ts new file mode 100644 index 0000000..fe1103d --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueLabel.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_IssueLabel = { + data: Array<{ + color: string; + created_at: string; + created_by?: string | null; + description?: string | null; + id: string; + name: string; + repo_id: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueLabelRelation.ts b/src/client/models/ApiResponse_Vec_IssueLabelRelation.ts new file mode 100644 index 0000000..38e19d1 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueLabelRelation.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_IssueLabelRelation = { + data: Array<{ + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + label_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueMilestone.ts b/src/client/models/ApiResponse_Vec_IssueMilestone.ts new file mode 100644 index 0000000..d986b06 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueMilestone.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_Vec_IssueMilestone = { + data: Array<{ + closed_at?: string | null; + created_at: string; + created_by: string; + description?: string | null; + due_at?: string | null; + id: string; + repo_id: string; + state: State; + title: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssuePrRelation.ts b/src/client/models/ApiResponse_Vec_IssuePrRelation.ts new file mode 100644 index 0000000..692961e --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssuePrRelation.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RelationType } from './RelationType'; +export type ApiResponse_Vec_IssuePrRelation = { + data: Array<{ + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + pull_request_id: string; + relation_type: RelationType; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueReaction.ts b/src/client/models/ApiResponse_Vec_IssueReaction.ts new file mode 100644 index 0000000..bca8f83 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueReaction.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +export type ApiResponse_Vec_IssueReaction = { + data: Array<{ + content: string; + created_at: string; + id: string; + issue_id: string; + target_id?: string | null; + target_type: TargetType; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueRepoRelation.ts b/src/client/models/ApiResponse_Vec_IssueRepoRelation.ts new file mode 100644 index 0000000..204e96f --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueRepoRelation.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RelationType } from './RelationType'; +export type ApiResponse_Vec_IssueRepoRelation = { + data: Array<{ + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + relation_type: RelationType; + repo_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueSubscriber.ts b/src/client/models/ApiResponse_Vec_IssueSubscriber.ts new file mode 100644 index 0000000..4f0a282 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueSubscriber.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_IssueSubscriber = { + data: Array<{ + created_at: string; + id: string; + issue_id: string; + muted: boolean; + reason: string; + updated_at: string; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_IssueTemplate.ts b/src/client/models/ApiResponse_Vec_IssueTemplate.ts new file mode 100644 index 0000000..afd1a72 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_IssueTemplate.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_IssueTemplate = { + data: Array<{ + active: boolean; + body_template: string; + created_at: string; + created_by: string; + description?: string | null; + id: string; + labels: Array; + name: string; + repo_id: string; + title_template?: string | null; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrAssignee.ts b/src/client/models/ApiResponse_Vec_PrAssignee.ts new file mode 100644 index 0000000..4ecaa3e --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrAssignee.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrAssignee = { + data: Array<{ + assigned_by?: string | null; + assignee_id: string; + created_at: string; + id: string; + pull_request_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrCheckRun.ts b/src/client/models/ApiResponse_Vec_PrCheckRun.ts new file mode 100644 index 0000000..ee78eb9 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrCheckRun.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type ApiResponse_Vec_PrCheckRun = { + data: Array<{ + commit_sha: string; + completed_at?: string | null; + conclusion?: (null | Status); + created_at: string; + details_url?: string | null; + external_id?: string | null; + id: string; + name: string; + pull_request_id: string; + started_at?: string | null; + status: Status; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrCommit.ts b/src/client/models/ApiResponse_Vec_PrCommit.ts new file mode 100644 index 0000000..755b362 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrCommit.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrCommit = { + data: Array<{ + authored_at?: string | null; + commit_sha: string; + committed_at?: string | null; + created_at: string; + id: string; + position: number; + pull_request_id: string; + repo_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrEvent.ts b/src/client/models/ApiResponse_Vec_PrEvent.ts new file mode 100644 index 0000000..eb991a9 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrEvent.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type ApiResponse_Vec_PrEvent = { + data: Array<{ + actor_id?: string | null; + created_at: string; + event_type: EventType; + id: string; + metadata?: (null | Value); + new_value?: (null | Value); + old_value?: (null | Value); + pull_request_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrFile.ts b/src/client/models/ApiResponse_Vec_PrFile.ts new file mode 100644 index 0000000..ce9df9c --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrFile.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type ApiResponse_Vec_PrFile = { + data: Array<{ + additions: number; + changes: number; + created_at: string; + deletions: number; + id: string; + old_path?: string | null; + patch?: string | null; + path: string; + pull_request_id: string; + status: Status; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrLabel.ts b/src/client/models/ApiResponse_Vec_PrLabel.ts new file mode 100644 index 0000000..243d537 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrLabel.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrLabel = { + data: Array<{ + color: string; + created_at: string; + created_by?: string | null; + description?: string | null; + id: string; + name: string; + repo_id: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrLabelRelation.ts b/src/client/models/ApiResponse_Vec_PrLabelRelation.ts new file mode 100644 index 0000000..94e285d --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrLabelRelation.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrLabelRelation = { + data: Array<{ + created_at: string; + created_by?: string | null; + id: string; + label_id: string; + pull_request_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrReaction.ts b/src/client/models/ApiResponse_Vec_PrReaction.ts new file mode 100644 index 0000000..b5ec7e7 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrReaction.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +export type ApiResponse_Vec_PrReaction = { + data: Array<{ + content: string; + created_at: string; + id: string; + pull_request_id: string; + target_id?: string | null; + target_type: TargetType; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrReview.ts b/src/client/models/ApiResponse_Vec_PrReview.ts new file mode 100644 index 0000000..562f514 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrReview.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrReview = { + data: Array<{ + author_id: string; + body?: string | null; + commit_sha?: string | null; + created_at: string; + dismiss_reason?: string | null; + dismissed_at?: string | null; + dismissed_by?: string | null; + id: string; + pull_request_id: string; + state: string; + submitted_at?: string | null; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrReviewComment.ts b/src/client/models/ApiResponse_Vec_PrReviewComment.ts new file mode 100644 index 0000000..5f9ceeb --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrReviewComment.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrReviewComment = { + data: Array<{ + author_id: string; + body: string; + created_at: string; + diff_hunk?: string | null; + edited_at?: string | null; + id: string; + in_reply_to_id?: string | null; + line?: number | null; + original_line?: number | null; + original_start_line?: number | null; + path: string; + pull_request_id: string; + review_id: string; + start_line?: number | null; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PrSubscription.ts b/src/client/models/ApiResponse_Vec_PrSubscription.ts new file mode 100644 index 0000000..944a737 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PrSubscription.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_PrSubscription = { + data: Array<{ + created_at: string; + id: string; + muted: boolean; + pull_request_id: string; + reason: string; + updated_at: string; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_PullRequest.ts b/src/client/models/ApiResponse_Vec_PullRequest.ts new file mode 100644 index 0000000..cf4c21c --- /dev/null +++ b/src/client/models/ApiResponse_Vec_PullRequest.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_Vec_PullRequest = { + data: Array<{ + author_id: string; + base_commit_sha?: string | null; + body?: string | null; + closed_at?: string | null; + closed_by?: string | null; + created_at: string; + deleted_at?: string | null; + draft: boolean; + head_commit_sha: string; + id: string; + locked: boolean; + merge_commit_sha?: string | null; + merged_at?: string | null; + merged_by?: string | null; + number: number; + repo_id: string; + source_branch: string; + source_repo_id: string; + state: State; + target_branch: string; + target_repo_id: string; + title: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_Repo.ts b/src/client/models/ApiResponse_Vec_Repo.ts new file mode 100644 index 0000000..be67423 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_Repo.ts @@ -0,0 +1,30 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { GitService } from './GitService'; +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type ApiResponse_Vec_Repo = { + data: Array<{ + archived_at?: string | null; + created_at: string; + default_branch: string; + deleted_at?: string | null; + description?: string | null; + forked_from_repo_id?: string | null; + git_service: GitService; + id: string; + is_fork: boolean; + name: string; + owner_id: string; + primary_storage_node_id: string; + status: Status; + storage_node_ids: Array; + storage_path: string; + updated_at: string; + visibility: Visibility; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoBranch.ts b/src/client/models/ApiResponse_Vec_RepoBranch.ts new file mode 100644 index 0000000..30943aa --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoBranch.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_RepoBranch = { + data: Array<{ + commit_sha: string; + created_at: string; + created_by?: string | null; + default_branch: boolean; + id: string; + last_push_at?: string | null; + last_push_id?: string | null; + name: string; + protected: boolean; + repo_id: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoCommitComment.ts b/src/client/models/ApiResponse_Vec_RepoCommitComment.ts new file mode 100644 index 0000000..195b4d4 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoCommitComment.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_RepoCommitComment = { + data: Array<{ + author_id: string; + body: string; + commit_sha: string; + created_at: string; + deleted_at?: string | null; + id: string; + line?: number | null; + path?: string | null; + push_commit_id: string; + repo_id: string; + resolved: boolean; + resolved_at?: string | null; + resolved_by?: string | null; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoCommitStatus.ts b/src/client/models/ApiResponse_Vec_RepoCommitStatus.ts new file mode 100644 index 0000000..a083aa6 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoCommitStatus.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type ApiResponse_Vec_RepoCommitStatus = { + data: Array<{ + context: string; + created_at: string; + description?: string | null; + id: string; + latest_commit_sha: string; + push_commit_id: string; + repo_id: string; + reported_at: string; + reported_by?: string | null; + state: State; + target_url?: string | null; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoDeployKey.ts b/src/client/models/ApiResponse_Vec_RepoDeployKey.ts new file mode 100644 index 0000000..3317b6d --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoDeployKey.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { KeyType } from './KeyType'; +export type ApiResponse_Vec_RepoDeployKey = { + data: Array<{ + created_at: string; + created_by: string; + expires_at?: string | null; + fingerprint_sha256: string; + id: string; + key_type: KeyType; + last_used_at?: string | null; + public_key: string; + read_only: boolean; + repo_id: string; + revoked_at?: string | null; + title: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoFork.ts b/src/client/models/ApiResponse_Vec_RepoFork.ts new file mode 100644 index 0000000..787d006 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoFork.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_RepoFork = { + data: Array<{ + created_at: string; + fork_repo_id: string; + forked_by: string; + id: string; + parent_repo_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoInvitation.ts b/src/client/models/ApiResponse_Vec_RepoInvitation.ts new file mode 100644 index 0000000..a4477a2 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoInvitation.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +export type ApiResponse_Vec_RepoInvitation = { + data: Array<{ + accepted_at?: string | null; + accepted_by?: string | null; + created_at: string; + email: string; + expires_at: string; + id: string; + invited_by: string; + repo_id: string; + revoked_at?: string | null; + role: Role; + token_hash: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoMember.ts b/src/client/models/ApiResponse_Vec_RepoMember.ts new file mode 100644 index 0000000..64b01da --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoMember.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +export type ApiResponse_Vec_RepoMember = { + data: Array<{ + created_at: string; + id: string; + invited_by?: string | null; + joined_at?: string | null; + last_active_at?: string | null; + repo_id: string; + role: Role; + status: Status; + updated_at: string; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoRelease.ts b/src/client/models/ApiResponse_Vec_RepoRelease.ts new file mode 100644 index 0000000..0db4d70 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoRelease.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_RepoRelease = { + data: Array<{ + author_id: string; + body?: string | null; + created_at: string; + deleted_at?: string | null; + draft: boolean; + id: string; + prerelease: boolean; + published_at?: string | null; + repo_id: string; + tag_id?: string | null; + tag_name: string; + title: string; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoStar.ts b/src/client/models/ApiResponse_Vec_RepoStar.ts new file mode 100644 index 0000000..bac8b31 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoStar.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_RepoStar = { + data: Array<{ + created_at: string; + id: string; + repo_id: string; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoTag.ts b/src/client/models/ApiResponse_Vec_RepoTag.ts new file mode 100644 index 0000000..245c4bd --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoTag.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_RepoTag = { + data: Array<{ + created_at: string; + id: string; + message?: string | null; + name: string; + repo_id: string; + signed: boolean; + tagger_id?: string | null; + target_commit_sha: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoWatch.ts b/src/client/models/ApiResponse_Vec_RepoWatch.ts new file mode 100644 index 0000000..a0e2389 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoWatch.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { SubscriptionLevel } from './SubscriptionLevel'; +export type ApiResponse_Vec_RepoWatch = { + data: Array<{ + created_at: string; + id: string; + level: SubscriptionLevel; + repo_id: string; + updated_at: string; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_RepoWebhook.ts b/src/client/models/ApiResponse_Vec_RepoWebhook.ts new file mode 100644 index 0000000..4ef08bd --- /dev/null +++ b/src/client/models/ApiResponse_Vec_RepoWebhook.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type ApiResponse_Vec_RepoWebhook = { + data: Array<{ + active: boolean; + created_at: string; + created_by: string; + events: Array; + id: string; + last_delivery_at?: string | null; + last_delivery_status?: string | null; + repo_id: string; + secret_ciphertext?: string | null; + updated_at: string; + url: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserDevice.ts b/src/client/models/ApiResponse_Vec_UserDevice.ts new file mode 100644 index 0000000..43de4df --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserDevice.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { DeviceType } from './DeviceType'; +export type ApiResponse_Vec_UserDevice = { + data: Array<{ + created_at: string; + device_name: string; + device_type: DeviceType; + fingerprint?: string | null; + id: string; + ip_address?: string | null; + last_seen_at?: string | null; + trusted: boolean; + updated_at: string; + user_agent?: string | null; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserGpgKey.ts b/src/client/models/ApiResponse_Vec_UserGpgKey.ts new file mode 100644 index 0000000..6dd5640 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserGpgKey.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_UserGpgKey = { + data: Array<{ + created_at: string; + expires_at?: string | null; + fingerprint: string; + id: string; + key_id: string; + primary_email?: string | null; + public_key: string; + revoked_at?: string | null; + updated_at: string; + user_id: string; + verified_at?: string | null; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserOAuthInfo.ts b/src/client/models/ApiResponse_Vec_UserOAuthInfo.ts new file mode 100644 index 0000000..c61a9b2 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserOAuthInfo.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Provider } from './Provider'; +export type ApiResponse_Vec_UserOAuthInfo = { + data: Array<{ + id: string; + last_used_at?: string | null; + linked_at: string; + provider: Provider; + provider_email?: string | null; + provider_user_id: string; + provider_username?: string | null; + token_expires_at?: string | null; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserPersonalAccessTokenInfo.ts b/src/client/models/ApiResponse_Vec_UserPersonalAccessTokenInfo.ts new file mode 100644 index 0000000..afc1dfc --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserPersonalAccessTokenInfo.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Scope } from './Scope'; +export type ApiResponse_Vec_UserPersonalAccessTokenInfo = { + data: Array<{ + created_at: string; + expires_at?: string | null; + id: string; + last_used_at?: string | null; + name: string; + revoked_at?: string | null; + scopes: Array; + updated_at: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserSecurityLog.ts b/src/client/models/ApiResponse_Vec_UserSecurityLog.ts new file mode 100644 index 0000000..827ef97 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserSecurityLog.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type ApiResponse_Vec_UserSecurityLog = { + data: Array<{ + created_at: string; + description?: string | null; + event_type: EventType; + id: string; + ip_address?: string | null; + metadata?: (null | Value); + user_agent?: string | null; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserSessionInfo.ts b/src/client/models/ApiResponse_Vec_UserSessionInfo.ts new file mode 100644 index 0000000..8b1e5d4 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserSessionInfo.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_UserSessionInfo = { + data: Array<{ + created_at: string; + expires_at: string; + id: string; + ip_address?: string | null; + last_active_at: string; + revoked_at?: string | null; + user_agent?: string | null; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_UserSshKey.ts b/src/client/models/ApiResponse_Vec_UserSshKey.ts new file mode 100644 index 0000000..cc3a2e2 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_UserSshKey.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { KeyType } from './KeyType'; +export type ApiResponse_Vec_UserSshKey = { + data: Array<{ + created_at: string; + expires_at?: string | null; + fingerprint_sha256: string; + id: string; + key_type: KeyType; + last_used_at?: string | null; + public_key: string; + revoked_at?: string | null; + title: string; + updated_at: string; + user_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WikiPage.ts b/src/client/models/ApiResponse_Vec_WikiPage.ts new file mode 100644 index 0000000..8401365 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WikiPage.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_WikiPage = { + data: Array<{ + author_id: string; + content: string; + created_at: string; + deleted_at?: string | null; + id: string; + last_editor_id?: string | null; + repo_id: string; + slug: string; + title: string; + updated_at: string; + version: number; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WikiPageRevision.ts b/src/client/models/ApiResponse_Vec_WikiPageRevision.ts new file mode 100644 index 0000000..86599d8 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WikiPageRevision.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_WikiPageRevision = { + data: Array<{ + commit_message?: string | null; + content: string; + created_at: string; + editor_id: string; + id: string; + page_id: string; + title: string; + version: number; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_Workspace.ts b/src/client/models/ApiResponse_Vec_Workspace.ts new file mode 100644 index 0000000..c289c6e --- /dev/null +++ b/src/client/models/ApiResponse_Vec_Workspace.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type ApiResponse_Vec_Workspace = { + data: Array<{ + archived_at?: string | null; + avatar_url?: string | null; + created_at: string; + default_role: string; + deleted_at?: string | null; + description?: string | null; + id: string; + is_personal: boolean; + name: string; + owner_id: string; + plan: string; + status: Status; + updated_at: string; + visibility: Visibility; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspaceAuditLog.ts b/src/client/models/ApiResponse_Vec_WorkspaceAuditLog.ts new file mode 100644 index 0000000..7cff5a2 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspaceAuditLog.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +import type { Value } from './Value'; +export type ApiResponse_Vec_WorkspaceAuditLog = { + data: Array<{ + action: string; + actor_id?: string | null; + created_at: string; + id: string; + ip_address?: string | null; + metadata?: (null | Value); + target_id?: string | null; + target_type?: (null | TargetType); + user_agent?: string | null; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspaceDomain.ts b/src/client/models/ApiResponse_Vec_WorkspaceDomain.ts new file mode 100644 index 0000000..af93a0d --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspaceDomain.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_Vec_WorkspaceDomain = { + data: Array<{ + created_at: string; + domain: string; + id: string; + is_primary: boolean; + is_verified: boolean; + updated_at: string; + verification_token_hash?: string | null; + verified_at?: string | null; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspaceIntegration.ts b/src/client/models/ApiResponse_Vec_WorkspaceIntegration.ts new file mode 100644 index 0000000..d788ac4 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspaceIntegration.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Provider } from './Provider'; +export type ApiResponse_Vec_WorkspaceIntegration = { + data: Array<{ + config: any; + created_at: string; + enabled: boolean; + id: string; + installed_by: string; + last_used_at?: string | null; + name: string; + provider: Provider; + secret_ciphertext?: string | null; + updated_at: string; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspaceInvitation.ts b/src/client/models/ApiResponse_Vec_WorkspaceInvitation.ts new file mode 100644 index 0000000..7e2b75d --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspaceInvitation.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +export type ApiResponse_Vec_WorkspaceInvitation = { + data: Array<{ + accepted_at?: string | null; + accepted_by?: string | null; + created_at: string; + email: string; + expires_at: string; + id: string; + invited_by: string; + revoked_at?: string | null; + role: Role; + token_hash: string; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspaceMember.ts b/src/client/models/ApiResponse_Vec_WorkspaceMember.ts new file mode 100644 index 0000000..af438c0 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspaceMember.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +export type ApiResponse_Vec_WorkspaceMember = { + data: Array<{ + created_at: string; + id: string; + invited_by?: string | null; + joined_at?: string | null; + last_active_at?: string | null; + role: Role; + status: Status; + updated_at: string; + user_id: string; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspacePendingApproval.ts b/src/client/models/ApiResponse_Vec_WorkspacePendingApproval.ts new file mode 100644 index 0000000..b7b2c0d --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspacePendingApproval.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RequestType } from './RequestType'; +import type { Status } from './Status'; +export type ApiResponse_Vec_WorkspacePendingApproval = { + data: Array<{ + created_at: string; + expires_at?: string | null; + id: string; + reason?: string | null; + request_type: RequestType; + requester_id: string; + reviewed_at?: string | null; + reviewed_by?: string | null; + status: Status; + updated_at: string; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_Vec_WorkspaceWebhook.ts b/src/client/models/ApiResponse_Vec_WorkspaceWebhook.ts new file mode 100644 index 0000000..02133d1 --- /dev/null +++ b/src/client/models/ApiResponse_Vec_WorkspaceWebhook.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type ApiResponse_Vec_WorkspaceWebhook = { + data: Array<{ + active: boolean; + created_at: string; + created_by: string; + events: Array; + id: string; + last_delivery_at?: string | null; + last_delivery_status?: string | null; + secret_ciphertext?: string | null; + updated_at: string; + url: string; + workspace_id: string; + }>; +}; + diff --git a/src/client/models/ApiResponse_WikiCompareResult.ts b/src/client/models/ApiResponse_WikiCompareResult.ts new file mode 100644 index 0000000..1a810d7 --- /dev/null +++ b/src/client/models/ApiResponse_WikiCompareResult.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { WikiPageRevision } from './WikiPageRevision'; +export type ApiResponse_WikiCompareResult = { + /** + * Result of comparing two wiki page revisions + */ + data: { + /** + * The newer revision being compared + */ + new: WikiPageRevision; + /** + * The older revision being compared + */ + old: WikiPageRevision; + }; +}; + diff --git a/src/client/models/ApiResponse_WikiPage.ts b/src/client/models/ApiResponse_WikiPage.ts new file mode 100644 index 0000000..63f9b4e --- /dev/null +++ b/src/client/models/ApiResponse_WikiPage.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_WikiPage = { + data: { + author_id: string; + content: string; + created_at: string; + deleted_at?: string | null; + id: string; + last_editor_id?: string | null; + repo_id: string; + slug: string; + title: string; + updated_at: string; + version: number; + }; +}; + diff --git a/src/client/models/ApiResponse_WikiPageRevision.ts b/src/client/models/ApiResponse_WikiPageRevision.ts new file mode 100644 index 0000000..29f2acb --- /dev/null +++ b/src/client/models/ApiResponse_WikiPageRevision.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_WikiPageRevision = { + data: { + commit_message?: string | null; + content: string; + created_at: string; + editor_id: string; + id: string; + page_id: string; + title: string; + version: number; + }; +}; + diff --git a/src/client/models/ApiResponse_Workspace.ts b/src/client/models/ApiResponse_Workspace.ts new file mode 100644 index 0000000..211913e --- /dev/null +++ b/src/client/models/ApiResponse_Workspace.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type ApiResponse_Workspace = { + data: { + archived_at?: string | null; + avatar_url?: string | null; + created_at: string; + default_role: string; + deleted_at?: string | null; + description?: string | null; + id: string; + is_personal: boolean; + name: string; + owner_id: string; + plan: string; + status: Status; + updated_at: string; + visibility: Visibility; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceBilling.ts b/src/client/models/ApiResponse_WorkspaceBilling.ts new file mode 100644 index 0000000..1c50315 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceBilling.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type ApiResponse_WorkspaceBilling = { + data: { + billing_email?: string | null; + canceled_at?: string | null; + created_at: string; + current_period_end?: string | null; + current_period_start?: string | null; + customer_id?: string | null; + plan: string; + seats: number; + status: Status; + subscription_id?: string | null; + trial_ends_at?: string | null; + updated_at: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceCustomBranding.ts b/src/client/models/ApiResponse_WorkspaceCustomBranding.ts new file mode 100644 index 0000000..c07b222 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceCustomBranding.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_WorkspaceCustomBranding = { + data: { + accent_color?: string | null; + created_at: string; + custom_css?: string | null; + enabled: boolean; + favicon_url?: string | null; + logo_url?: string | null; + primary_color?: string | null; + support_url?: string | null; + updated_at: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceDomain.ts b/src/client/models/ApiResponse_WorkspaceDomain.ts new file mode 100644 index 0000000..6d6b227 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceDomain.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_WorkspaceDomain = { + data: { + created_at: string; + domain: string; + id: string; + is_primary: boolean; + is_verified: boolean; + updated_at: string; + verification_token_hash?: string | null; + verified_at?: string | null; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceIntegration.ts b/src/client/models/ApiResponse_WorkspaceIntegration.ts new file mode 100644 index 0000000..d15090e --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceIntegration.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Provider } from './Provider'; +export type ApiResponse_WorkspaceIntegration = { + data: { + config: any; + created_at: string; + enabled: boolean; + id: string; + installed_by: string; + last_used_at?: string | null; + name: string; + provider: Provider; + secret_ciphertext?: string | null; + updated_at: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceInvitation.ts b/src/client/models/ApiResponse_WorkspaceInvitation.ts new file mode 100644 index 0000000..e87862d --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceInvitation.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +export type ApiResponse_WorkspaceInvitation = { + data: { + accepted_at?: string | null; + accepted_by?: string | null; + created_at: string; + email: string; + expires_at: string; + id: string; + invited_by: string; + revoked_at?: string | null; + role: Role; + token_hash: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceMember.ts b/src/client/models/ApiResponse_WorkspaceMember.ts new file mode 100644 index 0000000..66232f1 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceMember.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +export type ApiResponse_WorkspaceMember = { + data: { + created_at: string; + id: string; + invited_by?: string | null; + joined_at?: string | null; + last_active_at?: string | null; + role: Role; + status: Status; + updated_at: string; + user_id: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspacePendingApproval.ts b/src/client/models/ApiResponse_WorkspacePendingApproval.ts new file mode 100644 index 0000000..aa87f9e --- /dev/null +++ b/src/client/models/ApiResponse_WorkspacePendingApproval.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RequestType } from './RequestType'; +import type { Status } from './Status'; +export type ApiResponse_WorkspacePendingApproval = { + data: { + created_at: string; + expires_at?: string | null; + id: string; + reason?: string | null; + request_type: RequestType; + requester_id: string; + reviewed_at?: string | null; + reviewed_by?: string | null; + status: Status; + updated_at: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceSettings.ts b/src/client/models/ApiResponse_WorkspaceSettings.ts new file mode 100644 index 0000000..a76b114 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceSettings.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_WorkspaceSettings = { + data: { + allow_member_invites: boolean; + allow_public_repos: boolean; + created_at: string; + default_branch_name: string; + default_repo_visibility: string; + issue_tracking_enabled: boolean; + pull_requests_enabled: boolean; + require_two_factor: boolean; + updated_at: string; + wiki_enabled: boolean; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceStats.ts b/src/client/models/ApiResponse_WorkspaceStats.ts new file mode 100644 index 0000000..fb430d1 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceStats.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ApiResponse_WorkspaceStats = { + data: { + bandwidth_bytes: number; + build_minutes_used: number; + issues_count: number; + last_activity_at?: string | null; + members_count: number; + pull_requests_count: number; + repos_count: number; + storage_bytes: number; + updated_at: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/ApiResponse_WorkspaceWebhook.ts b/src/client/models/ApiResponse_WorkspaceWebhook.ts new file mode 100644 index 0000000..073ad44 --- /dev/null +++ b/src/client/models/ApiResponse_WorkspaceWebhook.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type ApiResponse_WorkspaceWebhook = { + data: { + active: boolean; + created_at: string; + created_by: string; + events: Array; + id: string; + last_delivery_at?: string | null; + last_delivery_status?: string | null; + secret_ciphertext?: string | null; + updated_at: string; + url: string; + workspace_id: string; + }; +}; + diff --git a/src/client/models/BranchMergeCheck.ts b/src/client/models/BranchMergeCheck.ts new file mode 100644 index 0000000..567bc0f --- /dev/null +++ b/src/client/models/BranchMergeCheck.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type BranchMergeCheck = { + allowed: boolean; + reasons: Array; +}; + diff --git a/src/client/models/BranchProtectionRule.ts b/src/client/models/BranchProtectionRule.ts new file mode 100644 index 0000000..a2c85da --- /dev/null +++ b/src/client/models/BranchProtectionRule.ts @@ -0,0 +1,27 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type BranchProtectionRule = { + allow_deletions: boolean; + allow_force_pushes: boolean; + created_at: string; + created_by?: string | null; + dismiss_stale_reviews: boolean; + dismissal_allowances: Array; + id: string; + pattern: string; + push_allowances: Array; + repo_id: string; + require_approvals: number; + require_code_owner_review: boolean; + require_conversation_resolution: boolean; + require_linear_history: boolean; + require_signed_commits: boolean; + require_status_checks: boolean; + required_status_checks: Array; + restrict_pushes: boolean; + restrict_review_dismissal: boolean; + updated_at: string; +}; + diff --git a/src/client/models/CaptchaQuery.ts b/src/client/models/CaptchaQuery.ts new file mode 100644 index 0000000..2b16d61 --- /dev/null +++ b/src/client/models/CaptchaQuery.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CaptchaQuery = { + dark: boolean; + 'h': number; + rsa: boolean; + 'w': number; +}; + diff --git a/src/client/models/CaptchaResponse.ts b/src/client/models/CaptchaResponse.ts new file mode 100644 index 0000000..b8472fa --- /dev/null +++ b/src/client/models/CaptchaResponse.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { CaptchaQuery } from './CaptchaQuery'; +import type { RsaResponse } from './RsaResponse'; +export type CaptchaResponse = { + base64: string; + req: CaptchaQuery; + rsa?: (null | RsaResponse); +}; + diff --git a/src/client/models/ColorScheme.ts b/src/client/models/ColorScheme.ts new file mode 100644 index 0000000..085f8c1 --- /dev/null +++ b/src/client/models/ColorScheme.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ColorScheme = 'System' | 'Light' | 'Dark' | 'HighContrast' | 'Unknown'; diff --git a/src/client/models/ContextMe.ts b/src/client/models/ContextMe.ts new file mode 100644 index 0000000..ab13168 --- /dev/null +++ b/src/client/models/ContextMe.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ContextMe = { + avatar_url?: string | null; + display_name?: string | null; + has_unread_notifications: number; + id: string; + language: string; + timezone: string; + username: string; +}; + diff --git a/src/client/models/CreateBranchParams.ts b/src/client/models/CreateBranchParams.ts new file mode 100644 index 0000000..ffcbb05 --- /dev/null +++ b/src/client/models/CreateBranchParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateBranchParams = { + commit_sha: string; + name: string; +}; + diff --git a/src/client/models/CreateCheckRunParams.ts b/src/client/models/CreateCheckRunParams.ts new file mode 100644 index 0000000..3f74363 --- /dev/null +++ b/src/client/models/CreateCheckRunParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateCheckRunParams = { + commit_sha: string; + conclusion?: string | null; + details_url?: string | null; + external_id?: string | null; + name: string; + status: string; +}; + diff --git a/src/client/models/CreateCommentParams.ts b/src/client/models/CreateCommentParams.ts new file mode 100644 index 0000000..795bfa0 --- /dev/null +++ b/src/client/models/CreateCommentParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateCommentParams = { + body: string; + reply_to_comment_id?: string | null; +}; + diff --git a/src/client/models/CreateCommitCommentParams.ts b/src/client/models/CreateCommitCommentParams.ts new file mode 100644 index 0000000..bb0b1b8 --- /dev/null +++ b/src/client/models/CreateCommitCommentParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateCommitCommentParams = { + body: string; + commit_sha: string; + line?: number | null; + path?: string | null; + push_commit_id: string; +}; + diff --git a/src/client/models/CreateCommitStatusParams.ts b/src/client/models/CreateCommitStatusParams.ts new file mode 100644 index 0000000..0c43395 --- /dev/null +++ b/src/client/models/CreateCommitStatusParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateCommitStatusParams = { + context: string; + description?: string | null; + latest_commit_sha: string; + push_commit_id: string; + state: string; + target_url?: string | null; +}; + diff --git a/src/client/models/CreateIntegrationParams.ts b/src/client/models/CreateIntegrationParams.ts new file mode 100644 index 0000000..9d3e96c --- /dev/null +++ b/src/client/models/CreateIntegrationParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { WorkspaceIntegrationConfig } from './WorkspaceIntegrationConfig'; +export type CreateIntegrationParams = { + config?: (null | WorkspaceIntegrationConfig); + enabled?: boolean | null; + name: string; + provider: string; + secret_ciphertext?: string | null; +}; + diff --git a/src/client/models/CreateInvitationParams.ts b/src/client/models/CreateInvitationParams.ts new file mode 100644 index 0000000..0495407 --- /dev/null +++ b/src/client/models/CreateInvitationParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateInvitationParams = { + email: string; + role?: string | null; +}; + diff --git a/src/client/models/CreateInvitationResponse.ts b/src/client/models/CreateInvitationResponse.ts new file mode 100644 index 0000000..c6dde5a --- /dev/null +++ b/src/client/models/CreateInvitationResponse.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { WorkspaceInvitation } from './WorkspaceInvitation'; +export type CreateInvitationResponse = { + invitation: WorkspaceInvitation; +}; + diff --git a/src/client/models/CreateIssueParams.ts b/src/client/models/CreateIssueParams.ts new file mode 100644 index 0000000..a26e923 --- /dev/null +++ b/src/client/models/CreateIssueParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateIssueParams = { + assignee_ids: Array; + body?: string | null; + due_at?: string | null; + label_ids: Array; + milestone_id?: string | null; + priority?: string | null; + repo_ids: Array; + title: string; + visibility?: string | null; +}; + diff --git a/src/client/models/CreateIssueReactionParams.ts b/src/client/models/CreateIssueReactionParams.ts new file mode 100644 index 0000000..48b273f --- /dev/null +++ b/src/client/models/CreateIssueReactionParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateIssueReactionParams = { + content: string; + target_id?: string | null; + target_type?: string | null; +}; + diff --git a/src/client/models/CreateLabelParams.ts b/src/client/models/CreateLabelParams.ts new file mode 100644 index 0000000..67d49c4 --- /dev/null +++ b/src/client/models/CreateLabelParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateLabelParams = { + color: string; + description?: string | null; + name: string; +}; + diff --git a/src/client/models/CreateMilestoneParams.ts b/src/client/models/CreateMilestoneParams.ts new file mode 100644 index 0000000..895b5ed --- /dev/null +++ b/src/client/models/CreateMilestoneParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateMilestoneParams = { + description?: string | null; + due_at?: string | null; + title: string; +}; + diff --git a/src/client/models/CreatePrLabelParams.ts b/src/client/models/CreatePrLabelParams.ts new file mode 100644 index 0000000..dd29b75 --- /dev/null +++ b/src/client/models/CreatePrLabelParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreatePrLabelParams = { + color: string; + description?: string | null; + name: string; +}; + diff --git a/src/client/models/CreatePrParams.ts b/src/client/models/CreatePrParams.ts new file mode 100644 index 0000000..603644a --- /dev/null +++ b/src/client/models/CreatePrParams.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreatePrParams = { + base_commit_sha?: string | null; + body?: string | null; + draft?: boolean | null; + head_commit_sha: string; + source_branch: string; + source_repo_id: string; + target_branch: string; + title: string; +}; + diff --git a/src/client/models/CreateProtectionRuleParams.ts b/src/client/models/CreateProtectionRuleParams.ts new file mode 100644 index 0000000..7241d2f --- /dev/null +++ b/src/client/models/CreateProtectionRuleParams.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateProtectionRuleParams = { + allow_deletions?: boolean | null; + allow_force_pushes?: boolean | null; + dismiss_stale_reviews?: boolean | null; + dismissal_allowances?: any[] | null; + pattern: string; + push_allowances?: any[] | null; + require_approvals?: number | null; + require_code_owner_review?: boolean | null; + require_conversation_resolution?: boolean | null; + require_linear_history?: boolean | null; + require_signed_commits?: boolean | null; + require_status_checks?: boolean | null; + required_status_checks?: any[] | null; + restrict_pushes?: boolean | null; + restrict_review_dismissal?: boolean | null; +}; + diff --git a/src/client/models/CreateReactionParams.ts b/src/client/models/CreateReactionParams.ts new file mode 100644 index 0000000..f4f4fa7 --- /dev/null +++ b/src/client/models/CreateReactionParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateReactionParams = { + content: string; + target_id?: string | null; + target_type?: string | null; +}; + diff --git a/src/client/models/CreateReleaseParams.ts b/src/client/models/CreateReleaseParams.ts new file mode 100644 index 0000000..1147ed9 --- /dev/null +++ b/src/client/models/CreateReleaseParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateReleaseParams = { + body?: string | null; + draft?: boolean | null; + prerelease?: boolean | null; + tag_id?: string | null; + tag_name: string; + title: string; +}; + diff --git a/src/client/models/CreateRepoInvitationParams.ts b/src/client/models/CreateRepoInvitationParams.ts new file mode 100644 index 0000000..8da4fb9 --- /dev/null +++ b/src/client/models/CreateRepoInvitationParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateRepoInvitationParams = { + email: string; + role?: string | null; +}; + diff --git a/src/client/models/CreateRepoParams.ts b/src/client/models/CreateRepoParams.ts new file mode 100644 index 0000000..dc0cb36 --- /dev/null +++ b/src/client/models/CreateRepoParams.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateRepoParams = { + default_branch?: string | null; + description?: string | null; + git_service?: string | null; + name: string; + storage_node_ids?: any[] | null; + storage_path?: string | null; + visibility?: string | null; +}; + diff --git a/src/client/models/CreateReviewParams.ts b/src/client/models/CreateReviewParams.ts new file mode 100644 index 0000000..c93429c --- /dev/null +++ b/src/client/models/CreateReviewParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateReviewParams = { + body?: string | null; + comments?: any[] | null; + commit_sha?: string | null; + state?: string | null; +}; + diff --git a/src/client/models/CreateTagParams.ts b/src/client/models/CreateTagParams.ts new file mode 100644 index 0000000..af13f2f --- /dev/null +++ b/src/client/models/CreateTagParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateTagParams = { + message?: string | null; + name: string; + target_commit_sha: string; +}; + diff --git a/src/client/models/CreateTemplateParams.ts b/src/client/models/CreateTemplateParams.ts new file mode 100644 index 0000000..bc4b005 --- /dev/null +++ b/src/client/models/CreateTemplateParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateTemplateParams = { + body_template: string; + description?: string | null; + labels: Array; + name: string; + title_template?: string | null; +}; + diff --git a/src/client/models/CreateWebhookParams.ts b/src/client/models/CreateWebhookParams.ts new file mode 100644 index 0000000..c33e2fc --- /dev/null +++ b/src/client/models/CreateWebhookParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type CreateWebhookParams = { + active?: boolean | null; + events: Array; + secret_ciphertext?: string | null; + url: string; +}; + diff --git a/src/client/models/CreateWikiPageParams.ts b/src/client/models/CreateWikiPageParams.ts new file mode 100644 index 0000000..2633ce8 --- /dev/null +++ b/src/client/models/CreateWikiPageParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateWikiPageParams = { + content: string; + title: string; +}; + diff --git a/src/client/models/CreateWorkspaceParams.ts b/src/client/models/CreateWorkspaceParams.ts new file mode 100644 index 0000000..09c0987 --- /dev/null +++ b/src/client/models/CreateWorkspaceParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type CreateWorkspaceParams = { + description?: string | null; + name: string; + visibility?: string | null; +}; + diff --git a/src/client/models/Density.ts b/src/client/models/Density.ts new file mode 100644 index 0000000..067f461 --- /dev/null +++ b/src/client/models/Density.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Density = 'Compact' | 'Comfortable' | 'Spacious' | 'Unknown'; diff --git a/src/client/models/DeviceType.ts b/src/client/models/DeviceType.ts new file mode 100644 index 0000000..65ae16c --- /dev/null +++ b/src/client/models/DeviceType.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type DeviceType = 'Desktop' | 'Laptop' | 'Mobile' | 'Tablet' | 'Browser' | 'Cli' | 'Api' | 'Unknown'; diff --git a/src/client/models/DigestFrequency.ts b/src/client/models/DigestFrequency.ts new file mode 100644 index 0000000..0396fd0 --- /dev/null +++ b/src/client/models/DigestFrequency.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type DigestFrequency = 'Never' | 'Daily' | 'Weekly' | 'Monthly' | 'Realtime' | 'Unknown'; diff --git a/src/client/models/Disable2FAParams.ts b/src/client/models/Disable2FAParams.ts new file mode 100644 index 0000000..b2b62ca --- /dev/null +++ b/src/client/models/Disable2FAParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Disable2FAParams = { + code: string; + password: string; +}; + diff --git a/src/client/models/DismissReviewParams.ts b/src/client/models/DismissReviewParams.ts new file mode 100644 index 0000000..550d5a5 --- /dev/null +++ b/src/client/models/DismissReviewParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type DismissReviewParams = { + reason: string; +}; + diff --git a/src/client/models/EmailChangeRequest.ts b/src/client/models/EmailChangeRequest.ts new file mode 100644 index 0000000..60bcb40 --- /dev/null +++ b/src/client/models/EmailChangeRequest.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type EmailChangeRequest = { + new_email: string; + password: string; +}; + diff --git a/src/client/models/EmailResponse.ts b/src/client/models/EmailResponse.ts new file mode 100644 index 0000000..ab6e364 --- /dev/null +++ b/src/client/models/EmailResponse.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type EmailResponse = { + email?: string | null; +}; + diff --git a/src/client/models/EmailVerifyRequest.ts b/src/client/models/EmailVerifyRequest.ts new file mode 100644 index 0000000..e74bedf --- /dev/null +++ b/src/client/models/EmailVerifyRequest.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type EmailVerifyRequest = { + token: string; +}; + diff --git a/src/client/models/Enable2FAResponse.ts b/src/client/models/Enable2FAResponse.ts new file mode 100644 index 0000000..4e48dd6 --- /dev/null +++ b/src/client/models/Enable2FAResponse.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Enable2FAResponse = { + backup_codes: Array; + qr_code: string; + secret: string; +}; + diff --git a/src/client/models/EventType.ts b/src/client/models/EventType.ts new file mode 100644 index 0000000..670676c --- /dev/null +++ b/src/client/models/EventType.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type EventType = 'Created' | 'Updated' | 'Deleted' | 'Closed' | 'Reopened' | 'Assigned' | 'Unassigned' | 'Labeled' | 'Unlabeled' | 'Commented' | 'Mentioned' | 'Pushed' | 'Merged' | 'Reviewed' | 'Archived' | 'Restored' | 'Joined' | 'Left' | 'Invited' | 'Accepted' | 'Revoked' | 'DraftReady' | 'Unknown'; diff --git a/src/client/models/FontSize.ts b/src/client/models/FontSize.ts new file mode 100644 index 0000000..af016d2 --- /dev/null +++ b/src/client/models/FontSize.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type FontSize = 'Small' | 'Medium' | 'Large' | 'ExtraLarge' | 'Unknown'; diff --git a/src/client/models/ForkRepoParams.ts b/src/client/models/ForkRepoParams.ts new file mode 100644 index 0000000..1602e33 --- /dev/null +++ b/src/client/models/ForkRepoParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ForkRepoParams = { + name?: string | null; + target_workspace_name?: string | null; +}; + diff --git a/src/client/models/Get2FAStatusResponse.ts b/src/client/models/Get2FAStatusResponse.ts new file mode 100644 index 0000000..8ffbac6 --- /dev/null +++ b/src/client/models/Get2FAStatusResponse.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Get2FAStatusResponse = { + has_backup_codes: boolean; + is_enabled: boolean; + method?: string | null; +}; + diff --git a/src/client/models/GitService.ts b/src/client/models/GitService.ts new file mode 100644 index 0000000..6417c2d --- /dev/null +++ b/src/client/models/GitService.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type GitService = 'Local' | 'Gitea' | 'Gitlab' | 'Github' | 'Unknown'; diff --git a/src/client/models/Issue.ts b/src/client/models/Issue.ts new file mode 100644 index 0000000..9d66bcb --- /dev/null +++ b/src/client/models/Issue.ts @@ -0,0 +1,27 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Priority } from './Priority'; +import type { State } from './State'; +import type { Visibility } from './Visibility'; +export type Issue = { + author_id: string; + body?: string | null; + closed_at?: string | null; + closed_by?: string | null; + created_at: string; + deleted_at?: string | null; + due_at?: string | null; + id: string; + locked: boolean; + milestone_id?: string | null; + number: number; + priority: Priority; + state: State; + title: string; + updated_at: string; + visibility: Visibility; + workspace_id: string; +}; + diff --git a/src/client/models/IssueAssignee.ts b/src/client/models/IssueAssignee.ts new file mode 100644 index 0000000..17309fa --- /dev/null +++ b/src/client/models/IssueAssignee.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueAssignee = { + assigned_by?: string | null; + assignee_id: string; + created_at: string; + id: string; + issue_id: string; +}; + diff --git a/src/client/models/IssueComment.ts b/src/client/models/IssueComment.ts new file mode 100644 index 0000000..9dd4660 --- /dev/null +++ b/src/client/models/IssueComment.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueComment = { + author_id: string; + body: string; + created_at: string; + deleted_at?: string | null; + edited_at?: string | null; + id: string; + issue_id: string; + reply_to_comment_id?: string | null; + updated_at: string; +}; + diff --git a/src/client/models/IssueEvent.ts b/src/client/models/IssueEvent.ts new file mode 100644 index 0000000..f6ec8dc --- /dev/null +++ b/src/client/models/IssueEvent.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type IssueEvent = { + actor_id?: string | null; + created_at: string; + event_type: EventType; + id: string; + issue_id: string; + metadata?: (null | Value); + new_value?: (null | Value); + old_value?: (null | Value); +}; + diff --git a/src/client/models/IssueLabel.ts b/src/client/models/IssueLabel.ts new file mode 100644 index 0000000..4ffb254 --- /dev/null +++ b/src/client/models/IssueLabel.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueLabel = { + color: string; + created_at: string; + created_by?: string | null; + description?: string | null; + id: string; + name: string; + repo_id: string; + updated_at: string; +}; + diff --git a/src/client/models/IssueLabelRelation.ts b/src/client/models/IssueLabelRelation.ts new file mode 100644 index 0000000..bdd87b2 --- /dev/null +++ b/src/client/models/IssueLabelRelation.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueLabelRelation = { + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + label_id: string; +}; + diff --git a/src/client/models/IssueListFilters.ts b/src/client/models/IssueListFilters.ts new file mode 100644 index 0000000..c463d03 --- /dev/null +++ b/src/client/models/IssueListFilters.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueListFilters = { + assignee_id?: string | null; + author_id?: string | null; + label_id?: string | null; + milestone_id?: string | null; + priority?: string | null; + state?: string | null; +}; + diff --git a/src/client/models/IssueMilestone.ts b/src/client/models/IssueMilestone.ts new file mode 100644 index 0000000..42d0047 --- /dev/null +++ b/src/client/models/IssueMilestone.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type IssueMilestone = { + closed_at?: string | null; + created_at: string; + created_by: string; + description?: string | null; + due_at?: string | null; + id: string; + repo_id: string; + state: State; + title: string; + updated_at: string; +}; + diff --git a/src/client/models/IssuePrRelation.ts b/src/client/models/IssuePrRelation.ts new file mode 100644 index 0000000..80e189c --- /dev/null +++ b/src/client/models/IssuePrRelation.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RelationType } from './RelationType'; +export type IssuePrRelation = { + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + pull_request_id: string; + relation_type: RelationType; +}; + diff --git a/src/client/models/IssueReaction.ts b/src/client/models/IssueReaction.ts new file mode 100644 index 0000000..6a8a087 --- /dev/null +++ b/src/client/models/IssueReaction.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +export type IssueReaction = { + content: string; + created_at: string; + id: string; + issue_id: string; + target_id?: string | null; + target_type: TargetType; + user_id: string; +}; + diff --git a/src/client/models/IssueRepoRelation.ts b/src/client/models/IssueRepoRelation.ts new file mode 100644 index 0000000..54819e5 --- /dev/null +++ b/src/client/models/IssueRepoRelation.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RelationType } from './RelationType'; +export type IssueRepoRelation = { + created_at: string; + created_by?: string | null; + id: string; + issue_id: string; + relation_type: RelationType; + repo_id: string; +}; + diff --git a/src/client/models/IssueSubscriber.ts b/src/client/models/IssueSubscriber.ts new file mode 100644 index 0000000..3f4278e --- /dev/null +++ b/src/client/models/IssueSubscriber.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueSubscriber = { + created_at: string; + id: string; + issue_id: string; + muted: boolean; + reason: string; + updated_at: string; + user_id: string; +}; + diff --git a/src/client/models/IssueTemplate.ts b/src/client/models/IssueTemplate.ts new file mode 100644 index 0000000..e9cb2a2 --- /dev/null +++ b/src/client/models/IssueTemplate.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type IssueTemplate = { + active: boolean; + body_template: string; + created_at: string; + created_by: string; + description?: string | null; + id: string; + labels: Array; + name: string; + repo_id: string; + title_template?: string | null; + updated_at: string; +}; + diff --git a/src/client/models/KeyType.ts b/src/client/models/KeyType.ts new file mode 100644 index 0000000..cadf61d --- /dev/null +++ b/src/client/models/KeyType.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type KeyType = 'Rsa' | 'Ed25519' | 'Ecdsa' | 'Dsa' | 'Unknown'; diff --git a/src/client/models/LinkPrParams.ts b/src/client/models/LinkPrParams.ts new file mode 100644 index 0000000..ca5d939 --- /dev/null +++ b/src/client/models/LinkPrParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type LinkPrParams = { + pull_request_id: string; + relation_type?: string | null; +}; + diff --git a/src/client/models/LinkRepoParams.ts b/src/client/models/LinkRepoParams.ts new file mode 100644 index 0000000..34f8864 --- /dev/null +++ b/src/client/models/LinkRepoParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type LinkRepoParams = { + relation_type?: string | null; + repo_id: string; +}; + diff --git a/src/client/models/LockIssueParams.ts b/src/client/models/LockIssueParams.ts new file mode 100644 index 0000000..4f26af7 --- /dev/null +++ b/src/client/models/LockIssueParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type LockIssueParams = { + /** + * Whether to lock (true) or unlock (false) the issue + */ + locked: boolean; +}; + diff --git a/src/client/models/LockPrParams.ts b/src/client/models/LockPrParams.ts new file mode 100644 index 0000000..7f3de99 --- /dev/null +++ b/src/client/models/LockPrParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type LockPrParams = { + /** + * Whether to lock (true) or unlock (false) the PR conversation + */ + locked: boolean; +}; + diff --git a/src/client/models/LoginParams.ts b/src/client/models/LoginParams.ts new file mode 100644 index 0000000..c6b16c8 --- /dev/null +++ b/src/client/models/LoginParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type LoginParams = { + captcha: string; + password: string; + totp_code?: string | null; + username: string; +}; + diff --git a/src/client/models/MergePrParams.ts b/src/client/models/MergePrParams.ts new file mode 100644 index 0000000..9131ada --- /dev/null +++ b/src/client/models/MergePrParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type MergePrParams = { + delete_source_branch?: boolean | null; + squash_message?: string | null; + squash_title?: string | null; + strategy?: string | null; +}; + diff --git a/src/client/models/MergeStrategyKind.ts b/src/client/models/MergeStrategyKind.ts new file mode 100644 index 0000000..6eb026f --- /dev/null +++ b/src/client/models/MergeStrategyKind.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type MergeStrategyKind = 'Merge' | 'Squash' | 'Rebase' | 'FastForward' | 'Unknown'; diff --git a/src/client/models/MuteIssueParams.ts b/src/client/models/MuteIssueParams.ts new file mode 100644 index 0000000..0a8fa3b --- /dev/null +++ b/src/client/models/MuteIssueParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type MuteIssueParams = { + /** + * Whether to mute (true) or unmute (false) notifications + */ + muted: boolean; +}; + diff --git a/src/client/models/MutePrParams.ts b/src/client/models/MutePrParams.ts new file mode 100644 index 0000000..2ae188c --- /dev/null +++ b/src/client/models/MutePrParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type MutePrParams = { + /** + * Whether to mute (true) or unmute (false) notifications + */ + muted: boolean; +}; + diff --git a/src/client/models/Permission.ts b/src/client/models/Permission.ts new file mode 100644 index 0000000..5f5c09b --- /dev/null +++ b/src/client/models/Permission.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Permission = 'Read' | 'Write' | 'Admin' | 'Execute' | 'ManageMembers' | 'ManageSettings' | 'ManageWebhooks' | 'ManageBilling' | 'Unknown'; diff --git a/src/client/models/PrAssignee.ts b/src/client/models/PrAssignee.ts new file mode 100644 index 0000000..4a61ced --- /dev/null +++ b/src/client/models/PrAssignee.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrAssignee = { + assigned_by?: string | null; + assignee_id: string; + created_at: string; + id: string; + pull_request_id: string; +}; + diff --git a/src/client/models/PrCheckRun.ts b/src/client/models/PrCheckRun.ts new file mode 100644 index 0000000..2910d0a --- /dev/null +++ b/src/client/models/PrCheckRun.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type PrCheckRun = { + commit_sha: string; + completed_at?: string | null; + conclusion?: (null | Status); + created_at: string; + details_url?: string | null; + external_id?: string | null; + id: string; + name: string; + pull_request_id: string; + started_at?: string | null; + status: Status; + updated_at: string; +}; + diff --git a/src/client/models/PrCommit.ts b/src/client/models/PrCommit.ts new file mode 100644 index 0000000..80b5521 --- /dev/null +++ b/src/client/models/PrCommit.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrCommit = { + authored_at?: string | null; + commit_sha: string; + committed_at?: string | null; + created_at: string; + id: string; + position: number; + pull_request_id: string; + repo_id: string; +}; + diff --git a/src/client/models/PrEvent.ts b/src/client/models/PrEvent.ts new file mode 100644 index 0000000..edb8dea --- /dev/null +++ b/src/client/models/PrEvent.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type PrEvent = { + actor_id?: string | null; + created_at: string; + event_type: EventType; + id: string; + metadata?: (null | Value); + new_value?: (null | Value); + old_value?: (null | Value); + pull_request_id: string; +}; + diff --git a/src/client/models/PrFile.ts b/src/client/models/PrFile.ts new file mode 100644 index 0000000..b32e753 --- /dev/null +++ b/src/client/models/PrFile.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type PrFile = { + additions: number; + changes: number; + created_at: string; + deletions: number; + id: string; + old_path?: string | null; + patch?: string | null; + path: string; + pull_request_id: string; + status: Status; + updated_at: string; +}; + diff --git a/src/client/models/PrLabel.ts b/src/client/models/PrLabel.ts new file mode 100644 index 0000000..06aff92 --- /dev/null +++ b/src/client/models/PrLabel.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrLabel = { + color: string; + created_at: string; + created_by?: string | null; + description?: string | null; + id: string; + name: string; + repo_id: string; + updated_at: string; +}; + diff --git a/src/client/models/PrLabelRelation.ts b/src/client/models/PrLabelRelation.ts new file mode 100644 index 0000000..0a4fee5 --- /dev/null +++ b/src/client/models/PrLabelRelation.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrLabelRelation = { + created_at: string; + created_by?: string | null; + id: string; + label_id: string; + pull_request_id: string; +}; + diff --git a/src/client/models/PrListFilters.ts b/src/client/models/PrListFilters.ts new file mode 100644 index 0000000..90883f4 --- /dev/null +++ b/src/client/models/PrListFilters.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrListFilters = { + author_id?: string | null; + draft?: boolean | null; + state?: string | null; +}; + diff --git a/src/client/models/PrMergeStrategy.ts b/src/client/models/PrMergeStrategy.ts new file mode 100644 index 0000000..90b52a4 --- /dev/null +++ b/src/client/models/PrMergeStrategy.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { MergeStrategyKind } from './MergeStrategyKind'; +export type PrMergeStrategy = { + auto_merge: boolean; + created_at: string; + delete_source_branch: boolean; + merge_when_checks_pass: boolean; + pull_request_id: string; + selected_by?: string | null; + squash_message?: string | null; + squash_title?: string | null; + strategy: MergeStrategyKind; + updated_at: string; +}; + diff --git a/src/client/models/PrReaction.ts b/src/client/models/PrReaction.ts new file mode 100644 index 0000000..b72b230 --- /dev/null +++ b/src/client/models/PrReaction.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +export type PrReaction = { + content: string; + created_at: string; + id: string; + pull_request_id: string; + target_id?: string | null; + target_type: TargetType; + user_id: string; +}; + diff --git a/src/client/models/PrReview.ts b/src/client/models/PrReview.ts new file mode 100644 index 0000000..a918392 --- /dev/null +++ b/src/client/models/PrReview.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrReview = { + author_id: string; + body?: string | null; + commit_sha?: string | null; + created_at: string; + dismiss_reason?: string | null; + dismissed_at?: string | null; + dismissed_by?: string | null; + id: string; + pull_request_id: string; + state: string; + submitted_at?: string | null; + updated_at: string; +}; + diff --git a/src/client/models/PrReviewComment.ts b/src/client/models/PrReviewComment.ts new file mode 100644 index 0000000..4a9bc72 --- /dev/null +++ b/src/client/models/PrReviewComment.ts @@ -0,0 +1,22 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrReviewComment = { + author_id: string; + body: string; + created_at: string; + diff_hunk?: string | null; + edited_at?: string | null; + id: string; + in_reply_to_id?: string | null; + line?: number | null; + original_line?: number | null; + original_start_line?: number | null; + path: string; + pull_request_id: string; + review_id: string; + start_line?: number | null; + updated_at: string; +}; + diff --git a/src/client/models/PrStatus.ts b/src/client/models/PrStatus.ts new file mode 100644 index 0000000..733bf27 --- /dev/null +++ b/src/client/models/PrStatus.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type PrStatus = { + additions_count: number; + approvals_count: number; + changed_files_count: number; + checks_state: State; + conflicts: boolean; + deletions_count: number; + head_commit_sha: string; + mergeable_state: State; + pull_request_id: string; + requested_reviews_count: number; + updated_at: string; +}; + diff --git a/src/client/models/PrSubscription.ts b/src/client/models/PrSubscription.ts new file mode 100644 index 0000000..3f0dcd6 --- /dev/null +++ b/src/client/models/PrSubscription.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type PrSubscription = { + created_at: string; + id: string; + muted: boolean; + pull_request_id: string; + reason: string; + updated_at: string; + user_id: string; +}; + diff --git a/src/client/models/Priority.ts b/src/client/models/Priority.ts new file mode 100644 index 0000000..c4e6eff --- /dev/null +++ b/src/client/models/Priority.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Priority = 'None' | 'Low' | 'Medium' | 'High' | 'Critical' | 'Urgent' | 'Unknown'; diff --git a/src/client/models/Provider.ts b/src/client/models/Provider.ts new file mode 100644 index 0000000..cdfc2b3 --- /dev/null +++ b/src/client/models/Provider.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Provider = 'Github' | 'Gitlab' | 'Google' | 'Slack' | 'Discord' | 'Email' | 'Web' | 'Push' | 'Openai' | 'Anthropic' | 'Gemini' | 'Ollama' | 'Azure' | 'Aws' | 'Stripe' | 'Unknown'; diff --git a/src/client/models/PullRequest.ts b/src/client/models/PullRequest.ts new file mode 100644 index 0000000..c8686d2 --- /dev/null +++ b/src/client/models/PullRequest.ts @@ -0,0 +1,31 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type PullRequest = { + author_id: string; + base_commit_sha?: string | null; + body?: string | null; + closed_at?: string | null; + closed_by?: string | null; + created_at: string; + deleted_at?: string | null; + draft: boolean; + head_commit_sha: string; + id: string; + locked: boolean; + merge_commit_sha?: string | null; + merged_at?: string | null; + merged_by?: string | null; + number: number; + repo_id: string; + source_branch: string; + source_repo_id: string; + state: State; + target_branch: string; + target_repo_id: string; + title: string; + updated_at: string; +}; + diff --git a/src/client/models/Regenerate2FABackupCodesRequest.ts b/src/client/models/Regenerate2FABackupCodesRequest.ts new file mode 100644 index 0000000..5768de5 --- /dev/null +++ b/src/client/models/Regenerate2FABackupCodesRequest.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Regenerate2FABackupCodesRequest = { + /** + * Current account password encrypted with the session RSA public key. + */ + password: string; +}; + diff --git a/src/client/models/Regenerate2FABackupCodesResponse.ts b/src/client/models/Regenerate2FABackupCodesResponse.ts new file mode 100644 index 0000000..4f22f4b --- /dev/null +++ b/src/client/models/Regenerate2FABackupCodesResponse.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Regenerate2FABackupCodesResponse = { + /** + * Newly generated one-time backup codes. Old backup codes become invalid. + */ + backup_codes: Array; +}; + diff --git a/src/client/models/RegisterEmailCodeParams.ts b/src/client/models/RegisterEmailCodeParams.ts new file mode 100644 index 0000000..ce8323d --- /dev/null +++ b/src/client/models/RegisterEmailCodeParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RegisterEmailCodeParams = { + captcha: string; + email: string; +}; + diff --git a/src/client/models/RegisterEmailCodeResponse.ts b/src/client/models/RegisterEmailCodeResponse.ts new file mode 100644 index 0000000..1ce200e --- /dev/null +++ b/src/client/models/RegisterEmailCodeResponse.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RegisterEmailCodeResponse = { + expires_in_secs: number; +}; + diff --git a/src/client/models/RegisterParams.ts b/src/client/models/RegisterParams.ts new file mode 100644 index 0000000..78eb48f --- /dev/null +++ b/src/client/models/RegisterParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RegisterParams = { + captcha: string; + email: string; + email_code: string; + password: string; + username: string; +}; + diff --git a/src/client/models/RegisterResponse.ts b/src/client/models/RegisterResponse.ts new file mode 100644 index 0000000..8bc46c7 --- /dev/null +++ b/src/client/models/RegisterResponse.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RegisterResponse = { + /** + * Avatar URL; usually absent right after registration. + */ + avatar_url?: string | null; + /** + * Display name initialized from username. + */ + display_name?: string | null; + /** + * Newly created user id. + */ + id: string; + /** + * Unique username used for login and profile URL. + */ + username: string; +}; + diff --git a/src/client/models/RelationType.ts b/src/client/models/RelationType.ts new file mode 100644 index 0000000..20a7226 --- /dev/null +++ b/src/client/models/RelationType.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RelationType = 'Closes' | 'Fixes' | 'References' | 'Blocks' | 'Duplicates' | 'Related' | 'Implements' | 'Mentions' | 'Resolves' | 'Unknown'; diff --git a/src/client/models/Repo.ts b/src/client/models/Repo.ts new file mode 100644 index 0000000..a64a9e5 --- /dev/null +++ b/src/client/models/Repo.ts @@ -0,0 +1,28 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { GitService } from './GitService'; +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type Repo = { + archived_at?: string | null; + created_at: string; + default_branch: string; + deleted_at?: string | null; + description?: string | null; + forked_from_repo_id?: string | null; + git_service: GitService; + id: string; + is_fork: boolean; + name: string; + owner_id: string; + primary_storage_node_id: string; + status: Status; + storage_node_ids: Array; + storage_path: string; + updated_at: string; + visibility: Visibility; + workspace_id: string; +}; + diff --git a/src/client/models/RepoBranch.ts b/src/client/models/RepoBranch.ts new file mode 100644 index 0000000..b5cbfd7 --- /dev/null +++ b/src/client/models/RepoBranch.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoBranch = { + commit_sha: string; + created_at: string; + created_by?: string | null; + default_branch: boolean; + id: string; + last_push_at?: string | null; + last_push_id?: string | null; + name: string; + protected: boolean; + repo_id: string; + updated_at: string; +}; + diff --git a/src/client/models/RepoCommitComment.ts b/src/client/models/RepoCommitComment.ts new file mode 100644 index 0000000..ed26cec --- /dev/null +++ b/src/client/models/RepoCommitComment.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoCommitComment = { + author_id: string; + body: string; + commit_sha: string; + created_at: string; + deleted_at?: string | null; + id: string; + line?: number | null; + path?: string | null; + push_commit_id: string; + repo_id: string; + resolved: boolean; + resolved_at?: string | null; + resolved_by?: string | null; + updated_at: string; +}; + diff --git a/src/client/models/RepoCommitStatus.ts b/src/client/models/RepoCommitStatus.ts new file mode 100644 index 0000000..b4075b1 --- /dev/null +++ b/src/client/models/RepoCommitStatus.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { State } from './State'; +export type RepoCommitStatus = { + context: string; + created_at: string; + description?: string | null; + id: string; + latest_commit_sha: string; + push_commit_id: string; + repo_id: string; + reported_at: string; + reported_by?: string | null; + state: State; + target_url?: string | null; + updated_at: string; +}; + diff --git a/src/client/models/RepoDeployKey.ts b/src/client/models/RepoDeployKey.ts new file mode 100644 index 0000000..4cd0f00 --- /dev/null +++ b/src/client/models/RepoDeployKey.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { KeyType } from './KeyType'; +export type RepoDeployKey = { + created_at: string; + created_by: string; + expires_at?: string | null; + fingerprint_sha256: string; + id: string; + key_type: KeyType; + last_used_at?: string | null; + public_key: string; + read_only: boolean; + repo_id: string; + revoked_at?: string | null; + title: string; + updated_at: string; +}; + diff --git a/src/client/models/RepoFork.ts b/src/client/models/RepoFork.ts new file mode 100644 index 0000000..a0afe7c --- /dev/null +++ b/src/client/models/RepoFork.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoFork = { + created_at: string; + fork_repo_id: string; + forked_by: string; + id: string; + parent_repo_id: string; +}; + diff --git a/src/client/models/RepoInvitation.ts b/src/client/models/RepoInvitation.ts new file mode 100644 index 0000000..2d6bf45 --- /dev/null +++ b/src/client/models/RepoInvitation.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +export type RepoInvitation = { + accepted_at?: string | null; + accepted_by?: string | null; + created_at: string; + email: string; + expires_at: string; + id: string; + invited_by: string; + repo_id: string; + revoked_at?: string | null; + role: Role; + token_hash: string; +}; + diff --git a/src/client/models/RepoMember.ts b/src/client/models/RepoMember.ts new file mode 100644 index 0000000..82840b2 --- /dev/null +++ b/src/client/models/RepoMember.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +export type RepoMember = { + created_at: string; + id: string; + invited_by?: string | null; + joined_at?: string | null; + last_active_at?: string | null; + repo_id: string; + role: Role; + status: Status; + updated_at: string; + user_id: string; +}; + diff --git a/src/client/models/RepoRelease.ts b/src/client/models/RepoRelease.ts new file mode 100644 index 0000000..05249fc --- /dev/null +++ b/src/client/models/RepoRelease.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoRelease = { + author_id: string; + body?: string | null; + created_at: string; + deleted_at?: string | null; + draft: boolean; + id: string; + prerelease: boolean; + published_at?: string | null; + repo_id: string; + tag_id?: string | null; + tag_name: string; + title: string; + updated_at: string; +}; + diff --git a/src/client/models/RepoStar.ts b/src/client/models/RepoStar.ts new file mode 100644 index 0000000..7cfde1b --- /dev/null +++ b/src/client/models/RepoStar.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoStar = { + created_at: string; + id: string; + repo_id: string; + user_id: string; +}; + diff --git a/src/client/models/RepoStats.ts b/src/client/models/RepoStats.ts new file mode 100644 index 0000000..3d6e1c6 --- /dev/null +++ b/src/client/models/RepoStats.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoStats = { + branches_count: number; + commits_count: number; + forks_count: number; + last_push_at?: string | null; + open_issues_count: number; + open_pull_requests_count: number; + releases_count: number; + repo_id: string; + size_bytes: number; + stars_count: number; + tags_count: number; + updated_at: string; + watchers_count: number; +}; + diff --git a/src/client/models/RepoTag.ts b/src/client/models/RepoTag.ts new file mode 100644 index 0000000..cdf0caf --- /dev/null +++ b/src/client/models/RepoTag.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RepoTag = { + created_at: string; + id: string; + message?: string | null; + name: string; + repo_id: string; + signed: boolean; + tagger_id?: string | null; + target_commit_sha: string; +}; + diff --git a/src/client/models/RepoWatch.ts b/src/client/models/RepoWatch.ts new file mode 100644 index 0000000..95f56ca --- /dev/null +++ b/src/client/models/RepoWatch.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { SubscriptionLevel } from './SubscriptionLevel'; +export type RepoWatch = { + created_at: string; + id: string; + level: SubscriptionLevel; + repo_id: string; + updated_at: string; + user_id: string; +}; + diff --git a/src/client/models/RepoWebhook.ts b/src/client/models/RepoWebhook.ts new file mode 100644 index 0000000..34cddc3 --- /dev/null +++ b/src/client/models/RepoWebhook.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type RepoWebhook = { + active: boolean; + created_at: string; + created_by: string; + events: Array; + id: string; + last_delivery_at?: string | null; + last_delivery_status?: string | null; + repo_id: string; + secret_ciphertext?: string | null; + updated_at: string; + url: string; +}; + diff --git a/src/client/models/RequestApprovalParams.ts b/src/client/models/RequestApprovalParams.ts new file mode 100644 index 0000000..1477c5f --- /dev/null +++ b/src/client/models/RequestApprovalParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RequestApprovalParams = { + reason?: string | null; + request_type: string; +}; + diff --git a/src/client/models/RequestType.ts b/src/client/models/RequestType.ts new file mode 100644 index 0000000..1e6d831 --- /dev/null +++ b/src/client/models/RequestType.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RequestType = 'Join' | 'Invite' | 'Access' | 'Approval' | 'Billing' | 'Delete' | 'Transfer' | 'Unknown'; diff --git a/src/client/models/ResetPasswordRequest.ts b/src/client/models/ResetPasswordRequest.ts new file mode 100644 index 0000000..57294c8 --- /dev/null +++ b/src/client/models/ResetPasswordRequest.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ResetPasswordRequest = { + email: string; +}; + diff --git a/src/client/models/ResetPasswordVerifyParams.ts b/src/client/models/ResetPasswordVerifyParams.ts new file mode 100644 index 0000000..02fe84b --- /dev/null +++ b/src/client/models/ResetPasswordVerifyParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ResetPasswordVerifyParams = { + password: string; + token: string; +}; + diff --git a/src/client/models/ReviewApprovalRequest.ts b/src/client/models/ReviewApprovalRequest.ts new file mode 100644 index 0000000..ece5bee --- /dev/null +++ b/src/client/models/ReviewApprovalRequest.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ReviewApprovalRequest = { + /** + * true to approve, false to reject. + */ + approved: boolean; +}; + diff --git a/src/client/models/ReviewCommentParams.ts b/src/client/models/ReviewCommentParams.ts new file mode 100644 index 0000000..48b83e3 --- /dev/null +++ b/src/client/models/ReviewCommentParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ReviewCommentParams = { + body: string; + diff_hunk?: string | null; + line?: number | null; + path: string; + start_line?: number | null; +}; + diff --git a/src/client/models/Role.ts b/src/client/models/Role.ts new file mode 100644 index 0000000..746b5a4 --- /dev/null +++ b/src/client/models/Role.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Role = 'Owner' | 'Admin' | 'Maintainer' | 'Member' | 'Guest' | 'Viewer' | 'Editor' | 'Contributor' | 'Moderator' | 'User' | 'Bot' | 'Agent' | 'Assistant' | 'System' | 'Author' | 'Reviewer' | 'Assignee' | 'Unknown'; diff --git a/src/client/models/RsaResponse.ts b/src/client/models/RsaResponse.ts new file mode 100644 index 0000000..74352cc --- /dev/null +++ b/src/client/models/RsaResponse.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type RsaResponse = { + public_key: string; +}; + diff --git a/src/client/models/Scope.ts b/src/client/models/Scope.ts new file mode 100644 index 0000000..0cae5a6 --- /dev/null +++ b/src/client/models/Scope.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Scope = 'Read' | 'Write' | 'Admin' | 'RepoRead' | 'RepoWrite' | 'IssueRead' | 'IssueWrite' | 'PullRequestRead' | 'PullRequestWrite' | 'WorkspaceRead' | 'WorkspaceWrite' | 'UserRead' | 'UserWrite' | 'Unknown'; diff --git a/src/client/models/SetBranchProtectionParams.ts b/src/client/models/SetBranchProtectionParams.ts new file mode 100644 index 0000000..b5e63e0 --- /dev/null +++ b/src/client/models/SetBranchProtectionParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type SetBranchProtectionParams = { + /** + * Whether to enable branch protection + */ + protected: boolean; +}; + diff --git a/src/client/models/State.ts b/src/client/models/State.ts new file mode 100644 index 0000000..bb46717 --- /dev/null +++ b/src/client/models/State.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type State = 'Open' | 'Closed' | 'Merged' | 'Draft' | 'Pending' | 'Queued' | 'Running' | 'Success' | 'Failure' | 'Failed' | 'Error' | 'Skipped' | 'Blocked' | 'Clean' | 'Dirty' | 'Unknown'; diff --git a/src/client/models/Status.ts b/src/client/models/Status.ts new file mode 100644 index 0000000..5993856 --- /dev/null +++ b/src/client/models/Status.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +/** + * Cross-domain lifecycle/status values persisted as snake_case text. + */ +export type Status = 'Active' | 'Inactive' | 'Enabled' | 'Disabled' | 'Pending' | 'Queued' | 'Running' | 'Processing' | 'Completed' | 'Success' | 'Failed' | 'Error' | 'Canceled' | 'Cancelled' | 'Draft' | 'Open' | 'Closed' | 'Merged' | 'Archived' | 'Deleted' | 'Revoked' | 'Expired' | 'Accepted' | 'Rejected' | 'Approved' | 'Healthy' | 'Degraded' | 'Unhealthy' | 'Online' | 'Offline' | 'Added' | 'Modified' | 'Removed' | 'Renamed' | 'Copied' | 'Unknown'; diff --git a/src/client/models/SubmitReviewParams.ts b/src/client/models/SubmitReviewParams.ts new file mode 100644 index 0000000..42a8d9c --- /dev/null +++ b/src/client/models/SubmitReviewParams.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type SubmitReviewParams = { + body?: string | null; + state: string; +}; + diff --git a/src/client/models/SubscriptionLevel.ts b/src/client/models/SubscriptionLevel.ts new file mode 100644 index 0000000..b1d6553 --- /dev/null +++ b/src/client/models/SubscriptionLevel.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type SubscriptionLevel = 'All' | 'Participating' | 'Mention' | 'Watch' | 'Ignore' | 'None' | 'Custom' | 'Unknown'; diff --git a/src/client/models/TargetType.ts b/src/client/models/TargetType.ts new file mode 100644 index 0000000..4ea6fee --- /dev/null +++ b/src/client/models/TargetType.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type TargetType = 'User' | 'Workspace' | 'Repo' | 'Issue' | 'PullRequest' | 'Channel' | 'Message' | 'Conversation' | 'Agent' | 'AiModel' | 'Commit' | 'Branch' | 'Release' | 'Unknown'; diff --git a/src/client/models/Theme.ts b/src/client/models/Theme.ts new file mode 100644 index 0000000..a3d9055 --- /dev/null +++ b/src/client/models/Theme.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Theme = 'System' | 'Light' | 'Dark' | 'Unknown'; diff --git a/src/client/models/TransferIssueParams.ts b/src/client/models/TransferIssueParams.ts new file mode 100644 index 0000000..171d09f --- /dev/null +++ b/src/client/models/TransferIssueParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type TransferIssueParams = { + /** + * Target workspace name to transfer the issue to + */ + target_workspace_name: string; +}; + diff --git a/src/client/models/TransferOwnerParams.ts b/src/client/models/TransferOwnerParams.ts new file mode 100644 index 0000000..1fcbb8a --- /dev/null +++ b/src/client/models/TransferOwnerParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type TransferOwnerParams = { + /** + * User ID of the new owner (must be a repository member) + */ + new_owner_id: string; +}; + diff --git a/src/client/models/TransferOwnerRequest.ts b/src/client/models/TransferOwnerRequest.ts new file mode 100644 index 0000000..f7a9640 --- /dev/null +++ b/src/client/models/TransferOwnerRequest.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type TransferOwnerRequest = { + /** + * User ID of the new owner, who must be an active member. + */ + new_owner_id: string; +}; + diff --git a/src/client/models/UpdateBillingParams.ts b/src/client/models/UpdateBillingParams.ts new file mode 100644 index 0000000..1d4367d --- /dev/null +++ b/src/client/models/UpdateBillingParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateBillingParams = { + billing_email?: string | null; + plan?: string | null; + seats?: number | null; +}; + diff --git a/src/client/models/UpdateBrandingParams.ts b/src/client/models/UpdateBrandingParams.ts new file mode 100644 index 0000000..6ba688f --- /dev/null +++ b/src/client/models/UpdateBrandingParams.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateBrandingParams = { + accent_color?: string | null; + custom_css?: string | null; + enabled?: boolean | null; + favicon_url?: string | null; + logo_url?: string | null; + primary_color?: string | null; + support_url?: string | null; +}; + diff --git a/src/client/models/UpdateCheckRunParams.ts b/src/client/models/UpdateCheckRunParams.ts new file mode 100644 index 0000000..48bb5b1 --- /dev/null +++ b/src/client/models/UpdateCheckRunParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateCheckRunParams = { + conclusion?: string | null; + details_url?: string | null; + status?: string | null; +}; + diff --git a/src/client/models/UpdateCommentParams.ts b/src/client/models/UpdateCommentParams.ts new file mode 100644 index 0000000..d8c867e --- /dev/null +++ b/src/client/models/UpdateCommentParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateCommentParams = { + body: string; +}; + diff --git a/src/client/models/UpdateIntegrationParams.ts b/src/client/models/UpdateIntegrationParams.ts new file mode 100644 index 0000000..7e48980 --- /dev/null +++ b/src/client/models/UpdateIntegrationParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { WorkspaceIntegrationConfig } from './WorkspaceIntegrationConfig'; +export type UpdateIntegrationParams = { + config?: (null | WorkspaceIntegrationConfig); + enabled?: boolean | null; + name?: string | null; + secret_ciphertext?: string | null; +}; + diff --git a/src/client/models/UpdateIssueParams.ts b/src/client/models/UpdateIssueParams.ts new file mode 100644 index 0000000..5a22889 --- /dev/null +++ b/src/client/models/UpdateIssueParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateIssueParams = { + body?: string | null; + due_at?: string | null; + milestone_id?: string | null; + priority?: string | null; + title?: string | null; + visibility?: string | null; +}; + diff --git a/src/client/models/UpdateLabelParams.ts b/src/client/models/UpdateLabelParams.ts new file mode 100644 index 0000000..d10a11d --- /dev/null +++ b/src/client/models/UpdateLabelParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateLabelParams = { + color?: string | null; + description?: string | null; + name?: string | null; +}; + diff --git a/src/client/models/UpdateMemberRoleParams.ts b/src/client/models/UpdateMemberRoleParams.ts new file mode 100644 index 0000000..00181e2 --- /dev/null +++ b/src/client/models/UpdateMemberRoleParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateMemberRoleParams = { + role: string; +}; + diff --git a/src/client/models/UpdateMergeStrategyParams.ts b/src/client/models/UpdateMergeStrategyParams.ts new file mode 100644 index 0000000..fac00e5 --- /dev/null +++ b/src/client/models/UpdateMergeStrategyParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateMergeStrategyParams = { + auto_merge?: boolean | null; + delete_source_branch?: boolean | null; + merge_when_checks_pass?: boolean | null; + squash_message?: string | null; + squash_title?: string | null; + strategy?: string | null; +}; + diff --git a/src/client/models/UpdateMilestoneParams.ts b/src/client/models/UpdateMilestoneParams.ts new file mode 100644 index 0000000..763efb1 --- /dev/null +++ b/src/client/models/UpdateMilestoneParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateMilestoneParams = { + description?: string | null; + due_at?: string | null; + state?: string | null; + title?: string | null; +}; + diff --git a/src/client/models/UpdatePrLabelParams.ts b/src/client/models/UpdatePrLabelParams.ts new file mode 100644 index 0000000..e9a4e74 --- /dev/null +++ b/src/client/models/UpdatePrLabelParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdatePrLabelParams = { + color?: string | null; + description?: string | null; + name?: string | null; +}; + diff --git a/src/client/models/UpdatePrParams.ts b/src/client/models/UpdatePrParams.ts new file mode 100644 index 0000000..9e391a1 --- /dev/null +++ b/src/client/models/UpdatePrParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdatePrParams = { + body?: string | null; + draft?: boolean | null; + target_branch?: string | null; + title?: string | null; +}; + diff --git a/src/client/models/UpdateProtectionRuleParams.ts b/src/client/models/UpdateProtectionRuleParams.ts new file mode 100644 index 0000000..cdd6d26 --- /dev/null +++ b/src/client/models/UpdateProtectionRuleParams.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateProtectionRuleParams = { + allow_deletions?: boolean | null; + allow_force_pushes?: boolean | null; + dismiss_stale_reviews?: boolean | null; + dismissal_allowances?: any[] | null; + push_allowances?: any[] | null; + require_approvals?: number | null; + require_code_owner_review?: boolean | null; + require_conversation_resolution?: boolean | null; + require_linear_history?: boolean | null; + require_signed_commits?: boolean | null; + require_status_checks?: boolean | null; + required_status_checks?: any[] | null; + restrict_pushes?: boolean | null; + restrict_review_dismissal?: boolean | null; +}; + diff --git a/src/client/models/UpdateReleaseParams.ts b/src/client/models/UpdateReleaseParams.ts new file mode 100644 index 0000000..dba7697 --- /dev/null +++ b/src/client/models/UpdateReleaseParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateReleaseParams = { + body?: string | null; + draft?: boolean | null; + prerelease?: boolean | null; + title?: string | null; +}; + diff --git a/src/client/models/UpdateRepoMemberRoleParams.ts b/src/client/models/UpdateRepoMemberRoleParams.ts new file mode 100644 index 0000000..fe7dddc --- /dev/null +++ b/src/client/models/UpdateRepoMemberRoleParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateRepoMemberRoleParams = { + role: string; +}; + diff --git a/src/client/models/UpdateRepoParams.ts b/src/client/models/UpdateRepoParams.ts new file mode 100644 index 0000000..7fc8fc1 --- /dev/null +++ b/src/client/models/UpdateRepoParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateRepoParams = { + default_branch?: string | null; + description?: string | null; + name?: string | null; + visibility?: string | null; +}; + diff --git a/src/client/models/UpdateTemplateParams.ts b/src/client/models/UpdateTemplateParams.ts new file mode 100644 index 0000000..c6f7dca --- /dev/null +++ b/src/client/models/UpdateTemplateParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateTemplateParams = { + active?: boolean | null; + body_template?: string | null; + description?: string | null; + labels?: any[] | null; + name?: string | null; + title_template?: string | null; +}; + diff --git a/src/client/models/UpdateUserAccountParams.ts b/src/client/models/UpdateUserAccountParams.ts new file mode 100644 index 0000000..71573b6 --- /dev/null +++ b/src/client/models/UpdateUserAccountParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateUserAccountParams = { + bio?: string | null; + display_name?: string | null; + username?: string | null; + visibility?: string | null; +}; + diff --git a/src/client/models/UpdateUserAppearanceParams.ts b/src/client/models/UpdateUserAppearanceParams.ts new file mode 100644 index 0000000..eb58f5f --- /dev/null +++ b/src/client/models/UpdateUserAppearanceParams.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateUserAppearanceParams = { + color_scheme?: string | null; + density?: string | null; + editor_theme?: string | null; + font_size?: string | null; + markdown_preview?: boolean | null; + reduced_motion?: boolean | null; + theme?: string | null; +}; + diff --git a/src/client/models/UpdateUserNotifySettingParams.ts b/src/client/models/UpdateUserNotifySettingParams.ts new file mode 100644 index 0000000..1b5ea59 --- /dev/null +++ b/src/client/models/UpdateUserNotifySettingParams.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateUserNotifySettingParams = { + digest_frequency?: string | null; + email_notifications?: boolean | null; + marketing_emails?: boolean | null; + mention_notifications?: boolean | null; + review_notifications?: boolean | null; + security_notifications?: boolean | null; + web_notifications?: boolean | null; +}; + diff --git a/src/client/models/UpdateUserProfileParams.ts b/src/client/models/UpdateUserProfileParams.ts new file mode 100644 index 0000000..7d7fc7d --- /dev/null +++ b/src/client/models/UpdateUserProfileParams.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateUserProfileParams = { + company?: string | null; + full_name?: string | null; + language?: string | null; + location?: string | null; + profile_readme?: string | null; + timezone?: string | null; + twitter_username?: string | null; + website_url?: string | null; +}; + diff --git a/src/client/models/UpdateWebhookParams.ts b/src/client/models/UpdateWebhookParams.ts new file mode 100644 index 0000000..b2f4b3b --- /dev/null +++ b/src/client/models/UpdateWebhookParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateWebhookParams = { + active?: boolean | null; + events?: any[] | null; + secret_ciphertext?: string | null; + url?: string | null; +}; + diff --git a/src/client/models/UpdateWikiPageParams.ts b/src/client/models/UpdateWikiPageParams.ts new file mode 100644 index 0000000..40abd9d --- /dev/null +++ b/src/client/models/UpdateWikiPageParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateWikiPageParams = { + commit_message?: string | null; + content?: string | null; + title?: string | null; +}; + diff --git a/src/client/models/UpdateWorkspaceParams.ts b/src/client/models/UpdateWorkspaceParams.ts new file mode 100644 index 0000000..f22a84e --- /dev/null +++ b/src/client/models/UpdateWorkspaceParams.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateWorkspaceParams = { + default_role?: string | null; + description?: string | null; + name?: string | null; + visibility?: string | null; +}; + diff --git a/src/client/models/UpdateWorkspaceSettingsParams.ts b/src/client/models/UpdateWorkspaceSettingsParams.ts new file mode 100644 index 0000000..a9ff3f8 --- /dev/null +++ b/src/client/models/UpdateWorkspaceSettingsParams.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UpdateWorkspaceSettingsParams = { + allow_member_invites?: boolean | null; + allow_public_repos?: boolean | null; + default_branch_name?: string | null; + default_repo_visibility?: string | null; + issue_tracking_enabled?: boolean | null; + pull_requests_enabled?: boolean | null; + require_two_factor?: boolean | null; + wiki_enabled?: boolean | null; +}; + diff --git a/src/client/models/UploadUserAvatarParams.ts b/src/client/models/UploadUserAvatarParams.ts new file mode 100644 index 0000000..86fd6f2 --- /dev/null +++ b/src/client/models/UploadUserAvatarParams.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UploadUserAvatarParams = { + content_type?: string | null; + data: Array; + file_name?: string | null; +}; + diff --git a/src/client/models/User.ts b/src/client/models/User.ts new file mode 100644 index 0000000..586c0ee --- /dev/null +++ b/src/client/models/User.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type User = { + avatar_url?: string | null; + bio?: string | null; + created_at: string; + deleted_at?: string | null; + display_name?: string | null; + id: string; + is_active: boolean; + is_bot: boolean; + last_login_at?: string | null; + role: Role; + status: Status; + updated_at: string; + username: string; + visibility: Visibility; +}; + diff --git a/src/client/models/UserAppearance.ts b/src/client/models/UserAppearance.ts new file mode 100644 index 0000000..1fa8770 --- /dev/null +++ b/src/client/models/UserAppearance.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ColorScheme } from './ColorScheme'; +import type { Density } from './Density'; +import type { FontSize } from './FontSize'; +import type { Theme } from './Theme'; +export type UserAppearance = { + color_scheme: ColorScheme; + created_at: string; + density: Density; + editor_theme?: string | null; + font_size: FontSize; + markdown_preview: boolean; + reduced_motion: boolean; + theme: Theme; + updated_at: string; + user_id: string; +}; + diff --git a/src/client/models/UserAvatarResponse.ts b/src/client/models/UserAvatarResponse.ts new file mode 100644 index 0000000..8def3cf --- /dev/null +++ b/src/client/models/UserAvatarResponse.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UserAvatarResponse = { + avatar_url: string; + storage_key: string; +}; + diff --git a/src/client/models/UserDevice.ts b/src/client/models/UserDevice.ts new file mode 100644 index 0000000..65976b9 --- /dev/null +++ b/src/client/models/UserDevice.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { DeviceType } from './DeviceType'; +export type UserDevice = { + created_at: string; + device_name: string; + device_type: DeviceType; + fingerprint?: string | null; + id: string; + ip_address?: string | null; + last_seen_at?: string | null; + trusted: boolean; + updated_at: string; + user_agent?: string | null; + user_id: string; +}; + diff --git a/src/client/models/UserGpgKey.ts b/src/client/models/UserGpgKey.ts new file mode 100644 index 0000000..9dbcb38 --- /dev/null +++ b/src/client/models/UserGpgKey.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UserGpgKey = { + created_at: string; + expires_at?: string | null; + fingerprint: string; + id: string; + key_id: string; + primary_email?: string | null; + public_key: string; + revoked_at?: string | null; + updated_at: string; + user_id: string; + verified_at?: string | null; +}; + diff --git a/src/client/models/UserNotifySetting.ts b/src/client/models/UserNotifySetting.ts new file mode 100644 index 0000000..90a238a --- /dev/null +++ b/src/client/models/UserNotifySetting.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { DigestFrequency } from './DigestFrequency'; +export type UserNotifySetting = { + created_at: string; + digest_frequency: DigestFrequency; + email_notifications: boolean; + marketing_emails: boolean; + mention_notifications: boolean; + review_notifications: boolean; + security_notifications: boolean; + updated_at: string; + user_id: string; + web_notifications: boolean; +}; + diff --git a/src/client/models/UserOAuthInfo.ts b/src/client/models/UserOAuthInfo.ts new file mode 100644 index 0000000..52be0f7 --- /dev/null +++ b/src/client/models/UserOAuthInfo.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Provider } from './Provider'; +export type UserOAuthInfo = { + id: string; + last_used_at?: string | null; + linked_at: string; + provider: Provider; + provider_email?: string | null; + provider_user_id: string; + provider_username?: string | null; + token_expires_at?: string | null; +}; + diff --git a/src/client/models/UserPersonalAccessTokenInfo.ts b/src/client/models/UserPersonalAccessTokenInfo.ts new file mode 100644 index 0000000..fb87f6e --- /dev/null +++ b/src/client/models/UserPersonalAccessTokenInfo.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Scope } from './Scope'; +export type UserPersonalAccessTokenInfo = { + created_at: string; + expires_at?: string | null; + id: string; + last_used_at?: string | null; + name: string; + revoked_at?: string | null; + scopes: Array; + updated_at: string; +}; + diff --git a/src/client/models/UserProfile.ts b/src/client/models/UserProfile.ts new file mode 100644 index 0000000..0d19e9c --- /dev/null +++ b/src/client/models/UserProfile.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UserProfile = { + company?: string | null; + created_at: string; + full_name?: string | null; + language?: string | null; + location?: string | null; + profile_readme?: string | null; + timezone?: string | null; + twitter_username?: string | null; + updated_at: string; + user_id: string; + website_url?: string | null; +}; + diff --git a/src/client/models/UserSecurityLog.ts b/src/client/models/UserSecurityLog.ts new file mode 100644 index 0000000..fb61ccc --- /dev/null +++ b/src/client/models/UserSecurityLog.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +import type { Value } from './Value'; +export type UserSecurityLog = { + created_at: string; + description?: string | null; + event_type: EventType; + id: string; + ip_address?: string | null; + metadata?: (null | Value); + user_agent?: string | null; + user_id: string; +}; + diff --git a/src/client/models/UserSessionInfo.ts b/src/client/models/UserSessionInfo.ts new file mode 100644 index 0000000..00aa9e6 --- /dev/null +++ b/src/client/models/UserSessionInfo.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type UserSessionInfo = { + created_at: string; + expires_at: string; + id: string; + ip_address?: string | null; + last_active_at: string; + revoked_at?: string | null; + user_agent?: string | null; +}; + diff --git a/src/client/models/UserSshKey.ts b/src/client/models/UserSshKey.ts new file mode 100644 index 0000000..51606e6 --- /dev/null +++ b/src/client/models/UserSshKey.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { KeyType } from './KeyType'; +export type UserSshKey = { + created_at: string; + expires_at?: string | null; + fingerprint_sha256: string; + id: string; + key_type: KeyType; + last_used_at?: string | null; + public_key: string; + revoked_at?: string | null; + title: string; + updated_at: string; + user_id: string; +}; + diff --git a/src/client/models/Value.ts b/src/client/models/Value.ts new file mode 100644 index 0000000..1c696ca --- /dev/null +++ b/src/client/models/Value.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Value = { +}; + diff --git a/src/client/models/Verify2FAParams.ts b/src/client/models/Verify2FAParams.ts new file mode 100644 index 0000000..4aa5e85 --- /dev/null +++ b/src/client/models/Verify2FAParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Verify2FAParams = { + code: string; +}; + diff --git a/src/client/models/Visibility.ts b/src/client/models/Visibility.ts new file mode 100644 index 0000000..c721aed --- /dev/null +++ b/src/client/models/Visibility.ts @@ -0,0 +1,5 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type Visibility = 'Public' | 'Private' | 'Internal' | 'Workspace' | 'Protected' | 'Hidden' | 'Secret' | 'Unknown'; diff --git a/src/client/models/WatchParams.ts b/src/client/models/WatchParams.ts new file mode 100644 index 0000000..0853434 --- /dev/null +++ b/src/client/models/WatchParams.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WatchParams = { + level?: string | null; +}; + diff --git a/src/client/models/WikiCompareResult.ts b/src/client/models/WikiCompareResult.ts new file mode 100644 index 0000000..28ac2c3 --- /dev/null +++ b/src/client/models/WikiCompareResult.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { WikiPageRevision } from './WikiPageRevision'; +/** + * Result of comparing two wiki page revisions + */ +export type WikiCompareResult = { + /** + * The newer revision being compared + */ + new: WikiPageRevision; + /** + * The older revision being compared + */ + old: WikiPageRevision; +}; + diff --git a/src/client/models/WikiPage.ts b/src/client/models/WikiPage.ts new file mode 100644 index 0000000..6fa587c --- /dev/null +++ b/src/client/models/WikiPage.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WikiPage = { + author_id: string; + content: string; + created_at: string; + deleted_at?: string | null; + id: string; + last_editor_id?: string | null; + repo_id: string; + slug: string; + title: string; + updated_at: string; + version: number; +}; + diff --git a/src/client/models/WikiPageRevision.ts b/src/client/models/WikiPageRevision.ts new file mode 100644 index 0000000..627c7a1 --- /dev/null +++ b/src/client/models/WikiPageRevision.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WikiPageRevision = { + commit_message?: string | null; + content: string; + created_at: string; + editor_id: string; + id: string; + page_id: string; + title: string; + version: number; +}; + diff --git a/src/client/models/Workspace.ts b/src/client/models/Workspace.ts new file mode 100644 index 0000000..203e2e5 --- /dev/null +++ b/src/client/models/Workspace.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +import type { Visibility } from './Visibility'; +export type Workspace = { + archived_at?: string | null; + avatar_url?: string | null; + created_at: string; + default_role: string; + deleted_at?: string | null; + description?: string | null; + id: string; + is_personal: boolean; + name: string; + owner_id: string; + plan: string; + status: Status; + updated_at: string; + visibility: Visibility; +}; + diff --git a/src/client/models/WorkspaceAuditLog.ts b/src/client/models/WorkspaceAuditLog.ts new file mode 100644 index 0000000..c71eaa7 --- /dev/null +++ b/src/client/models/WorkspaceAuditLog.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { TargetType } from './TargetType'; +import type { Value } from './Value'; +export type WorkspaceAuditLog = { + action: string; + actor_id?: string | null; + created_at: string; + id: string; + ip_address?: string | null; + metadata?: (null | Value); + target_id?: string | null; + target_type?: (null | TargetType); + user_agent?: string | null; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceBilling.ts b/src/client/models/WorkspaceBilling.ts new file mode 100644 index 0000000..ed7b461 --- /dev/null +++ b/src/client/models/WorkspaceBilling.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Status } from './Status'; +export type WorkspaceBilling = { + billing_email?: string | null; + canceled_at?: string | null; + created_at: string; + current_period_end?: string | null; + current_period_start?: string | null; + customer_id?: string | null; + plan: string; + seats: number; + status: Status; + subscription_id?: string | null; + trial_ends_at?: string | null; + updated_at: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceCustomBranding.ts b/src/client/models/WorkspaceCustomBranding.ts new file mode 100644 index 0000000..b52cf50 --- /dev/null +++ b/src/client/models/WorkspaceCustomBranding.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WorkspaceCustomBranding = { + accent_color?: string | null; + created_at: string; + custom_css?: string | null; + enabled: boolean; + favicon_url?: string | null; + logo_url?: string | null; + primary_color?: string | null; + support_url?: string | null; + updated_at: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceDomain.ts b/src/client/models/WorkspaceDomain.ts new file mode 100644 index 0000000..ba8bf16 --- /dev/null +++ b/src/client/models/WorkspaceDomain.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WorkspaceDomain = { + created_at: string; + domain: string; + id: string; + is_primary: boolean; + is_verified: boolean; + updated_at: string; + verification_token_hash?: string | null; + verified_at?: string | null; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceIntegration.ts b/src/client/models/WorkspaceIntegration.ts new file mode 100644 index 0000000..b7644b2 --- /dev/null +++ b/src/client/models/WorkspaceIntegration.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Provider } from './Provider'; +export type WorkspaceIntegration = { + config: any; + created_at: string; + enabled: boolean; + id: string; + installed_by: string; + last_used_at?: string | null; + name: string; + provider: Provider; + secret_ciphertext?: string | null; + updated_at: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceIntegrationConfig.ts b/src/client/models/WorkspaceIntegrationConfig.ts new file mode 100644 index 0000000..c60c524 --- /dev/null +++ b/src/client/models/WorkspaceIntegrationConfig.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Permission } from './Permission'; +import type { Scope } from './Scope'; +import type { Value } from './Value'; +export type WorkspaceIntegrationConfig = { + callback_url?: string | null; + channel_ids: Array; + extra: Record; + permissions: Array; + repo_ids: Array; + scopes: Array; + settings: Record; +}; + diff --git a/src/client/models/WorkspaceInvitation.ts b/src/client/models/WorkspaceInvitation.ts new file mode 100644 index 0000000..629aa93 --- /dev/null +++ b/src/client/models/WorkspaceInvitation.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +export type WorkspaceInvitation = { + accepted_at?: string | null; + accepted_by?: string | null; + created_at: string; + email: string; + expires_at: string; + id: string; + invited_by: string; + revoked_at?: string | null; + role: Role; + token_hash: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceMember.ts b/src/client/models/WorkspaceMember.ts new file mode 100644 index 0000000..8726b11 --- /dev/null +++ b/src/client/models/WorkspaceMember.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { Role } from './Role'; +import type { Status } from './Status'; +export type WorkspaceMember = { + created_at: string; + id: string; + invited_by?: string | null; + joined_at?: string | null; + last_active_at?: string | null; + role: Role; + status: Status; + updated_at: string; + user_id: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspacePendingApproval.ts b/src/client/models/WorkspacePendingApproval.ts new file mode 100644 index 0000000..78ca534 --- /dev/null +++ b/src/client/models/WorkspacePendingApproval.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { RequestType } from './RequestType'; +import type { Status } from './Status'; +export type WorkspacePendingApproval = { + created_at: string; + expires_at?: string | null; + id: string; + reason?: string | null; + request_type: RequestType; + requester_id: string; + reviewed_at?: string | null; + reviewed_by?: string | null; + status: Status; + updated_at: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceSettings.ts b/src/client/models/WorkspaceSettings.ts new file mode 100644 index 0000000..7362015 --- /dev/null +++ b/src/client/models/WorkspaceSettings.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WorkspaceSettings = { + allow_member_invites: boolean; + allow_public_repos: boolean; + created_at: string; + default_branch_name: string; + default_repo_visibility: string; + issue_tracking_enabled: boolean; + pull_requests_enabled: boolean; + require_two_factor: boolean; + updated_at: string; + wiki_enabled: boolean; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceStats.ts b/src/client/models/WorkspaceStats.ts new file mode 100644 index 0000000..28496f2 --- /dev/null +++ b/src/client/models/WorkspaceStats.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type WorkspaceStats = { + bandwidth_bytes: number; + build_minutes_used: number; + issues_count: number; + last_activity_at?: string | null; + members_count: number; + pull_requests_count: number; + repos_count: number; + storage_bytes: number; + updated_at: string; + workspace_id: string; +}; + diff --git a/src/client/models/WorkspaceWebhook.ts b/src/client/models/WorkspaceWebhook.ts new file mode 100644 index 0000000..a5bde06 --- /dev/null +++ b/src/client/models/WorkspaceWebhook.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { EventType } from './EventType'; +export type WorkspaceWebhook = { + active: boolean; + created_at: string; + created_by: string; + events: Array; + id: string; + last_delivery_at?: string | null; + last_delivery_status?: string | null; + secret_ciphertext?: string | null; + updated_at: string; + url: string; + workspace_id: string; +}; + diff --git a/src/client/schemas/$AcceptInvitationParams.ts b/src/client/schemas/$AcceptInvitationParams.ts new file mode 100644 index 0000000..63611ec --- /dev/null +++ b/src/client/schemas/$AcceptInvitationParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AcceptInvitationParams = { + properties: { + token: { + type: 'string', + description: `Invitation token (received via email)`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$AcceptInvitationRequest.ts b/src/client/schemas/$AcceptInvitationRequest.ts new file mode 100644 index 0000000..f3427bd --- /dev/null +++ b/src/client/schemas/$AcceptInvitationRequest.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AcceptInvitationRequest = { + properties: { + token: { + type: 'string', + description: `The plaintext invitation token from the email link.`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$AddDeployKeyParams.ts b/src/client/schemas/$AddDeployKeyParams.ts new file mode 100644 index 0000000..69ef2f4 --- /dev/null +++ b/src/client/schemas/$AddDeployKeyParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddDeployKeyParams = { + properties: { + key_type: { + type: 'string', + isRequired: true, + }, + public_key: { + type: 'string', + isRequired: true, + }, + read_only: { + type: 'boolean', + isNullable: true, + }, + title: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$AddDomainParams.ts b/src/client/schemas/$AddDomainParams.ts new file mode 100644 index 0000000..8197c33 --- /dev/null +++ b/src/client/schemas/$AddDomainParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddDomainParams = { + properties: { + domain: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$AddGpgKeyParams.ts b/src/client/schemas/$AddGpgKeyParams.ts new file mode 100644 index 0000000..33b7f81 --- /dev/null +++ b/src/client/schemas/$AddGpgKeyParams.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddGpgKeyParams = { + properties: { + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + key_id: { + type: 'string', + isRequired: true, + }, + primary_email: { + type: 'string', + isNullable: true, + }, + public_key: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$AddMemberParams.ts b/src/client/schemas/$AddMemberParams.ts new file mode 100644 index 0000000..8988076 --- /dev/null +++ b/src/client/schemas/$AddMemberParams.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddMemberParams = { + properties: { + role: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$AddReplyParams.ts b/src/client/schemas/$AddReplyParams.ts new file mode 100644 index 0000000..3fe390d --- /dev/null +++ b/src/client/schemas/$AddReplyParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddReplyParams = { + properties: { + body: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$AddRepoMemberParams.ts b/src/client/schemas/$AddRepoMemberParams.ts new file mode 100644 index 0000000..67169de --- /dev/null +++ b/src/client/schemas/$AddRepoMemberParams.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddRepoMemberParams = { + properties: { + role: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$AddSshKeyParams.ts b/src/client/schemas/$AddSshKeyParams.ts new file mode 100644 index 0000000..f8ab62e --- /dev/null +++ b/src/client/schemas/$AddSshKeyParams.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $AddSshKeyParams = { + properties: { + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + key_type: { + type: 'string', + isRequired: true, + }, + public_key: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiEmptyResponse.ts b/src/client/schemas/$ApiEmptyResponse.ts new file mode 100644 index 0000000..3a4d209 --- /dev/null +++ b/src/client/schemas/$ApiEmptyResponse.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiEmptyResponse = { + properties: { + message: { + type: 'string', + description: `Human-readable success message.`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiErrorResponse.ts b/src/client/schemas/$ApiErrorResponse.ts new file mode 100644 index 0000000..c1b4fdc --- /dev/null +++ b/src/client/schemas/$ApiErrorResponse.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiErrorResponse = { + properties: { + error: { + type: 'string', + description: `Stable, client-safe error message.`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_BranchMergeCheck.ts b/src/client/schemas/$ApiResponse_BranchMergeCheck.ts new file mode 100644 index 0000000..bac78b0 --- /dev/null +++ b/src/client/schemas/$ApiResponse_BranchMergeCheck.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_BranchMergeCheck = { + properties: { + data: { + properties: { + allowed: { + type: 'boolean', + isRequired: true, + }, + reasons: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_BranchProtectionRule.ts b/src/client/schemas/$ApiResponse_BranchProtectionRule.ts new file mode 100644 index 0000000..8d4c348 --- /dev/null +++ b/src/client/schemas/$ApiResponse_BranchProtectionRule.ts @@ -0,0 +1,110 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_BranchProtectionRule = { + properties: { + data: { + properties: { + allow_deletions: { + type: 'boolean', + isRequired: true, + }, + allow_force_pushes: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + dismiss_stale_reviews: { + type: 'boolean', + isRequired: true, + }, + dismissal_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pattern: { + type: 'string', + isRequired: true, + }, + push_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + require_approvals: { + type: 'number', + isRequired: true, + format: 'int32', + }, + require_code_owner_review: { + type: 'boolean', + isRequired: true, + }, + require_conversation_resolution: { + type: 'boolean', + isRequired: true, + }, + require_linear_history: { + type: 'boolean', + isRequired: true, + }, + require_signed_commits: { + type: 'boolean', + isRequired: true, + }, + require_status_checks: { + type: 'boolean', + isRequired: true, + }, + required_status_checks: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + restrict_pushes: { + type: 'boolean', + isRequired: true, + }, + restrict_review_dismissal: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_CaptchaResponse.ts b/src/client/schemas/$ApiResponse_CaptchaResponse.ts new file mode 100644 index 0000000..af32571 --- /dev/null +++ b/src/client/schemas/$ApiResponse_CaptchaResponse.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_CaptchaResponse = { + properties: { + data: { + properties: { + base64: { + type: 'string', + isRequired: true, + }, + req: { + type: 'CaptchaQuery', + isRequired: true, + }, + rsa: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'RsaResponse', + }], + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_ContextMe.ts b/src/client/schemas/$ApiResponse_ContextMe.ts new file mode 100644 index 0000000..b23e5f2 --- /dev/null +++ b/src/client/schemas/$ApiResponse_ContextMe.ts @@ -0,0 +1,43 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_ContextMe = { + properties: { + data: { + properties: { + avatar_url: { + type: 'string', + isNullable: true, + }, + display_name: { + type: 'string', + isNullable: true, + }, + has_unread_notifications: { + type: 'number', + isRequired: true, + format: 'int64', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + language: { + type: 'string', + isRequired: true, + }, + timezone: { + type: 'string', + isRequired: true, + }, + username: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_CreateInvitationResponse.ts b/src/client/schemas/$ApiResponse_CreateInvitationResponse.ts new file mode 100644 index 0000000..c950f11 --- /dev/null +++ b/src/client/schemas/$ApiResponse_CreateInvitationResponse.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_CreateInvitationResponse = { + properties: { + data: { + properties: { + invitation: { + type: 'WorkspaceInvitation', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_EmailResponse.ts b/src/client/schemas/$ApiResponse_EmailResponse.ts new file mode 100644 index 0000000..3b87f57 --- /dev/null +++ b/src/client/schemas/$ApiResponse_EmailResponse.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_EmailResponse = { + properties: { + data: { + properties: { + email: { + type: 'string', + isNullable: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Enable2FAResponse.ts b/src/client/schemas/$ApiResponse_Enable2FAResponse.ts new file mode 100644 index 0000000..dcee80e --- /dev/null +++ b/src/client/schemas/$ApiResponse_Enable2FAResponse.ts @@ -0,0 +1,28 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Enable2FAResponse = { + properties: { + data: { + properties: { + backup_codes: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + qr_code: { + type: 'string', + isRequired: true, + }, + secret: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Get2FAStatusResponse.ts b/src/client/schemas/$ApiResponse_Get2FAStatusResponse.ts new file mode 100644 index 0000000..900bc87 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Get2FAStatusResponse.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Get2FAStatusResponse = { + properties: { + data: { + properties: { + has_backup_codes: { + type: 'boolean', + isRequired: true, + }, + is_enabled: { + type: 'boolean', + isRequired: true, + }, + method: { + type: 'string', + isNullable: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Issue.ts b/src/client/schemas/$ApiResponse_Issue.ts new file mode 100644 index 0000000..15d596d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Issue.ts @@ -0,0 +1,92 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Issue = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + closed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + locked: { + type: 'boolean', + isRequired: true, + }, + milestone_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + number: { + type: 'number', + isRequired: true, + format: 'int64', + }, + priority: { + type: 'Priority', + isRequired: true, + }, + state: { + type: 'State', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueAssignee.ts b/src/client/schemas/$ApiResponse_IssueAssignee.ts new file mode 100644 index 0000000..de8eb0f --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueAssignee.ts @@ -0,0 +1,38 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueAssignee = { + properties: { + data: { + properties: { + assigned_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + assignee_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueComment.ts b/src/client/schemas/$ApiResponse_IssueComment.ts new file mode 100644 index 0000000..dc237c7 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueComment.ts @@ -0,0 +1,57 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueComment = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + edited_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reply_to_comment_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueEvent.ts b/src/client/schemas/$ApiResponse_IssueEvent.ts new file mode 100644 index 0000000..b04d140 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueEvent.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueEvent = { + properties: { + data: { + properties: { + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + new_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + old_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueLabel.ts b/src/client/schemas/$ApiResponse_IssueLabel.ts new file mode 100644 index 0000000..622182c --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueLabel.ts @@ -0,0 +1,50 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueLabel = { + properties: { + data: { + properties: { + color: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueLabelRelation.ts b/src/client/schemas/$ApiResponse_IssueLabelRelation.ts new file mode 100644 index 0000000..8e82eb9 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueLabelRelation.ts @@ -0,0 +1,38 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueLabelRelation = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueMilestone.ts b/src/client/schemas/$ApiResponse_IssueMilestone.ts new file mode 100644 index 0000000..124a4c4 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueMilestone.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueMilestone = { + properties: { + data: { + properties: { + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssuePrRelation.ts b/src/client/schemas/$ApiResponse_IssuePrRelation.ts new file mode 100644 index 0000000..a930490 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssuePrRelation.ts @@ -0,0 +1,42 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssuePrRelation = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'RelationType', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueReaction.ts b/src/client/schemas/$ApiResponse_IssueReaction.ts new file mode 100644 index 0000000..ab9ef2a --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueReaction.ts @@ -0,0 +1,46 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueReaction = { + properties: { + data: { + properties: { + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'TargetType', + isRequired: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueRepoRelation.ts b/src/client/schemas/$ApiResponse_IssueRepoRelation.ts new file mode 100644 index 0000000..904b956 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueRepoRelation.ts @@ -0,0 +1,42 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueRepoRelation = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'RelationType', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueSubscriber.ts b/src/client/schemas/$ApiResponse_IssueSubscriber.ts new file mode 100644 index 0000000..f961c89 --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueSubscriber.ts @@ -0,0 +1,46 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueSubscriber = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + muted: { + type: 'boolean', + isRequired: true, + }, + reason: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_IssueTemplate.ts b/src/client/schemas/$ApiResponse_IssueTemplate.ts new file mode 100644 index 0000000..f28ef2f --- /dev/null +++ b/src/client/schemas/$ApiResponse_IssueTemplate.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_IssueTemplate = { + properties: { + data: { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + body_template: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + labels: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title_template: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Option_BranchProtectionRule.ts b/src/client/schemas/$ApiResponse_Option_BranchProtectionRule.ts new file mode 100644 index 0000000..4d84aff --- /dev/null +++ b/src/client/schemas/$ApiResponse_Option_BranchProtectionRule.ts @@ -0,0 +1,115 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Option_BranchProtectionRule = { + properties: { + data: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + properties: { + allow_deletions: { + type: 'boolean', + isRequired: true, + }, + allow_force_pushes: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + dismiss_stale_reviews: { + type: 'boolean', + isRequired: true, + }, + dismissal_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pattern: { + type: 'string', + isRequired: true, + }, + push_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + require_approvals: { + type: 'number', + isRequired: true, + format: 'int32', + }, + require_code_owner_review: { + type: 'boolean', + isRequired: true, + }, + require_conversation_resolution: { + type: 'boolean', + isRequired: true, + }, + require_linear_history: { + type: 'boolean', + isRequired: true, + }, + require_signed_commits: { + type: 'boolean', + isRequired: true, + }, + require_status_checks: { + type: 'boolean', + isRequired: true, + }, + required_status_checks: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + restrict_pushes: { + type: 'boolean', + isRequired: true, + }, + restrict_review_dismissal: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }], + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrAssignee.ts b/src/client/schemas/$ApiResponse_PrAssignee.ts new file mode 100644 index 0000000..3c9beaa --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrAssignee.ts @@ -0,0 +1,38 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrAssignee = { + properties: { + data: { + properties: { + assigned_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + assignee_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrCheckRun.ts b/src/client/schemas/$ApiResponse_PrCheckRun.ts new file mode 100644 index 0000000..318d557 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrCheckRun.ts @@ -0,0 +1,71 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrCheckRun = { + properties: { + data: { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + completed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + conclusion: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Status', + }], + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + details_url: { + type: 'string', + isNullable: true, + }, + external_id: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + started_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrCommit.ts b/src/client/schemas/$ApiResponse_PrCommit.ts new file mode 100644 index 0000000..53198fc --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrCommit.ts @@ -0,0 +1,52 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrCommit = { + properties: { + data: { + properties: { + authored_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + committed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + position: { + type: 'number', + isRequired: true, + format: 'int32', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrEvent.ts b/src/client/schemas/$ApiResponse_PrEvent.ts new file mode 100644 index 0000000..42e826d --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrEvent.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrEvent = { + properties: { + data: { + properties: { + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + new_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + old_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrFile.ts b/src/client/schemas/$ApiResponse_PrFile.ts new file mode 100644 index 0000000..9059f6f --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrFile.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrFile = { + properties: { + data: { + properties: { + additions: { + type: 'number', + isRequired: true, + format: 'int32', + }, + changes: { + type: 'number', + isRequired: true, + format: 'int32', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deletions: { + type: 'number', + isRequired: true, + format: 'int32', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + old_path: { + type: 'string', + isNullable: true, + }, + patch: { + type: 'string', + isNullable: true, + }, + path: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrLabel.ts b/src/client/schemas/$ApiResponse_PrLabel.ts new file mode 100644 index 0000000..2155299 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrLabel.ts @@ -0,0 +1,50 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrLabel = { + properties: { + data: { + properties: { + color: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrLabelRelation.ts b/src/client/schemas/$ApiResponse_PrLabelRelation.ts new file mode 100644 index 0000000..b58308b --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrLabelRelation.ts @@ -0,0 +1,38 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrLabelRelation = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrMergeStrategy.ts b/src/client/schemas/$ApiResponse_PrMergeStrategy.ts new file mode 100644 index 0000000..492202b --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrMergeStrategy.ts @@ -0,0 +1,57 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrMergeStrategy = { + properties: { + data: { + properties: { + auto_merge: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + delete_source_branch: { + type: 'boolean', + isRequired: true, + }, + merge_when_checks_pass: { + type: 'boolean', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + selected_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + squash_message: { + type: 'string', + isNullable: true, + }, + squash_title: { + type: 'string', + isNullable: true, + }, + strategy: { + type: 'MergeStrategyKind', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrReaction.ts b/src/client/schemas/$ApiResponse_PrReaction.ts new file mode 100644 index 0000000..e991e67 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrReaction.ts @@ -0,0 +1,46 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrReaction = { + properties: { + data: { + properties: { + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'TargetType', + isRequired: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrReview.ts b/src/client/schemas/$ApiResponse_PrReview.ts new file mode 100644 index 0000000..5487c2b --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrReview.ts @@ -0,0 +1,69 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrReview = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + commit_sha: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + dismiss_reason: { + type: 'string', + isNullable: true, + }, + dismissed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + dismissed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'string', + isRequired: true, + }, + submitted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrReviewComment.ts b/src/client/schemas/$ApiResponse_PrReviewComment.ts new file mode 100644 index 0000000..26e4821 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrReviewComment.ts @@ -0,0 +1,85 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrReviewComment = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + diff_hunk: { + type: 'string', + isNullable: true, + }, + edited_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + in_reply_to_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + original_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + original_start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + review_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrStatus.ts b/src/client/schemas/$ApiResponse_PrStatus.ts new file mode 100644 index 0000000..049c887 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrStatus.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrStatus = { + properties: { + data: { + properties: { + additions_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + approvals_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + changed_files_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + checks_state: { + type: 'State', + isRequired: true, + }, + conflicts: { + type: 'boolean', + isRequired: true, + }, + deletions_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + head_commit_sha: { + type: 'string', + isRequired: true, + }, + mergeable_state: { + type: 'State', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + requested_reviews_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PrSubscription.ts b/src/client/schemas/$ApiResponse_PrSubscription.ts new file mode 100644 index 0000000..f757ab7 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PrSubscription.ts @@ -0,0 +1,46 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PrSubscription = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + muted: { + type: 'boolean', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reason: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_PullRequest.ts b/src/client/schemas/$ApiResponse_PullRequest.ts new file mode 100644 index 0000000..4d6c8f6 --- /dev/null +++ b/src/client/schemas/$ApiResponse_PullRequest.ts @@ -0,0 +1,118 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_PullRequest = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + base_commit_sha: { + type: 'string', + isNullable: true, + }, + body: { + type: 'string', + isNullable: true, + }, + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + closed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + draft: { + type: 'boolean', + isRequired: true, + }, + head_commit_sha: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + locked: { + type: 'boolean', + isRequired: true, + }, + merge_commit_sha: { + type: 'string', + isNullable: true, + }, + merged_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + merged_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + number: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + source_branch: { + type: 'string', + isRequired: true, + }, + source_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + target_branch: { + type: 'string', + isRequired: true, + }, + target_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Regenerate2FABackupCodesResponse.ts b/src/client/schemas/$ApiResponse_Regenerate2FABackupCodesResponse.ts new file mode 100644 index 0000000..89dc819 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Regenerate2FABackupCodesResponse.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Regenerate2FABackupCodesResponse = { + properties: { + data: { + properties: { + backup_codes: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RegisterEmailCodeResponse.ts b/src/client/schemas/$ApiResponse_RegisterEmailCodeResponse.ts new file mode 100644 index 0000000..a3ba31d --- /dev/null +++ b/src/client/schemas/$ApiResponse_RegisterEmailCodeResponse.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RegisterEmailCodeResponse = { + properties: { + data: { + properties: { + expires_in_secs: { + type: 'number', + isRequired: true, + format: 'int64', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RegisterResponse.ts b/src/client/schemas/$ApiResponse_RegisterResponse.ts new file mode 100644 index 0000000..6d41a6d --- /dev/null +++ b/src/client/schemas/$ApiResponse_RegisterResponse.ts @@ -0,0 +1,34 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RegisterResponse = { + properties: { + data: { + properties: { + avatar_url: { + type: 'string', + description: `Avatar URL; usually absent right after registration.`, + isNullable: true, + }, + display_name: { + type: 'string', + description: `Display name initialized from username.`, + isNullable: true, + }, + id: { + type: 'string', + description: `Newly created user id.`, + isRequired: true, + format: 'uuid', + }, + username: { + type: 'string', + description: `Unique username used for login and profile URL.`, + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Repo.ts b/src/client/schemas/$ApiResponse_Repo.ts new file mode 100644 index 0000000..0b57bbe --- /dev/null +++ b/src/client/schemas/$ApiResponse_Repo.ts @@ -0,0 +1,98 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Repo = { + properties: { + data: { + properties: { + archived_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_branch: { + type: 'string', + isRequired: true, + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + forked_from_repo_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + git_service: { + type: 'GitService', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_fork: { + type: 'boolean', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + owner_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + primary_storage_node_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + storage_node_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + storage_path: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoBranch.ts b/src/client/schemas/$ApiResponse_RepoBranch.ts new file mode 100644 index 0000000..30b58b6 --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoBranch.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoBranch = { + properties: { + data: { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + default_branch: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_push_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_push_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + protected: { + type: 'boolean', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoCommitComment.ts b/src/client/schemas/$ApiResponse_RepoCommitComment.ts new file mode 100644 index 0000000..db6c8ce --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoCommitComment.ts @@ -0,0 +1,79 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoCommitComment = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isNullable: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + resolved: { + type: 'boolean', + isRequired: true, + }, + resolved_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + resolved_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoCommitStatus.ts b/src/client/schemas/$ApiResponse_RepoCommitStatus.ts new file mode 100644 index 0000000..cfe94bb --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoCommitStatus.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoCommitStatus = { + properties: { + data: { + properties: { + context: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + latest_commit_sha: { + type: 'string', + isRequired: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reported_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + reported_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + target_url: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoDeployKey.ts b/src/client/schemas/$ApiResponse_RepoDeployKey.ts new file mode 100644 index 0000000..3c4f35c --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoDeployKey.ts @@ -0,0 +1,73 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoDeployKey = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint_sha256: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_type: { + type: 'KeyType', + isRequired: true, + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + public_key: { + type: 'string', + isRequired: true, + }, + read_only: { + type: 'boolean', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoFork.ts b/src/client/schemas/$ApiResponse_RepoFork.ts new file mode 100644 index 0000000..3fa2b6e --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoFork.ts @@ -0,0 +1,38 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoFork = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + fork_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + forked_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + parent_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoInvitation.ts b/src/client/schemas/$ApiResponse_RepoInvitation.ts new file mode 100644 index 0000000..dce4eba --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoInvitation.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoInvitation = { + properties: { + data: { + properties: { + accepted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + accepted_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + email: { + type: 'string', + isRequired: true, + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + token_hash: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoMember.ts b/src/client/schemas/$ApiResponse_RepoMember.ts new file mode 100644 index 0000000..6ae2ee1 --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoMember.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoMember = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + joined_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_active_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoRelease.ts b/src/client/schemas/$ApiResponse_RepoRelease.ts new file mode 100644 index 0000000..862d0fd --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoRelease.ts @@ -0,0 +1,73 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoRelease = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + draft: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + prerelease: { + type: 'boolean', + isRequired: true, + }, + published_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + tag_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + tag_name: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoStar.ts b/src/client/schemas/$ApiResponse_RepoStar.ts new file mode 100644 index 0000000..debfd96 --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoStar.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoStar = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoStats.ts b/src/client/schemas/$ApiResponse_RepoStats.ts new file mode 100644 index 0000000..70a80f8 --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoStats.ts @@ -0,0 +1,78 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoStats = { + properties: { + data: { + properties: { + branches_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + commits_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + forks_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + last_push_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + open_issues_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + open_pull_requests_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + releases_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + size_bytes: { + type: 'number', + isRequired: true, + format: 'int64', + }, + stars_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + tags_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + watchers_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoTag.ts b/src/client/schemas/$ApiResponse_RepoTag.ts new file mode 100644 index 0000000..2073bff --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoTag.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoTag = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + message: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + signed: { + type: 'boolean', + isRequired: true, + }, + tagger_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_commit_sha: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoWatch.ts b/src/client/schemas/$ApiResponse_RepoWatch.ts new file mode 100644 index 0000000..2dbe5b6 --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoWatch.ts @@ -0,0 +1,42 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoWatch = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + level: { + type: 'SubscriptionLevel', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RepoWebhook.ts b/src/client/schemas/$ApiResponse_RepoWebhook.ts new file mode 100644 index 0000000..363405d --- /dev/null +++ b/src/client/schemas/$ApiResponse_RepoWebhook.ts @@ -0,0 +1,66 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RepoWebhook = { + properties: { + data: { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_delivery_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_delivery_status: { + type: 'string', + isNullable: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + url: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_RsaResponse.ts b/src/client/schemas/$ApiResponse_RsaResponse.ts new file mode 100644 index 0000000..c8dbbbe --- /dev/null +++ b/src/client/schemas/$ApiResponse_RsaResponse.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_RsaResponse = { + properties: { + data: { + properties: { + public_key: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_String.ts b/src/client/schemas/$ApiResponse_String.ts new file mode 100644 index 0000000..a28fa33 --- /dev/null +++ b/src/client/schemas/$ApiResponse_String.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_String = { + properties: { + data: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_User.ts b/src/client/schemas/$ApiResponse_User.ts new file mode 100644 index 0000000..f16afaf --- /dev/null +++ b/src/client/schemas/$ApiResponse_User.ts @@ -0,0 +1,74 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_User = { + properties: { + data: { + properties: { + avatar_url: { + type: 'string', + isNullable: true, + }, + bio: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + display_name: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_active: { + type: 'boolean', + isRequired: true, + }, + is_bot: { + type: 'boolean', + isRequired: true, + }, + last_login_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + username: { + type: 'string', + isRequired: true, + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserAppearance.ts b/src/client/schemas/$ApiResponse_UserAppearance.ts new file mode 100644 index 0000000..1e33b21 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserAppearance.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserAppearance = { + properties: { + data: { + properties: { + color_scheme: { + type: 'ColorScheme', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + density: { + type: 'Density', + isRequired: true, + }, + editor_theme: { + type: 'string', + isNullable: true, + }, + font_size: { + type: 'FontSize', + isRequired: true, + }, + markdown_preview: { + type: 'boolean', + isRequired: true, + }, + reduced_motion: { + type: 'boolean', + isRequired: true, + }, + theme: { + type: 'Theme', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserAvatarResponse.ts b/src/client/schemas/$ApiResponse_UserAvatarResponse.ts new file mode 100644 index 0000000..d5f1fcc --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserAvatarResponse.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserAvatarResponse = { + properties: { + data: { + properties: { + avatar_url: { + type: 'string', + isRequired: true, + }, + storage_key: { + type: 'string', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserDevice.ts b/src/client/schemas/$ApiResponse_UserDevice.ts new file mode 100644 index 0000000..5b9e558 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserDevice.ts @@ -0,0 +1,62 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserDevice = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + device_name: { + type: 'string', + isRequired: true, + }, + device_type: { + type: 'DeviceType', + isRequired: true, + }, + fingerprint: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + last_seen_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + trusted: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_agent: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserGpgKey.ts b/src/client/schemas/$ApiResponse_UserGpgKey.ts new file mode 100644 index 0000000..f9782ba --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserGpgKey.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserGpgKey = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_id: { + type: 'string', + isRequired: true, + }, + primary_email: { + type: 'string', + isNullable: true, + }, + public_key: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + verified_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserNotifySetting.ts b/src/client/schemas/$ApiResponse_UserNotifySetting.ts new file mode 100644 index 0000000..07834d3 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserNotifySetting.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserNotifySetting = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + digest_frequency: { + type: 'DigestFrequency', + isRequired: true, + }, + email_notifications: { + type: 'boolean', + isRequired: true, + }, + marketing_emails: { + type: 'boolean', + isRequired: true, + }, + mention_notifications: { + type: 'boolean', + isRequired: true, + }, + review_notifications: { + type: 'boolean', + isRequired: true, + }, + security_notifications: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + web_notifications: { + type: 'boolean', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserOAuthInfo.ts b/src/client/schemas/$ApiResponse_UserOAuthInfo.ts new file mode 100644 index 0000000..7116023 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserOAuthInfo.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserOAuthInfo = { + properties: { + data: { + properties: { + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + linked_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + provider: { + type: 'Provider', + isRequired: true, + }, + provider_email: { + type: 'string', + isNullable: true, + }, + provider_user_id: { + type: 'string', + isRequired: true, + }, + provider_username: { + type: 'string', + isNullable: true, + }, + token_expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserPersonalAccessTokenInfo.ts b/src/client/schemas/$ApiResponse_UserPersonalAccessTokenInfo.ts new file mode 100644 index 0000000..b1db5c9 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserPersonalAccessTokenInfo.ts @@ -0,0 +1,54 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserPersonalAccessTokenInfo = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + name: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + scopes: { + type: 'array', + contains: { + type: 'Scope', + }, + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserProfile.ts b/src/client/schemas/$ApiResponse_UserProfile.ts new file mode 100644 index 0000000..f5cdad0 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserProfile.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserProfile = { + properties: { + data: { + properties: { + company: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + full_name: { + type: 'string', + isNullable: true, + }, + language: { + type: 'string', + isNullable: true, + }, + location: { + type: 'string', + isNullable: true, + }, + profile_readme: { + type: 'string', + isNullable: true, + }, + timezone: { + type: 'string', + isNullable: true, + }, + twitter_username: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + website_url: { + type: 'string', + isNullable: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserSecurityLog.ts b/src/client/schemas/$ApiResponse_UserSecurityLog.ts new file mode 100644 index 0000000..c9c751b --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserSecurityLog.ts @@ -0,0 +1,52 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserSecurityLog = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + user_agent: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserSessionInfo.ts b/src/client/schemas/$ApiResponse_UserSessionInfo.ts new file mode 100644 index 0000000..b757d97 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserSessionInfo.ts @@ -0,0 +1,46 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserSessionInfo = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + last_active_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + user_agent: { + type: 'string', + isNullable: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_UserSshKey.ts b/src/client/schemas/$ApiResponse_UserSshKey.ts new file mode 100644 index 0000000..f01b358 --- /dev/null +++ b/src/client/schemas/$ApiResponse_UserSshKey.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_UserSshKey = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint_sha256: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_type: { + type: 'KeyType', + isRequired: true, + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + public_key: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_BranchProtectionRule.ts b/src/client/schemas/$ApiResponse_Vec_BranchProtectionRule.ts new file mode 100644 index 0000000..3ca78ec --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_BranchProtectionRule.ts @@ -0,0 +1,113 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_BranchProtectionRule = { + properties: { + data: { + type: 'array', + contains: { + properties: { + allow_deletions: { + type: 'boolean', + isRequired: true, + }, + allow_force_pushes: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + dismiss_stale_reviews: { + type: 'boolean', + isRequired: true, + }, + dismissal_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pattern: { + type: 'string', + isRequired: true, + }, + push_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + require_approvals: { + type: 'number', + isRequired: true, + format: 'int32', + }, + require_code_owner_review: { + type: 'boolean', + isRequired: true, + }, + require_conversation_resolution: { + type: 'boolean', + isRequired: true, + }, + require_linear_history: { + type: 'boolean', + isRequired: true, + }, + require_signed_commits: { + type: 'boolean', + isRequired: true, + }, + require_status_checks: { + type: 'boolean', + isRequired: true, + }, + required_status_checks: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + restrict_pushes: { + type: 'boolean', + isRequired: true, + }, + restrict_review_dismissal: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_Issue.ts b/src/client/schemas/$ApiResponse_Vec_Issue.ts new file mode 100644 index 0000000..cd26dae --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_Issue.ts @@ -0,0 +1,95 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_Issue = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + closed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + locked: { + type: 'boolean', + isRequired: true, + }, + milestone_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + number: { + type: 'number', + isRequired: true, + format: 'int64', + }, + priority: { + type: 'Priority', + isRequired: true, + }, + state: { + type: 'State', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueAssignee.ts b/src/client/schemas/$ApiResponse_Vec_IssueAssignee.ts new file mode 100644 index 0000000..008a08d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueAssignee.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueAssignee = { + properties: { + data: { + type: 'array', + contains: { + properties: { + assigned_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + assignee_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueComment.ts b/src/client/schemas/$ApiResponse_Vec_IssueComment.ts new file mode 100644 index 0000000..e05a33d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueComment.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueComment = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + edited_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reply_to_comment_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueEvent.ts b/src/client/schemas/$ApiResponse_Vec_IssueEvent.ts new file mode 100644 index 0000000..bb2cf0e --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueEvent.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueEvent = { + properties: { + data: { + type: 'array', + contains: { + properties: { + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + new_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + old_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueLabel.ts b/src/client/schemas/$ApiResponse_Vec_IssueLabel.ts new file mode 100644 index 0000000..46848bf --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueLabel.ts @@ -0,0 +1,53 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueLabel = { + properties: { + data: { + type: 'array', + contains: { + properties: { + color: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueLabelRelation.ts b/src/client/schemas/$ApiResponse_Vec_IssueLabelRelation.ts new file mode 100644 index 0000000..842d784 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueLabelRelation.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueLabelRelation = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueMilestone.ts b/src/client/schemas/$ApiResponse_Vec_IssueMilestone.ts new file mode 100644 index 0000000..6dd4298 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueMilestone.ts @@ -0,0 +1,63 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueMilestone = { + properties: { + data: { + type: 'array', + contains: { + properties: { + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssuePrRelation.ts b/src/client/schemas/$ApiResponse_Vec_IssuePrRelation.ts new file mode 100644 index 0000000..0317a63 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssuePrRelation.ts @@ -0,0 +1,45 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssuePrRelation = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'RelationType', + isRequired: true, + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueReaction.ts b/src/client/schemas/$ApiResponse_Vec_IssueReaction.ts new file mode 100644 index 0000000..44cbd9e --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueReaction.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueReaction = { + properties: { + data: { + type: 'array', + contains: { + properties: { + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'TargetType', + isRequired: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueRepoRelation.ts b/src/client/schemas/$ApiResponse_Vec_IssueRepoRelation.ts new file mode 100644 index 0000000..f468b02 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueRepoRelation.ts @@ -0,0 +1,45 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueRepoRelation = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'RelationType', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueSubscriber.ts b/src/client/schemas/$ApiResponse_Vec_IssueSubscriber.ts new file mode 100644 index 0000000..d88dc04 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueSubscriber.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueSubscriber = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + muted: { + type: 'boolean', + isRequired: true, + }, + reason: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_IssueTemplate.ts b/src/client/schemas/$ApiResponse_Vec_IssueTemplate.ts new file mode 100644 index 0000000..b4f1f3e --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_IssueTemplate.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_IssueTemplate = { + properties: { + data: { + type: 'array', + contains: { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + body_template: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + labels: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title_template: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrAssignee.ts b/src/client/schemas/$ApiResponse_Vec_PrAssignee.ts new file mode 100644 index 0000000..432bf19 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrAssignee.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrAssignee = { + properties: { + data: { + type: 'array', + contains: { + properties: { + assigned_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + assignee_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrCheckRun.ts b/src/client/schemas/$ApiResponse_Vec_PrCheckRun.ts new file mode 100644 index 0000000..f81a879 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrCheckRun.ts @@ -0,0 +1,74 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrCheckRun = { + properties: { + data: { + type: 'array', + contains: { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + completed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + conclusion: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Status', + }], + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + details_url: { + type: 'string', + isNullable: true, + }, + external_id: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + started_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrCommit.ts b/src/client/schemas/$ApiResponse_Vec_PrCommit.ts new file mode 100644 index 0000000..a72894a --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrCommit.ts @@ -0,0 +1,55 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrCommit = { + properties: { + data: { + type: 'array', + contains: { + properties: { + authored_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + committed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + position: { + type: 'number', + isRequired: true, + format: 'int32', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrEvent.ts b/src/client/schemas/$ApiResponse_Vec_PrEvent.ts new file mode 100644 index 0000000..693b1f7 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrEvent.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrEvent = { + properties: { + data: { + type: 'array', + contains: { + properties: { + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + new_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + old_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrFile.ts b/src/client/schemas/$ApiResponse_Vec_PrFile.ts new file mode 100644 index 0000000..e084cfe --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrFile.ts @@ -0,0 +1,67 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrFile = { + properties: { + data: { + type: 'array', + contains: { + properties: { + additions: { + type: 'number', + isRequired: true, + format: 'int32', + }, + changes: { + type: 'number', + isRequired: true, + format: 'int32', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deletions: { + type: 'number', + isRequired: true, + format: 'int32', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + old_path: { + type: 'string', + isNullable: true, + }, + patch: { + type: 'string', + isNullable: true, + }, + path: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrLabel.ts b/src/client/schemas/$ApiResponse_Vec_PrLabel.ts new file mode 100644 index 0000000..15ee72d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrLabel.ts @@ -0,0 +1,53 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrLabel = { + properties: { + data: { + type: 'array', + contains: { + properties: { + color: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrLabelRelation.ts b/src/client/schemas/$ApiResponse_Vec_PrLabelRelation.ts new file mode 100644 index 0000000..74f7e89 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrLabelRelation.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrLabelRelation = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrReaction.ts b/src/client/schemas/$ApiResponse_Vec_PrReaction.ts new file mode 100644 index 0000000..d01e9ef --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrReaction.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrReaction = { + properties: { + data: { + type: 'array', + contains: { + properties: { + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'TargetType', + isRequired: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrReview.ts b/src/client/schemas/$ApiResponse_Vec_PrReview.ts new file mode 100644 index 0000000..426ba30 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrReview.ts @@ -0,0 +1,72 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrReview = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + commit_sha: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + dismiss_reason: { + type: 'string', + isNullable: true, + }, + dismissed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + dismissed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'string', + isRequired: true, + }, + submitted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrReviewComment.ts b/src/client/schemas/$ApiResponse_Vec_PrReviewComment.ts new file mode 100644 index 0000000..cd53f23 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrReviewComment.ts @@ -0,0 +1,88 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrReviewComment = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + diff_hunk: { + type: 'string', + isNullable: true, + }, + edited_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + in_reply_to_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + original_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + original_start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + review_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PrSubscription.ts b/src/client/schemas/$ApiResponse_Vec_PrSubscription.ts new file mode 100644 index 0000000..2d909e2 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PrSubscription.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PrSubscription = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + muted: { + type: 'boolean', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reason: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_PullRequest.ts b/src/client/schemas/$ApiResponse_Vec_PullRequest.ts new file mode 100644 index 0000000..ad8f54c --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_PullRequest.ts @@ -0,0 +1,121 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_PullRequest = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + base_commit_sha: { + type: 'string', + isNullable: true, + }, + body: { + type: 'string', + isNullable: true, + }, + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + closed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + draft: { + type: 'boolean', + isRequired: true, + }, + head_commit_sha: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + locked: { + type: 'boolean', + isRequired: true, + }, + merge_commit_sha: { + type: 'string', + isNullable: true, + }, + merged_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + merged_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + number: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + source_branch: { + type: 'string', + isRequired: true, + }, + source_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + target_branch: { + type: 'string', + isRequired: true, + }, + target_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_Repo.ts b/src/client/schemas/$ApiResponse_Vec_Repo.ts new file mode 100644 index 0000000..c81664d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_Repo.ts @@ -0,0 +1,101 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_Repo = { + properties: { + data: { + type: 'array', + contains: { + properties: { + archived_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_branch: { + type: 'string', + isRequired: true, + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + forked_from_repo_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + git_service: { + type: 'GitService', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_fork: { + type: 'boolean', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + owner_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + primary_storage_node_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + storage_node_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + storage_path: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoBranch.ts b/src/client/schemas/$ApiResponse_Vec_RepoBranch.ts new file mode 100644 index 0000000..482adfc --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoBranch.ts @@ -0,0 +1,67 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoBranch = { + properties: { + data: { + type: 'array', + contains: { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + default_branch: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_push_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_push_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + protected: { + type: 'boolean', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoCommitComment.ts b/src/client/schemas/$ApiResponse_Vec_RepoCommitComment.ts new file mode 100644 index 0000000..b480482 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoCommitComment.ts @@ -0,0 +1,82 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoCommitComment = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isNullable: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + resolved: { + type: 'boolean', + isRequired: true, + }, + resolved_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + resolved_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoCommitStatus.ts b/src/client/schemas/$ApiResponse_Vec_RepoCommitStatus.ts new file mode 100644 index 0000000..72bf0cc --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoCommitStatus.ts @@ -0,0 +1,71 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoCommitStatus = { + properties: { + data: { + type: 'array', + contains: { + properties: { + context: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + latest_commit_sha: { + type: 'string', + isRequired: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reported_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + reported_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + target_url: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoDeployKey.ts b/src/client/schemas/$ApiResponse_Vec_RepoDeployKey.ts new file mode 100644 index 0000000..ed90598 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoDeployKey.ts @@ -0,0 +1,76 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoDeployKey = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint_sha256: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_type: { + type: 'KeyType', + isRequired: true, + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + public_key: { + type: 'string', + isRequired: true, + }, + read_only: { + type: 'boolean', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoFork.ts b/src/client/schemas/$ApiResponse_Vec_RepoFork.ts new file mode 100644 index 0000000..8a33313 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoFork.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoFork = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + fork_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + forked_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + parent_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoInvitation.ts b/src/client/schemas/$ApiResponse_Vec_RepoInvitation.ts new file mode 100644 index 0000000..6f7bd26 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoInvitation.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoInvitation = { + properties: { + data: { + type: 'array', + contains: { + properties: { + accepted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + accepted_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + email: { + type: 'string', + isRequired: true, + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + token_hash: { + type: 'string', + isRequired: true, + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoMember.ts b/src/client/schemas/$ApiResponse_Vec_RepoMember.ts new file mode 100644 index 0000000..3c996f5 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoMember.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoMember = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + joined_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_active_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoRelease.ts b/src/client/schemas/$ApiResponse_Vec_RepoRelease.ts new file mode 100644 index 0000000..1af10f1 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoRelease.ts @@ -0,0 +1,76 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoRelease = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + draft: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + prerelease: { + type: 'boolean', + isRequired: true, + }, + published_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + tag_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + tag_name: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoStar.ts b/src/client/schemas/$ApiResponse_Vec_RepoStar.ts new file mode 100644 index 0000000..aec47eb --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoStar.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoStar = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoTag.ts b/src/client/schemas/$ApiResponse_Vec_RepoTag.ts new file mode 100644 index 0000000..0df5f6b --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoTag.ts @@ -0,0 +1,52 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoTag = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + message: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + signed: { + type: 'boolean', + isRequired: true, + }, + tagger_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_commit_sha: { + type: 'string', + isRequired: true, + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoWatch.ts b/src/client/schemas/$ApiResponse_Vec_RepoWatch.ts new file mode 100644 index 0000000..5579814 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoWatch.ts @@ -0,0 +1,45 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoWatch = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + level: { + type: 'SubscriptionLevel', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_RepoWebhook.ts b/src/client/schemas/$ApiResponse_Vec_RepoWebhook.ts new file mode 100644 index 0000000..cbf297e --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_RepoWebhook.ts @@ -0,0 +1,69 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_RepoWebhook = { + properties: { + data: { + type: 'array', + contains: { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_delivery_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_delivery_status: { + type: 'string', + isNullable: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + url: { + type: 'string', + isRequired: true, + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserDevice.ts b/src/client/schemas/$ApiResponse_Vec_UserDevice.ts new file mode 100644 index 0000000..f4fa149 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserDevice.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserDevice = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + device_name: { + type: 'string', + isRequired: true, + }, + device_type: { + type: 'DeviceType', + isRequired: true, + }, + fingerprint: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + last_seen_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + trusted: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_agent: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserGpgKey.ts b/src/client/schemas/$ApiResponse_Vec_UserGpgKey.ts new file mode 100644 index 0000000..707417d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserGpgKey.ts @@ -0,0 +1,67 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserGpgKey = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_id: { + type: 'string', + isRequired: true, + }, + primary_email: { + type: 'string', + isNullable: true, + }, + public_key: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + verified_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserOAuthInfo.ts b/src/client/schemas/$ApiResponse_Vec_UserOAuthInfo.ts new file mode 100644 index 0000000..bba66fc --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserOAuthInfo.ts @@ -0,0 +1,52 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserOAuthInfo = { + properties: { + data: { + type: 'array', + contains: { + properties: { + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + linked_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + provider: { + type: 'Provider', + isRequired: true, + }, + provider_email: { + type: 'string', + isNullable: true, + }, + provider_user_id: { + type: 'string', + isRequired: true, + }, + provider_username: { + type: 'string', + isNullable: true, + }, + token_expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserPersonalAccessTokenInfo.ts b/src/client/schemas/$ApiResponse_Vec_UserPersonalAccessTokenInfo.ts new file mode 100644 index 0000000..d67948a --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserPersonalAccessTokenInfo.ts @@ -0,0 +1,57 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserPersonalAccessTokenInfo = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + name: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + scopes: { + type: 'array', + contains: { + type: 'Scope', + }, + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserSecurityLog.ts b/src/client/schemas/$ApiResponse_Vec_UserSecurityLog.ts new file mode 100644 index 0000000..7626a0a --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserSecurityLog.ts @@ -0,0 +1,55 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserSecurityLog = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + user_agent: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserSessionInfo.ts b/src/client/schemas/$ApiResponse_Vec_UserSessionInfo.ts new file mode 100644 index 0000000..3703773 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserSessionInfo.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserSessionInfo = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + last_active_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + user_agent: { + type: 'string', + isNullable: true, + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_UserSshKey.ts b/src/client/schemas/$ApiResponse_Vec_UserSshKey.ts new file mode 100644 index 0000000..146b91f --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_UserSshKey.ts @@ -0,0 +1,67 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_UserSshKey = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint_sha256: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_type: { + type: 'KeyType', + isRequired: true, + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + public_key: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WikiPage.ts b/src/client/schemas/$ApiResponse_Vec_WikiPage.ts new file mode 100644 index 0000000..c3de14a --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WikiPage.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WikiPage = { + properties: { + data: { + type: 'array', + contains: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_editor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + slug: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + version: { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WikiPageRevision.ts b/src/client/schemas/$ApiResponse_Vec_WikiPageRevision.ts new file mode 100644 index 0000000..fa899e8 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WikiPageRevision.ts @@ -0,0 +1,53 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WikiPageRevision = { + properties: { + data: { + type: 'array', + contains: { + properties: { + commit_message: { + type: 'string', + isNullable: true, + }, + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + editor_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + page_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title: { + type: 'string', + isRequired: true, + }, + version: { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_Workspace.ts b/src/client/schemas/$ApiResponse_Vec_Workspace.ts new file mode 100644 index 0000000..9f1c5a7 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_Workspace.ts @@ -0,0 +1,78 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_Workspace = { + properties: { + data: { + type: 'array', + contains: { + properties: { + archived_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + avatar_url: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_role: { + type: 'string', + isRequired: true, + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_personal: { + type: 'boolean', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + owner_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + plan: { + type: 'string', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspaceAuditLog.ts b/src/client/schemas/$ApiResponse_Vec_WorkspaceAuditLog.ts new file mode 100644 index 0000000..5e5bcd9 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspaceAuditLog.ts @@ -0,0 +1,69 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspaceAuditLog = { + properties: { + data: { + type: 'array', + contains: { + properties: { + action: { + type: 'string', + isRequired: true, + }, + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'TargetType', + }], + }, + user_agent: { + type: 'string', + isNullable: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspaceDomain.ts b/src/client/schemas/$ApiResponse_Vec_WorkspaceDomain.ts new file mode 100644 index 0000000..72a7e36 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspaceDomain.ts @@ -0,0 +1,57 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspaceDomain = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + domain: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_primary: { + type: 'boolean', + isRequired: true, + }, + is_verified: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + verification_token_hash: { + type: 'string', + isNullable: true, + }, + verified_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspaceIntegration.ts b/src/client/schemas/$ApiResponse_Vec_WorkspaceIntegration.ts new file mode 100644 index 0000000..1a29258 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspaceIntegration.ts @@ -0,0 +1,67 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspaceIntegration = { + properties: { + data: { + type: 'array', + contains: { + properties: { + config: { + properties: { + }, + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + enabled: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + installed_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + name: { + type: 'string', + isRequired: true, + }, + provider: { + type: 'Provider', + isRequired: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspaceInvitation.ts b/src/client/schemas/$ApiResponse_Vec_WorkspaceInvitation.ts new file mode 100644 index 0000000..91b391d --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspaceInvitation.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspaceInvitation = { + properties: { + data: { + type: 'array', + contains: { + properties: { + accepted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + accepted_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + email: { + type: 'string', + isRequired: true, + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + token_hash: { + type: 'string', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspaceMember.ts b/src/client/schemas/$ApiResponse_Vec_WorkspaceMember.ts new file mode 100644 index 0000000..e8b1ac6 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspaceMember.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspaceMember = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + joined_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_active_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspacePendingApproval.ts b/src/client/schemas/$ApiResponse_Vec_WorkspacePendingApproval.ts new file mode 100644 index 0000000..2e57d61 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspacePendingApproval.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspacePendingApproval = { + properties: { + data: { + type: 'array', + contains: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reason: { + type: 'string', + isNullable: true, + }, + request_type: { + type: 'RequestType', + isRequired: true, + }, + requester_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reviewed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + reviewed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Vec_WorkspaceWebhook.ts b/src/client/schemas/$ApiResponse_Vec_WorkspaceWebhook.ts new file mode 100644 index 0000000..2fb76d2 --- /dev/null +++ b/src/client/schemas/$ApiResponse_Vec_WorkspaceWebhook.ts @@ -0,0 +1,69 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Vec_WorkspaceWebhook = { + properties: { + data: { + type: 'array', + contains: { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_delivery_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_delivery_status: { + type: 'string', + isNullable: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + url: { + type: 'string', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WikiCompareResult.ts b/src/client/schemas/$ApiResponse_WikiCompareResult.ts new file mode 100644 index 0000000..5bc3310 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WikiCompareResult.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WikiCompareResult = { + properties: { + data: { + description: `Result of comparing two wiki page revisions`, + properties: { + new: { + type: 'WikiPageRevision', + description: `The newer revision being compared`, + isRequired: true, + }, + old: { + type: 'WikiPageRevision', + description: `The older revision being compared`, + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WikiPage.ts b/src/client/schemas/$ApiResponse_WikiPage.ts new file mode 100644 index 0000000..392c862 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WikiPage.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WikiPage = { + properties: { + data: { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_editor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + slug: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + version: { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WikiPageRevision.ts b/src/client/schemas/$ApiResponse_WikiPageRevision.ts new file mode 100644 index 0000000..719fb2f --- /dev/null +++ b/src/client/schemas/$ApiResponse_WikiPageRevision.ts @@ -0,0 +1,50 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WikiPageRevision = { + properties: { + data: { + properties: { + commit_message: { + type: 'string', + isNullable: true, + }, + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + editor_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + page_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title: { + type: 'string', + isRequired: true, + }, + version: { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_Workspace.ts b/src/client/schemas/$ApiResponse_Workspace.ts new file mode 100644 index 0000000..3e6f9cf --- /dev/null +++ b/src/client/schemas/$ApiResponse_Workspace.ts @@ -0,0 +1,75 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_Workspace = { + properties: { + data: { + properties: { + archived_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + avatar_url: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_role: { + type: 'string', + isRequired: true, + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_personal: { + type: 'boolean', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + owner_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + plan: { + type: 'string', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceBilling.ts b/src/client/schemas/$ApiResponse_WorkspaceBilling.ts new file mode 100644 index 0000000..3d9df2d --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceBilling.ts @@ -0,0 +1,73 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceBilling = { + properties: { + data: { + properties: { + billing_email: { + type: 'string', + isNullable: true, + }, + canceled_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + current_period_end: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + current_period_start: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + customer_id: { + type: 'string', + isNullable: true, + }, + plan: { + type: 'string', + isRequired: true, + }, + seats: { + type: 'number', + isRequired: true, + format: 'int32', + }, + status: { + type: 'Status', + isRequired: true, + }, + subscription_id: { + type: 'string', + isNullable: true, + }, + trial_ends_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceCustomBranding.ts b/src/client/schemas/$ApiResponse_WorkspaceCustomBranding.ts new file mode 100644 index 0000000..fd7861e --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceCustomBranding.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceCustomBranding = { + properties: { + data: { + properties: { + accent_color: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + custom_css: { + type: 'string', + isNullable: true, + }, + enabled: { + type: 'boolean', + isRequired: true, + }, + favicon_url: { + type: 'string', + isNullable: true, + }, + logo_url: { + type: 'string', + isNullable: true, + }, + primary_color: { + type: 'string', + isNullable: true, + }, + support_url: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceDomain.ts b/src/client/schemas/$ApiResponse_WorkspaceDomain.ts new file mode 100644 index 0000000..c758a8c --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceDomain.ts @@ -0,0 +1,54 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceDomain = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + domain: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_primary: { + type: 'boolean', + isRequired: true, + }, + is_verified: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + verification_token_hash: { + type: 'string', + isNullable: true, + }, + verified_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceIntegration.ts b/src/client/schemas/$ApiResponse_WorkspaceIntegration.ts new file mode 100644 index 0000000..f604a96 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceIntegration.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceIntegration = { + properties: { + data: { + properties: { + config: { + properties: { + }, + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + enabled: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + installed_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + name: { + type: 'string', + isRequired: true, + }, + provider: { + type: 'Provider', + isRequired: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceInvitation.ts b/src/client/schemas/$ApiResponse_WorkspaceInvitation.ts new file mode 100644 index 0000000..9410b21 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceInvitation.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceInvitation = { + properties: { + data: { + properties: { + accepted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + accepted_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + email: { + type: 'string', + isRequired: true, + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + token_hash: { + type: 'string', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceMember.ts b/src/client/schemas/$ApiResponse_WorkspaceMember.ts new file mode 100644 index 0000000..d157873 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceMember.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceMember = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + joined_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_active_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspacePendingApproval.ts b/src/client/schemas/$ApiResponse_WorkspacePendingApproval.ts new file mode 100644 index 0000000..8452a7f --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspacePendingApproval.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspacePendingApproval = { + properties: { + data: { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reason: { + type: 'string', + isNullable: true, + }, + request_type: { + type: 'RequestType', + isRequired: true, + }, + requester_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reviewed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + reviewed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceSettings.ts b/src/client/schemas/$ApiResponse_WorkspaceSettings.ts new file mode 100644 index 0000000..f02293e --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceSettings.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceSettings = { + properties: { + data: { + properties: { + allow_member_invites: { + type: 'boolean', + isRequired: true, + }, + allow_public_repos: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_branch_name: { + type: 'string', + isRequired: true, + }, + default_repo_visibility: { + type: 'string', + isRequired: true, + }, + issue_tracking_enabled: { + type: 'boolean', + isRequired: true, + }, + pull_requests_enabled: { + type: 'boolean', + isRequired: true, + }, + require_two_factor: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + wiki_enabled: { + type: 'boolean', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceStats.ts b/src/client/schemas/$ApiResponse_WorkspaceStats.ts new file mode 100644 index 0000000..751ae59 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceStats.ts @@ -0,0 +1,63 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceStats = { + properties: { + data: { + properties: { + bandwidth_bytes: { + type: 'number', + isRequired: true, + format: 'int64', + }, + build_minutes_used: { + type: 'number', + isRequired: true, + format: 'int64', + }, + issues_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + last_activity_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + members_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + pull_requests_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repos_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + storage_bytes: { + type: 'number', + isRequired: true, + format: 'int64', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ApiResponse_WorkspaceWebhook.ts b/src/client/schemas/$ApiResponse_WorkspaceWebhook.ts new file mode 100644 index 0000000..4b54063 --- /dev/null +++ b/src/client/schemas/$ApiResponse_WorkspaceWebhook.ts @@ -0,0 +1,66 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ApiResponse_WorkspaceWebhook = { + properties: { + data: { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_delivery_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_delivery_status: { + type: 'string', + isNullable: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + url: { + type: 'string', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$BranchMergeCheck.ts b/src/client/schemas/$BranchMergeCheck.ts new file mode 100644 index 0000000..193a6db --- /dev/null +++ b/src/client/schemas/$BranchMergeCheck.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $BranchMergeCheck = { + properties: { + allowed: { + type: 'boolean', + isRequired: true, + }, + reasons: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$BranchProtectionRule.ts b/src/client/schemas/$BranchProtectionRule.ts new file mode 100644 index 0000000..4ca9e22 --- /dev/null +++ b/src/client/schemas/$BranchProtectionRule.ts @@ -0,0 +1,105 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $BranchProtectionRule = { + properties: { + allow_deletions: { + type: 'boolean', + isRequired: true, + }, + allow_force_pushes: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + dismiss_stale_reviews: { + type: 'boolean', + isRequired: true, + }, + dismissal_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pattern: { + type: 'string', + isRequired: true, + }, + push_allowances: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + require_approvals: { + type: 'number', + isRequired: true, + format: 'int32', + }, + require_code_owner_review: { + type: 'boolean', + isRequired: true, + }, + require_conversation_resolution: { + type: 'boolean', + isRequired: true, + }, + require_linear_history: { + type: 'boolean', + isRequired: true, + }, + require_signed_commits: { + type: 'boolean', + isRequired: true, + }, + require_status_checks: { + type: 'boolean', + isRequired: true, + }, + required_status_checks: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + restrict_pushes: { + type: 'boolean', + isRequired: true, + }, + restrict_review_dismissal: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$CaptchaQuery.ts b/src/client/schemas/$CaptchaQuery.ts new file mode 100644 index 0000000..b962b6f --- /dev/null +++ b/src/client/schemas/$CaptchaQuery.ts @@ -0,0 +1,26 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CaptchaQuery = { + properties: { + dark: { + type: 'boolean', + isRequired: true, + }, + 'h': { + type: 'number', + isRequired: true, + format: 'int32', + }, + rsa: { + type: 'boolean', + isRequired: true, + }, + 'w': { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, +} as const; diff --git a/src/client/schemas/$CaptchaResponse.ts b/src/client/schemas/$CaptchaResponse.ts new file mode 100644 index 0000000..168743d --- /dev/null +++ b/src/client/schemas/$CaptchaResponse.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CaptchaResponse = { + properties: { + base64: { + type: 'string', + isRequired: true, + }, + req: { + type: 'CaptchaQuery', + isRequired: true, + }, + rsa: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'RsaResponse', + }], + }, + }, +} as const; diff --git a/src/client/schemas/$ColorScheme.ts b/src/client/schemas/$ColorScheme.ts new file mode 100644 index 0000000..9cd96c6 --- /dev/null +++ b/src/client/schemas/$ColorScheme.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ColorScheme = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$ContextMe.ts b/src/client/schemas/$ContextMe.ts new file mode 100644 index 0000000..8339c1a --- /dev/null +++ b/src/client/schemas/$ContextMe.ts @@ -0,0 +1,38 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ContextMe = { + properties: { + avatar_url: { + type: 'string', + isNullable: true, + }, + display_name: { + type: 'string', + isNullable: true, + }, + has_unread_notifications: { + type: 'number', + isRequired: true, + format: 'int64', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + language: { + type: 'string', + isRequired: true, + }, + timezone: { + type: 'string', + isRequired: true, + }, + username: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateBranchParams.ts b/src/client/schemas/$CreateBranchParams.ts new file mode 100644 index 0000000..8d6b7f4 --- /dev/null +++ b/src/client/schemas/$CreateBranchParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateBranchParams = { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateCheckRunParams.ts b/src/client/schemas/$CreateCheckRunParams.ts new file mode 100644 index 0000000..5482627 --- /dev/null +++ b/src/client/schemas/$CreateCheckRunParams.ts @@ -0,0 +1,32 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateCheckRunParams = { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + conclusion: { + type: 'string', + isNullable: true, + }, + details_url: { + type: 'string', + isNullable: true, + }, + external_id: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + status: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateCommentParams.ts b/src/client/schemas/$CreateCommentParams.ts new file mode 100644 index 0000000..ca44494 --- /dev/null +++ b/src/client/schemas/$CreateCommentParams.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateCommentParams = { + properties: { + body: { + type: 'string', + isRequired: true, + }, + reply_to_comment_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$CreateCommitCommentParams.ts b/src/client/schemas/$CreateCommitCommentParams.ts new file mode 100644 index 0000000..2723b60 --- /dev/null +++ b/src/client/schemas/$CreateCommitCommentParams.ts @@ -0,0 +1,30 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateCommitCommentParams = { + properties: { + body: { + type: 'string', + isRequired: true, + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isNullable: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$CreateCommitStatusParams.ts b/src/client/schemas/$CreateCommitStatusParams.ts new file mode 100644 index 0000000..34c7906 --- /dev/null +++ b/src/client/schemas/$CreateCommitStatusParams.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateCommitStatusParams = { + properties: { + context: { + type: 'string', + isRequired: true, + }, + description: { + type: 'string', + isNullable: true, + }, + latest_commit_sha: { + type: 'string', + isRequired: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'string', + isRequired: true, + }, + target_url: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateIntegrationParams.ts b/src/client/schemas/$CreateIntegrationParams.ts new file mode 100644 index 0000000..5ea117d --- /dev/null +++ b/src/client/schemas/$CreateIntegrationParams.ts @@ -0,0 +1,32 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateIntegrationParams = { + properties: { + config: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'WorkspaceIntegrationConfig', + }], + }, + enabled: { + type: 'boolean', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + provider: { + type: 'string', + isRequired: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateInvitationParams.ts b/src/client/schemas/$CreateInvitationParams.ts new file mode 100644 index 0000000..f417291 --- /dev/null +++ b/src/client/schemas/$CreateInvitationParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateInvitationParams = { + properties: { + email: { + type: 'string', + isRequired: true, + }, + role: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateInvitationResponse.ts b/src/client/schemas/$CreateInvitationResponse.ts new file mode 100644 index 0000000..2914d67 --- /dev/null +++ b/src/client/schemas/$CreateInvitationResponse.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateInvitationResponse = { + properties: { + invitation: { + type: 'WorkspaceInvitation', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateIssueParams.ts b/src/client/schemas/$CreateIssueParams.ts new file mode 100644 index 0000000..7882d4e --- /dev/null +++ b/src/client/schemas/$CreateIssueParams.ts @@ -0,0 +1,58 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateIssueParams = { + properties: { + assignee_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + body: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + label_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + milestone_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + priority: { + type: 'string', + isNullable: true, + }, + repo_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateIssueReactionParams.ts b/src/client/schemas/$CreateIssueReactionParams.ts new file mode 100644 index 0000000..130a089 --- /dev/null +++ b/src/client/schemas/$CreateIssueReactionParams.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateIssueReactionParams = { + properties: { + content: { + type: 'string', + isRequired: true, + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateLabelParams.ts b/src/client/schemas/$CreateLabelParams.ts new file mode 100644 index 0000000..ccd4d4b --- /dev/null +++ b/src/client/schemas/$CreateLabelParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateLabelParams = { + properties: { + color: { + type: 'string', + isRequired: true, + }, + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateMilestoneParams.ts b/src/client/schemas/$CreateMilestoneParams.ts new file mode 100644 index 0000000..6613b62 --- /dev/null +++ b/src/client/schemas/$CreateMilestoneParams.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateMilestoneParams = { + properties: { + description: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreatePrLabelParams.ts b/src/client/schemas/$CreatePrLabelParams.ts new file mode 100644 index 0000000..54668e0 --- /dev/null +++ b/src/client/schemas/$CreatePrLabelParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreatePrLabelParams = { + properties: { + color: { + type: 'string', + isRequired: true, + }, + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreatePrParams.ts b/src/client/schemas/$CreatePrParams.ts new file mode 100644 index 0000000..426a470 --- /dev/null +++ b/src/client/schemas/$CreatePrParams.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreatePrParams = { + properties: { + base_commit_sha: { + type: 'string', + isNullable: true, + }, + body: { + type: 'string', + isNullable: true, + }, + draft: { + type: 'boolean', + isNullable: true, + }, + head_commit_sha: { + type: 'string', + isRequired: true, + }, + source_branch: { + type: 'string', + isRequired: true, + }, + source_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_branch: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateProtectionRuleParams.ts b/src/client/schemas/$CreateProtectionRuleParams.ts new file mode 100644 index 0000000..9ff8fa7 --- /dev/null +++ b/src/client/schemas/$CreateProtectionRuleParams.ts @@ -0,0 +1,69 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateProtectionRuleParams = { + properties: { + allow_deletions: { + type: 'boolean', + isNullable: true, + }, + allow_force_pushes: { + type: 'boolean', + isNullable: true, + }, + dismiss_stale_reviews: { + type: 'boolean', + isNullable: true, + }, + dismissal_allowances: { + type: 'any[]', + isNullable: true, + }, + pattern: { + type: 'string', + isRequired: true, + }, + push_allowances: { + type: 'any[]', + isNullable: true, + }, + require_approvals: { + type: 'number', + isNullable: true, + format: 'int32', + }, + require_code_owner_review: { + type: 'boolean', + isNullable: true, + }, + require_conversation_resolution: { + type: 'boolean', + isNullable: true, + }, + require_linear_history: { + type: 'boolean', + isNullable: true, + }, + require_signed_commits: { + type: 'boolean', + isNullable: true, + }, + require_status_checks: { + type: 'boolean', + isNullable: true, + }, + required_status_checks: { + type: 'any[]', + isNullable: true, + }, + restrict_pushes: { + type: 'boolean', + isNullable: true, + }, + restrict_review_dismissal: { + type: 'boolean', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateReactionParams.ts b/src/client/schemas/$CreateReactionParams.ts new file mode 100644 index 0000000..23d62dc --- /dev/null +++ b/src/client/schemas/$CreateReactionParams.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateReactionParams = { + properties: { + content: { + type: 'string', + isRequired: true, + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateReleaseParams.ts b/src/client/schemas/$CreateReleaseParams.ts new file mode 100644 index 0000000..4895b48 --- /dev/null +++ b/src/client/schemas/$CreateReleaseParams.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateReleaseParams = { + properties: { + body: { + type: 'string', + isNullable: true, + }, + draft: { + type: 'boolean', + isNullable: true, + }, + prerelease: { + type: 'boolean', + isNullable: true, + }, + tag_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + tag_name: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateRepoInvitationParams.ts b/src/client/schemas/$CreateRepoInvitationParams.ts new file mode 100644 index 0000000..82962ae --- /dev/null +++ b/src/client/schemas/$CreateRepoInvitationParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateRepoInvitationParams = { + properties: { + email: { + type: 'string', + isRequired: true, + }, + role: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateRepoParams.ts b/src/client/schemas/$CreateRepoParams.ts new file mode 100644 index 0000000..bf4c624 --- /dev/null +++ b/src/client/schemas/$CreateRepoParams.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateRepoParams = { + properties: { + default_branch: { + type: 'string', + isNullable: true, + }, + description: { + type: 'string', + isNullable: true, + }, + git_service: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + storage_node_ids: { + type: 'any[]', + isNullable: true, + }, + storage_path: { + type: 'string', + isNullable: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateReviewParams.ts b/src/client/schemas/$CreateReviewParams.ts new file mode 100644 index 0000000..e44d7a0 --- /dev/null +++ b/src/client/schemas/$CreateReviewParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateReviewParams = { + properties: { + body: { + type: 'string', + isNullable: true, + }, + comments: { + type: 'any[]', + isNullable: true, + }, + commit_sha: { + type: 'string', + isNullable: true, + }, + state: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateTagParams.ts b/src/client/schemas/$CreateTagParams.ts new file mode 100644 index 0000000..4fd0197 --- /dev/null +++ b/src/client/schemas/$CreateTagParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateTagParams = { + properties: { + message: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + target_commit_sha: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateTemplateParams.ts b/src/client/schemas/$CreateTemplateParams.ts new file mode 100644 index 0000000..0c10476 --- /dev/null +++ b/src/client/schemas/$CreateTemplateParams.ts @@ -0,0 +1,31 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateTemplateParams = { + properties: { + body_template: { + type: 'string', + isRequired: true, + }, + description: { + type: 'string', + isNullable: true, + }, + labels: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + title_template: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateWebhookParams.ts b/src/client/schemas/$CreateWebhookParams.ts new file mode 100644 index 0000000..a35169e --- /dev/null +++ b/src/client/schemas/$CreateWebhookParams.ts @@ -0,0 +1,27 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateWebhookParams = { + properties: { + active: { + type: 'boolean', + isNullable: true, + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + url: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateWikiPageParams.ts b/src/client/schemas/$CreateWikiPageParams.ts new file mode 100644 index 0000000..1953baa --- /dev/null +++ b/src/client/schemas/$CreateWikiPageParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateWikiPageParams = { + properties: { + content: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$CreateWorkspaceParams.ts b/src/client/schemas/$CreateWorkspaceParams.ts new file mode 100644 index 0000000..25b91a8 --- /dev/null +++ b/src/client/schemas/$CreateWorkspaceParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $CreateWorkspaceParams = { + properties: { + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Density.ts b/src/client/schemas/$Density.ts new file mode 100644 index 0000000..2e0f59b --- /dev/null +++ b/src/client/schemas/$Density.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Density = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$DeviceType.ts b/src/client/schemas/$DeviceType.ts new file mode 100644 index 0000000..757434a --- /dev/null +++ b/src/client/schemas/$DeviceType.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $DeviceType = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$DigestFrequency.ts b/src/client/schemas/$DigestFrequency.ts new file mode 100644 index 0000000..1bf79c9 --- /dev/null +++ b/src/client/schemas/$DigestFrequency.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $DigestFrequency = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$Disable2FAParams.ts b/src/client/schemas/$Disable2FAParams.ts new file mode 100644 index 0000000..2400335 --- /dev/null +++ b/src/client/schemas/$Disable2FAParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Disable2FAParams = { + properties: { + code: { + type: 'string', + isRequired: true, + }, + password: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$DismissReviewParams.ts b/src/client/schemas/$DismissReviewParams.ts new file mode 100644 index 0000000..439ddd2 --- /dev/null +++ b/src/client/schemas/$DismissReviewParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $DismissReviewParams = { + properties: { + reason: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$EmailChangeRequest.ts b/src/client/schemas/$EmailChangeRequest.ts new file mode 100644 index 0000000..82d526a --- /dev/null +++ b/src/client/schemas/$EmailChangeRequest.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $EmailChangeRequest = { + properties: { + new_email: { + type: 'string', + isRequired: true, + }, + password: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$EmailResponse.ts b/src/client/schemas/$EmailResponse.ts new file mode 100644 index 0000000..9ed1520 --- /dev/null +++ b/src/client/schemas/$EmailResponse.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $EmailResponse = { + properties: { + email: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$EmailVerifyRequest.ts b/src/client/schemas/$EmailVerifyRequest.ts new file mode 100644 index 0000000..60e0d3f --- /dev/null +++ b/src/client/schemas/$EmailVerifyRequest.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $EmailVerifyRequest = { + properties: { + token: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Enable2FAResponse.ts b/src/client/schemas/$Enable2FAResponse.ts new file mode 100644 index 0000000..1206dbc --- /dev/null +++ b/src/client/schemas/$Enable2FAResponse.ts @@ -0,0 +1,23 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Enable2FAResponse = { + properties: { + backup_codes: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + qr_code: { + type: 'string', + isRequired: true, + }, + secret: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$EventType.ts b/src/client/schemas/$EventType.ts new file mode 100644 index 0000000..fe14262 --- /dev/null +++ b/src/client/schemas/$EventType.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $EventType = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$FontSize.ts b/src/client/schemas/$FontSize.ts new file mode 100644 index 0000000..ec817db --- /dev/null +++ b/src/client/schemas/$FontSize.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $FontSize = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$ForkRepoParams.ts b/src/client/schemas/$ForkRepoParams.ts new file mode 100644 index 0000000..980bf2f --- /dev/null +++ b/src/client/schemas/$ForkRepoParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ForkRepoParams = { + properties: { + name: { + type: 'string', + isNullable: true, + }, + target_workspace_name: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Get2FAStatusResponse.ts b/src/client/schemas/$Get2FAStatusResponse.ts new file mode 100644 index 0000000..831a288 --- /dev/null +++ b/src/client/schemas/$Get2FAStatusResponse.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Get2FAStatusResponse = { + properties: { + has_backup_codes: { + type: 'boolean', + isRequired: true, + }, + is_enabled: { + type: 'boolean', + isRequired: true, + }, + method: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$GitService.ts b/src/client/schemas/$GitService.ts new file mode 100644 index 0000000..e9d2488 --- /dev/null +++ b/src/client/schemas/$GitService.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $GitService = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$Issue.ts b/src/client/schemas/$Issue.ts new file mode 100644 index 0000000..b8045e5 --- /dev/null +++ b/src/client/schemas/$Issue.ts @@ -0,0 +1,87 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Issue = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + closed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + locked: { + type: 'boolean', + isRequired: true, + }, + milestone_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + number: { + type: 'number', + isRequired: true, + format: 'int64', + }, + priority: { + type: 'Priority', + isRequired: true, + }, + state: { + type: 'State', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueAssignee.ts b/src/client/schemas/$IssueAssignee.ts new file mode 100644 index 0000000..de5a51c --- /dev/null +++ b/src/client/schemas/$IssueAssignee.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueAssignee = { + properties: { + assigned_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + assignee_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueComment.ts b/src/client/schemas/$IssueComment.ts new file mode 100644 index 0000000..726c04f --- /dev/null +++ b/src/client/schemas/$IssueComment.ts @@ -0,0 +1,52 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueComment = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + edited_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reply_to_comment_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueEvent.ts b/src/client/schemas/$IssueEvent.ts new file mode 100644 index 0000000..e7419ca --- /dev/null +++ b/src/client/schemas/$IssueEvent.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueEvent = { + properties: { + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + new_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + old_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + }, +} as const; diff --git a/src/client/schemas/$IssueLabel.ts b/src/client/schemas/$IssueLabel.ts new file mode 100644 index 0000000..3217fd1 --- /dev/null +++ b/src/client/schemas/$IssueLabel.ts @@ -0,0 +1,45 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueLabel = { + properties: { + color: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueLabelRelation.ts b/src/client/schemas/$IssueLabelRelation.ts new file mode 100644 index 0000000..48f3538 --- /dev/null +++ b/src/client/schemas/$IssueLabelRelation.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueLabelRelation = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueListFilters.ts b/src/client/schemas/$IssueListFilters.ts new file mode 100644 index 0000000..a085742 --- /dev/null +++ b/src/client/schemas/$IssueListFilters.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueListFilters = { + properties: { + assignee_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + author_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + milestone_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + priority: { + type: 'string', + isNullable: true, + }, + state: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$IssueMilestone.ts b/src/client/schemas/$IssueMilestone.ts new file mode 100644 index 0000000..1a7a4d3 --- /dev/null +++ b/src/client/schemas/$IssueMilestone.ts @@ -0,0 +1,55 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueMilestone = { + properties: { + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$IssuePrRelation.ts b/src/client/schemas/$IssuePrRelation.ts new file mode 100644 index 0000000..cabc30b --- /dev/null +++ b/src/client/schemas/$IssuePrRelation.ts @@ -0,0 +1,37 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssuePrRelation = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'RelationType', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$IssueReaction.ts b/src/client/schemas/$IssueReaction.ts new file mode 100644 index 0000000..8aabcf9 --- /dev/null +++ b/src/client/schemas/$IssueReaction.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueReaction = { + properties: { + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'TargetType', + isRequired: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueRepoRelation.ts b/src/client/schemas/$IssueRepoRelation.ts new file mode 100644 index 0000000..12e03de --- /dev/null +++ b/src/client/schemas/$IssueRepoRelation.ts @@ -0,0 +1,37 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueRepoRelation = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'RelationType', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueSubscriber.ts b/src/client/schemas/$IssueSubscriber.ts new file mode 100644 index 0000000..9c7cfc6 --- /dev/null +++ b/src/client/schemas/$IssueSubscriber.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueSubscriber = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + issue_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + muted: { + type: 'boolean', + isRequired: true, + }, + reason: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$IssueTemplate.ts b/src/client/schemas/$IssueTemplate.ts new file mode 100644 index 0000000..782b191 --- /dev/null +++ b/src/client/schemas/$IssueTemplate.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $IssueTemplate = { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + body_template: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + labels: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title_template: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$KeyType.ts b/src/client/schemas/$KeyType.ts new file mode 100644 index 0000000..ccac8ed --- /dev/null +++ b/src/client/schemas/$KeyType.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $KeyType = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$LinkPrParams.ts b/src/client/schemas/$LinkPrParams.ts new file mode 100644 index 0000000..0081664 --- /dev/null +++ b/src/client/schemas/$LinkPrParams.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $LinkPrParams = { + properties: { + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + relation_type: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$LinkRepoParams.ts b/src/client/schemas/$LinkRepoParams.ts new file mode 100644 index 0000000..51c5685 --- /dev/null +++ b/src/client/schemas/$LinkRepoParams.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $LinkRepoParams = { + properties: { + relation_type: { + type: 'string', + isNullable: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$LockIssueParams.ts b/src/client/schemas/$LockIssueParams.ts new file mode 100644 index 0000000..b7d2c19 --- /dev/null +++ b/src/client/schemas/$LockIssueParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $LockIssueParams = { + properties: { + locked: { + type: 'boolean', + description: `Whether to lock (true) or unlock (false) the issue`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$LockPrParams.ts b/src/client/schemas/$LockPrParams.ts new file mode 100644 index 0000000..a52eab1 --- /dev/null +++ b/src/client/schemas/$LockPrParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $LockPrParams = { + properties: { + locked: { + type: 'boolean', + description: `Whether to lock (true) or unlock (false) the PR conversation`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$LoginParams.ts b/src/client/schemas/$LoginParams.ts new file mode 100644 index 0000000..1b110e1 --- /dev/null +++ b/src/client/schemas/$LoginParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $LoginParams = { + properties: { + captcha: { + type: 'string', + isRequired: true, + }, + password: { + type: 'string', + isRequired: true, + }, + totp_code: { + type: 'string', + isNullable: true, + }, + username: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$MergePrParams.ts b/src/client/schemas/$MergePrParams.ts new file mode 100644 index 0000000..f1917af --- /dev/null +++ b/src/client/schemas/$MergePrParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $MergePrParams = { + properties: { + delete_source_branch: { + type: 'boolean', + isNullable: true, + }, + squash_message: { + type: 'string', + isNullable: true, + }, + squash_title: { + type: 'string', + isNullable: true, + }, + strategy: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$MergeStrategyKind.ts b/src/client/schemas/$MergeStrategyKind.ts new file mode 100644 index 0000000..341b0e7 --- /dev/null +++ b/src/client/schemas/$MergeStrategyKind.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $MergeStrategyKind = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$MuteIssueParams.ts b/src/client/schemas/$MuteIssueParams.ts new file mode 100644 index 0000000..8f32ab8 --- /dev/null +++ b/src/client/schemas/$MuteIssueParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $MuteIssueParams = { + properties: { + muted: { + type: 'boolean', + description: `Whether to mute (true) or unmute (false) notifications`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$MutePrParams.ts b/src/client/schemas/$MutePrParams.ts new file mode 100644 index 0000000..dd9708c --- /dev/null +++ b/src/client/schemas/$MutePrParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $MutePrParams = { + properties: { + muted: { + type: 'boolean', + description: `Whether to mute (true) or unmute (false) notifications`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Permission.ts b/src/client/schemas/$Permission.ts new file mode 100644 index 0000000..d7e12ba --- /dev/null +++ b/src/client/schemas/$Permission.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Permission = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$PrAssignee.ts b/src/client/schemas/$PrAssignee.ts new file mode 100644 index 0000000..5abc7fd --- /dev/null +++ b/src/client/schemas/$PrAssignee.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrAssignee = { + properties: { + assigned_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + assignee_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$PrCheckRun.ts b/src/client/schemas/$PrCheckRun.ts new file mode 100644 index 0000000..e372614 --- /dev/null +++ b/src/client/schemas/$PrCheckRun.ts @@ -0,0 +1,66 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrCheckRun = { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + completed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + conclusion: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Status', + }], + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + details_url: { + type: 'string', + isNullable: true, + }, + external_id: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + started_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrCommit.ts b/src/client/schemas/$PrCommit.ts new file mode 100644 index 0000000..fac136a --- /dev/null +++ b/src/client/schemas/$PrCommit.ts @@ -0,0 +1,47 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrCommit = { + properties: { + authored_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + committed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + position: { + type: 'number', + isRequired: true, + format: 'int32', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$PrEvent.ts b/src/client/schemas/$PrEvent.ts new file mode 100644 index 0000000..3043dc2 --- /dev/null +++ b/src/client/schemas/$PrEvent.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrEvent = { + properties: { + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + new_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + old_value: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$PrFile.ts b/src/client/schemas/$PrFile.ts new file mode 100644 index 0000000..b825b14 --- /dev/null +++ b/src/client/schemas/$PrFile.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrFile = { + properties: { + additions: { + type: 'number', + isRequired: true, + format: 'int32', + }, + changes: { + type: 'number', + isRequired: true, + format: 'int32', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deletions: { + type: 'number', + isRequired: true, + format: 'int32', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + old_path: { + type: 'string', + isNullable: true, + }, + patch: { + type: 'string', + isNullable: true, + }, + path: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrLabel.ts b/src/client/schemas/$PrLabel.ts new file mode 100644 index 0000000..39d038a --- /dev/null +++ b/src/client/schemas/$PrLabel.ts @@ -0,0 +1,45 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrLabel = { + properties: { + color: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrLabelRelation.ts b/src/client/schemas/$PrLabelRelation.ts new file mode 100644 index 0000000..06799b3 --- /dev/null +++ b/src/client/schemas/$PrLabelRelation.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrLabelRelation = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + label_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$PrListFilters.ts b/src/client/schemas/$PrListFilters.ts new file mode 100644 index 0000000..1b2dcb6 --- /dev/null +++ b/src/client/schemas/$PrListFilters.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrListFilters = { + properties: { + author_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + draft: { + type: 'boolean', + isNullable: true, + }, + state: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$PrMergeStrategy.ts b/src/client/schemas/$PrMergeStrategy.ts new file mode 100644 index 0000000..f276075 --- /dev/null +++ b/src/client/schemas/$PrMergeStrategy.ts @@ -0,0 +1,52 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrMergeStrategy = { + properties: { + auto_merge: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + delete_source_branch: { + type: 'boolean', + isRequired: true, + }, + merge_when_checks_pass: { + type: 'boolean', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + selected_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + squash_message: { + type: 'string', + isNullable: true, + }, + squash_title: { + type: 'string', + isNullable: true, + }, + strategy: { + type: 'MergeStrategyKind', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrReaction.ts b/src/client/schemas/$PrReaction.ts new file mode 100644 index 0000000..46ee1b4 --- /dev/null +++ b/src/client/schemas/$PrReaction.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrReaction = { + properties: { + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'TargetType', + isRequired: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$PrReview.ts b/src/client/schemas/$PrReview.ts new file mode 100644 index 0000000..5e5ec4d --- /dev/null +++ b/src/client/schemas/$PrReview.ts @@ -0,0 +1,64 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrReview = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + commit_sha: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + dismiss_reason: { + type: 'string', + isNullable: true, + }, + dismissed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + dismissed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'string', + isRequired: true, + }, + submitted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrReviewComment.ts b/src/client/schemas/$PrReviewComment.ts new file mode 100644 index 0000000..75fc4bb --- /dev/null +++ b/src/client/schemas/$PrReviewComment.ts @@ -0,0 +1,80 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrReviewComment = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + diff_hunk: { + type: 'string', + isNullable: true, + }, + edited_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + in_reply_to_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + original_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + original_start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + review_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrStatus.ts b/src/client/schemas/$PrStatus.ts new file mode 100644 index 0000000..b77d4c2 --- /dev/null +++ b/src/client/schemas/$PrStatus.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrStatus = { + properties: { + additions_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + approvals_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + changed_files_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + checks_state: { + type: 'State', + isRequired: true, + }, + conflicts: { + type: 'boolean', + isRequired: true, + }, + deletions_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + head_commit_sha: { + type: 'string', + isRequired: true, + }, + mergeable_state: { + type: 'State', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + requested_reviews_count: { + type: 'number', + isRequired: true, + format: 'int32', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$PrSubscription.ts b/src/client/schemas/$PrSubscription.ts new file mode 100644 index 0000000..66e1cc7 --- /dev/null +++ b/src/client/schemas/$PrSubscription.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PrSubscription = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + muted: { + type: 'boolean', + isRequired: true, + }, + pull_request_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reason: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$Priority.ts b/src/client/schemas/$Priority.ts new file mode 100644 index 0000000..59c8004 --- /dev/null +++ b/src/client/schemas/$Priority.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Priority = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$Provider.ts b/src/client/schemas/$Provider.ts new file mode 100644 index 0000000..5d5599a --- /dev/null +++ b/src/client/schemas/$Provider.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Provider = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$PullRequest.ts b/src/client/schemas/$PullRequest.ts new file mode 100644 index 0000000..a8bf8ba --- /dev/null +++ b/src/client/schemas/$PullRequest.ts @@ -0,0 +1,113 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $PullRequest = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + base_commit_sha: { + type: 'string', + isNullable: true, + }, + body: { + type: 'string', + isNullable: true, + }, + closed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + closed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + draft: { + type: 'boolean', + isRequired: true, + }, + head_commit_sha: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + locked: { + type: 'boolean', + isRequired: true, + }, + merge_commit_sha: { + type: 'string', + isNullable: true, + }, + merged_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + merged_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + number: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + source_branch: { + type: 'string', + isRequired: true, + }, + source_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + target_branch: { + type: 'string', + isRequired: true, + }, + target_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$Regenerate2FABackupCodesRequest.ts b/src/client/schemas/$Regenerate2FABackupCodesRequest.ts new file mode 100644 index 0000000..88ed1a7 --- /dev/null +++ b/src/client/schemas/$Regenerate2FABackupCodesRequest.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Regenerate2FABackupCodesRequest = { + properties: { + password: { + type: 'string', + description: `Current account password encrypted with the session RSA public key.`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Regenerate2FABackupCodesResponse.ts b/src/client/schemas/$Regenerate2FABackupCodesResponse.ts new file mode 100644 index 0000000..bf5287a --- /dev/null +++ b/src/client/schemas/$Regenerate2FABackupCodesResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Regenerate2FABackupCodesResponse = { + properties: { + backup_codes: { + type: 'array', + contains: { + type: 'string', + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RegisterEmailCodeParams.ts b/src/client/schemas/$RegisterEmailCodeParams.ts new file mode 100644 index 0000000..482516d --- /dev/null +++ b/src/client/schemas/$RegisterEmailCodeParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RegisterEmailCodeParams = { + properties: { + captcha: { + type: 'string', + isRequired: true, + }, + email: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RegisterEmailCodeResponse.ts b/src/client/schemas/$RegisterEmailCodeResponse.ts new file mode 100644 index 0000000..f9a73a7 --- /dev/null +++ b/src/client/schemas/$RegisterEmailCodeResponse.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RegisterEmailCodeResponse = { + properties: { + expires_in_secs: { + type: 'number', + isRequired: true, + format: 'int64', + }, + }, +} as const; diff --git a/src/client/schemas/$RegisterParams.ts b/src/client/schemas/$RegisterParams.ts new file mode 100644 index 0000000..267e952 --- /dev/null +++ b/src/client/schemas/$RegisterParams.ts @@ -0,0 +1,28 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RegisterParams = { + properties: { + captcha: { + type: 'string', + isRequired: true, + }, + email: { + type: 'string', + isRequired: true, + }, + email_code: { + type: 'string', + isRequired: true, + }, + password: { + type: 'string', + isRequired: true, + }, + username: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RegisterResponse.ts b/src/client/schemas/$RegisterResponse.ts new file mode 100644 index 0000000..34e3cdc --- /dev/null +++ b/src/client/schemas/$RegisterResponse.ts @@ -0,0 +1,29 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RegisterResponse = { + properties: { + avatar_url: { + type: 'string', + description: `Avatar URL; usually absent right after registration.`, + isNullable: true, + }, + display_name: { + type: 'string', + description: `Display name initialized from username.`, + isNullable: true, + }, + id: { + type: 'string', + description: `Newly created user id.`, + isRequired: true, + format: 'uuid', + }, + username: { + type: 'string', + description: `Unique username used for login and profile URL.`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RelationType.ts b/src/client/schemas/$RelationType.ts new file mode 100644 index 0000000..e01284c --- /dev/null +++ b/src/client/schemas/$RelationType.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RelationType = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$Repo.ts b/src/client/schemas/$Repo.ts new file mode 100644 index 0000000..e4f0c67 --- /dev/null +++ b/src/client/schemas/$Repo.ts @@ -0,0 +1,93 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Repo = { + properties: { + archived_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_branch: { + type: 'string', + isRequired: true, + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + forked_from_repo_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + git_service: { + type: 'GitService', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_fork: { + type: 'boolean', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + owner_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + primary_storage_node_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + storage_node_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + storage_path: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoBranch.ts b/src/client/schemas/$RepoBranch.ts new file mode 100644 index 0000000..561a291 --- /dev/null +++ b/src/client/schemas/$RepoBranch.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoBranch = { + properties: { + commit_sha: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + default_branch: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_push_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_push_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + name: { + type: 'string', + isRequired: true, + }, + protected: { + type: 'boolean', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoCommitComment.ts b/src/client/schemas/$RepoCommitComment.ts new file mode 100644 index 0000000..655fa7f --- /dev/null +++ b/src/client/schemas/$RepoCommitComment.ts @@ -0,0 +1,74 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoCommitComment = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isRequired: true, + }, + commit_sha: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isNullable: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + resolved: { + type: 'boolean', + isRequired: true, + }, + resolved_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + resolved_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoCommitStatus.ts b/src/client/schemas/$RepoCommitStatus.ts new file mode 100644 index 0000000..bbbcf3d --- /dev/null +++ b/src/client/schemas/$RepoCommitStatus.ts @@ -0,0 +1,63 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoCommitStatus = { + properties: { + context: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + latest_commit_sha: { + type: 'string', + isRequired: true, + }, + push_commit_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reported_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + reported_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + state: { + type: 'State', + isRequired: true, + }, + target_url: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoDeployKey.ts b/src/client/schemas/$RepoDeployKey.ts new file mode 100644 index 0000000..1f9eac7 --- /dev/null +++ b/src/client/schemas/$RepoDeployKey.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoDeployKey = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint_sha256: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_type: { + type: 'KeyType', + isRequired: true, + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + public_key: { + type: 'string', + isRequired: true, + }, + read_only: { + type: 'boolean', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoFork.ts b/src/client/schemas/$RepoFork.ts new file mode 100644 index 0000000..fdf3aa0 --- /dev/null +++ b/src/client/schemas/$RepoFork.ts @@ -0,0 +1,33 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoFork = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + fork_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + forked_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + parent_repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoInvitation.ts b/src/client/schemas/$RepoInvitation.ts new file mode 100644 index 0000000..ac259e5 --- /dev/null +++ b/src/client/schemas/$RepoInvitation.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoInvitation = { + properties: { + accepted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + accepted_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + email: { + type: 'string', + isRequired: true, + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + token_hash: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RepoMember.ts b/src/client/schemas/$RepoMember.ts new file mode 100644 index 0000000..8f4e74a --- /dev/null +++ b/src/client/schemas/$RepoMember.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoMember = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + joined_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_active_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoRelease.ts b/src/client/schemas/$RepoRelease.ts new file mode 100644 index 0000000..73feacf --- /dev/null +++ b/src/client/schemas/$RepoRelease.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoRelease = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + body: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + draft: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + prerelease: { + type: 'boolean', + isRequired: true, + }, + published_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + tag_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + tag_name: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoStar.ts b/src/client/schemas/$RepoStar.ts new file mode 100644 index 0000000..176e91c --- /dev/null +++ b/src/client/schemas/$RepoStar.ts @@ -0,0 +1,28 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoStar = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoStats.ts b/src/client/schemas/$RepoStats.ts new file mode 100644 index 0000000..b64d53b --- /dev/null +++ b/src/client/schemas/$RepoStats.ts @@ -0,0 +1,73 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoStats = { + properties: { + branches_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + commits_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + forks_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + last_push_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + open_issues_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + open_pull_requests_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + releases_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + size_bytes: { + type: 'number', + isRequired: true, + format: 'int64', + }, + stars_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + tags_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + watchers_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoTag.ts b/src/client/schemas/$RepoTag.ts new file mode 100644 index 0000000..4a4bccb --- /dev/null +++ b/src/client/schemas/$RepoTag.ts @@ -0,0 +1,44 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoTag = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + message: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + signed: { + type: 'boolean', + isRequired: true, + }, + tagger_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_commit_sha: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RepoWatch.ts b/src/client/schemas/$RepoWatch.ts new file mode 100644 index 0000000..0cd975f --- /dev/null +++ b/src/client/schemas/$RepoWatch.ts @@ -0,0 +1,37 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoWatch = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + level: { + type: 'SubscriptionLevel', + isRequired: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$RepoWebhook.ts b/src/client/schemas/$RepoWebhook.ts new file mode 100644 index 0000000..6b1c9dd --- /dev/null +++ b/src/client/schemas/$RepoWebhook.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RepoWebhook = { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_delivery_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_delivery_status: { + type: 'string', + isNullable: true, + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + url: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RequestApprovalParams.ts b/src/client/schemas/$RequestApprovalParams.ts new file mode 100644 index 0000000..0da9155 --- /dev/null +++ b/src/client/schemas/$RequestApprovalParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RequestApprovalParams = { + properties: { + reason: { + type: 'string', + isNullable: true, + }, + request_type: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$RequestType.ts b/src/client/schemas/$RequestType.ts new file mode 100644 index 0000000..5f612ab --- /dev/null +++ b/src/client/schemas/$RequestType.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RequestType = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$ResetPasswordRequest.ts b/src/client/schemas/$ResetPasswordRequest.ts new file mode 100644 index 0000000..441ed8d --- /dev/null +++ b/src/client/schemas/$ResetPasswordRequest.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ResetPasswordRequest = { + properties: { + email: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ResetPasswordVerifyParams.ts b/src/client/schemas/$ResetPasswordVerifyParams.ts new file mode 100644 index 0000000..969c990 --- /dev/null +++ b/src/client/schemas/$ResetPasswordVerifyParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ResetPasswordVerifyParams = { + properties: { + password: { + type: 'string', + isRequired: true, + }, + token: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ReviewApprovalRequest.ts b/src/client/schemas/$ReviewApprovalRequest.ts new file mode 100644 index 0000000..9d80b33 --- /dev/null +++ b/src/client/schemas/$ReviewApprovalRequest.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ReviewApprovalRequest = { + properties: { + approved: { + type: 'boolean', + description: `true to approve, false to reject.`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$ReviewCommentParams.ts b/src/client/schemas/$ReviewCommentParams.ts new file mode 100644 index 0000000..2e38d69 --- /dev/null +++ b/src/client/schemas/$ReviewCommentParams.ts @@ -0,0 +1,30 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $ReviewCommentParams = { + properties: { + body: { + type: 'string', + isRequired: true, + }, + diff_hunk: { + type: 'string', + isNullable: true, + }, + line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + path: { + type: 'string', + isRequired: true, + }, + start_line: { + type: 'number', + isNullable: true, + format: 'int32', + }, + }, +} as const; diff --git a/src/client/schemas/$Role.ts b/src/client/schemas/$Role.ts new file mode 100644 index 0000000..be658eb --- /dev/null +++ b/src/client/schemas/$Role.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Role = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$RsaResponse.ts b/src/client/schemas/$RsaResponse.ts new file mode 100644 index 0000000..1cba879 --- /dev/null +++ b/src/client/schemas/$RsaResponse.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $RsaResponse = { + properties: { + public_key: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Scope.ts b/src/client/schemas/$Scope.ts new file mode 100644 index 0000000..087fa3d --- /dev/null +++ b/src/client/schemas/$Scope.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Scope = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$SetBranchProtectionParams.ts b/src/client/schemas/$SetBranchProtectionParams.ts new file mode 100644 index 0000000..5f9ed5b --- /dev/null +++ b/src/client/schemas/$SetBranchProtectionParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $SetBranchProtectionParams = { + properties: { + protected: { + type: 'boolean', + description: `Whether to enable branch protection`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$State.ts b/src/client/schemas/$State.ts new file mode 100644 index 0000000..850831d --- /dev/null +++ b/src/client/schemas/$State.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $State = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$Status.ts b/src/client/schemas/$Status.ts new file mode 100644 index 0000000..8403ae3 --- /dev/null +++ b/src/client/schemas/$Status.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Status = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$SubmitReviewParams.ts b/src/client/schemas/$SubmitReviewParams.ts new file mode 100644 index 0000000..1566d95 --- /dev/null +++ b/src/client/schemas/$SubmitReviewParams.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $SubmitReviewParams = { + properties: { + body: { + type: 'string', + isNullable: true, + }, + state: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$SubscriptionLevel.ts b/src/client/schemas/$SubscriptionLevel.ts new file mode 100644 index 0000000..4decee0 --- /dev/null +++ b/src/client/schemas/$SubscriptionLevel.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $SubscriptionLevel = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$TargetType.ts b/src/client/schemas/$TargetType.ts new file mode 100644 index 0000000..bd173ab --- /dev/null +++ b/src/client/schemas/$TargetType.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $TargetType = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$Theme.ts b/src/client/schemas/$Theme.ts new file mode 100644 index 0000000..8b7d7cf --- /dev/null +++ b/src/client/schemas/$Theme.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Theme = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$TransferIssueParams.ts b/src/client/schemas/$TransferIssueParams.ts new file mode 100644 index 0000000..5bc5e36 --- /dev/null +++ b/src/client/schemas/$TransferIssueParams.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $TransferIssueParams = { + properties: { + target_workspace_name: { + type: 'string', + description: `Target workspace name to transfer the issue to`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$TransferOwnerParams.ts b/src/client/schemas/$TransferOwnerParams.ts new file mode 100644 index 0000000..968926c --- /dev/null +++ b/src/client/schemas/$TransferOwnerParams.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $TransferOwnerParams = { + properties: { + new_owner_id: { + type: 'string', + description: `User ID of the new owner (must be a repository member)`, + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$TransferOwnerRequest.ts b/src/client/schemas/$TransferOwnerRequest.ts new file mode 100644 index 0000000..22b8e42 --- /dev/null +++ b/src/client/schemas/$TransferOwnerRequest.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $TransferOwnerRequest = { + properties: { + new_owner_id: { + type: 'string', + description: `User ID of the new owner, who must be an active member.`, + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateBillingParams.ts b/src/client/schemas/$UpdateBillingParams.ts new file mode 100644 index 0000000..c84ac80 --- /dev/null +++ b/src/client/schemas/$UpdateBillingParams.ts @@ -0,0 +1,21 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateBillingParams = { + properties: { + billing_email: { + type: 'string', + isNullable: true, + }, + plan: { + type: 'string', + isNullable: true, + }, + seats: { + type: 'number', + isNullable: true, + format: 'int32', + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateBrandingParams.ts b/src/client/schemas/$UpdateBrandingParams.ts new file mode 100644 index 0000000..ce195fb --- /dev/null +++ b/src/client/schemas/$UpdateBrandingParams.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateBrandingParams = { + properties: { + accent_color: { + type: 'string', + isNullable: true, + }, + custom_css: { + type: 'string', + isNullable: true, + }, + enabled: { + type: 'boolean', + isNullable: true, + }, + favicon_url: { + type: 'string', + isNullable: true, + }, + logo_url: { + type: 'string', + isNullable: true, + }, + primary_color: { + type: 'string', + isNullable: true, + }, + support_url: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateCheckRunParams.ts b/src/client/schemas/$UpdateCheckRunParams.ts new file mode 100644 index 0000000..85b78b1 --- /dev/null +++ b/src/client/schemas/$UpdateCheckRunParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateCheckRunParams = { + properties: { + conclusion: { + type: 'string', + isNullable: true, + }, + details_url: { + type: 'string', + isNullable: true, + }, + status: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateCommentParams.ts b/src/client/schemas/$UpdateCommentParams.ts new file mode 100644 index 0000000..0ac1d52 --- /dev/null +++ b/src/client/schemas/$UpdateCommentParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateCommentParams = { + properties: { + body: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateIntegrationParams.ts b/src/client/schemas/$UpdateIntegrationParams.ts new file mode 100644 index 0000000..269bf13 --- /dev/null +++ b/src/client/schemas/$UpdateIntegrationParams.ts @@ -0,0 +1,28 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateIntegrationParams = { + properties: { + config: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'WorkspaceIntegrationConfig', + }], + }, + enabled: { + type: 'boolean', + isNullable: true, + }, + name: { + type: 'string', + isNullable: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateIssueParams.ts b/src/client/schemas/$UpdateIssueParams.ts new file mode 100644 index 0000000..d14bc06 --- /dev/null +++ b/src/client/schemas/$UpdateIssueParams.ts @@ -0,0 +1,34 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateIssueParams = { + properties: { + body: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + milestone_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + priority: { + type: 'string', + isNullable: true, + }, + title: { + type: 'string', + isNullable: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateLabelParams.ts b/src/client/schemas/$UpdateLabelParams.ts new file mode 100644 index 0000000..f8ad4c0 --- /dev/null +++ b/src/client/schemas/$UpdateLabelParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateLabelParams = { + properties: { + color: { + type: 'string', + isNullable: true, + }, + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateMemberRoleParams.ts b/src/client/schemas/$UpdateMemberRoleParams.ts new file mode 100644 index 0000000..4d840c2 --- /dev/null +++ b/src/client/schemas/$UpdateMemberRoleParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateMemberRoleParams = { + properties: { + role: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateMergeStrategyParams.ts b/src/client/schemas/$UpdateMergeStrategyParams.ts new file mode 100644 index 0000000..c4792a8 --- /dev/null +++ b/src/client/schemas/$UpdateMergeStrategyParams.ts @@ -0,0 +1,32 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateMergeStrategyParams = { + properties: { + auto_merge: { + type: 'boolean', + isNullable: true, + }, + delete_source_branch: { + type: 'boolean', + isNullable: true, + }, + merge_when_checks_pass: { + type: 'boolean', + isNullable: true, + }, + squash_message: { + type: 'string', + isNullable: true, + }, + squash_title: { + type: 'string', + isNullable: true, + }, + strategy: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateMilestoneParams.ts b/src/client/schemas/$UpdateMilestoneParams.ts new file mode 100644 index 0000000..b50515e --- /dev/null +++ b/src/client/schemas/$UpdateMilestoneParams.ts @@ -0,0 +1,25 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateMilestoneParams = { + properties: { + description: { + type: 'string', + isNullable: true, + }, + due_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + state: { + type: 'string', + isNullable: true, + }, + title: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdatePrLabelParams.ts b/src/client/schemas/$UpdatePrLabelParams.ts new file mode 100644 index 0000000..4040ac1 --- /dev/null +++ b/src/client/schemas/$UpdatePrLabelParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdatePrLabelParams = { + properties: { + color: { + type: 'string', + isNullable: true, + }, + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdatePrParams.ts b/src/client/schemas/$UpdatePrParams.ts new file mode 100644 index 0000000..1c636fc --- /dev/null +++ b/src/client/schemas/$UpdatePrParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdatePrParams = { + properties: { + body: { + type: 'string', + isNullable: true, + }, + draft: { + type: 'boolean', + isNullable: true, + }, + target_branch: { + type: 'string', + isNullable: true, + }, + title: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateProtectionRuleParams.ts b/src/client/schemas/$UpdateProtectionRuleParams.ts new file mode 100644 index 0000000..258d09f --- /dev/null +++ b/src/client/schemas/$UpdateProtectionRuleParams.ts @@ -0,0 +1,65 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateProtectionRuleParams = { + properties: { + allow_deletions: { + type: 'boolean', + isNullable: true, + }, + allow_force_pushes: { + type: 'boolean', + isNullable: true, + }, + dismiss_stale_reviews: { + type: 'boolean', + isNullable: true, + }, + dismissal_allowances: { + type: 'any[]', + isNullable: true, + }, + push_allowances: { + type: 'any[]', + isNullable: true, + }, + require_approvals: { + type: 'number', + isNullable: true, + format: 'int32', + }, + require_code_owner_review: { + type: 'boolean', + isNullable: true, + }, + require_conversation_resolution: { + type: 'boolean', + isNullable: true, + }, + require_linear_history: { + type: 'boolean', + isNullable: true, + }, + require_signed_commits: { + type: 'boolean', + isNullable: true, + }, + require_status_checks: { + type: 'boolean', + isNullable: true, + }, + required_status_checks: { + type: 'any[]', + isNullable: true, + }, + restrict_pushes: { + type: 'boolean', + isNullable: true, + }, + restrict_review_dismissal: { + type: 'boolean', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateReleaseParams.ts b/src/client/schemas/$UpdateReleaseParams.ts new file mode 100644 index 0000000..bcf5b5e --- /dev/null +++ b/src/client/schemas/$UpdateReleaseParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateReleaseParams = { + properties: { + body: { + type: 'string', + isNullable: true, + }, + draft: { + type: 'boolean', + isNullable: true, + }, + prerelease: { + type: 'boolean', + isNullable: true, + }, + title: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateRepoMemberRoleParams.ts b/src/client/schemas/$UpdateRepoMemberRoleParams.ts new file mode 100644 index 0000000..a56a105 --- /dev/null +++ b/src/client/schemas/$UpdateRepoMemberRoleParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateRepoMemberRoleParams = { + properties: { + role: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateRepoParams.ts b/src/client/schemas/$UpdateRepoParams.ts new file mode 100644 index 0000000..12f327e --- /dev/null +++ b/src/client/schemas/$UpdateRepoParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateRepoParams = { + properties: { + default_branch: { + type: 'string', + isNullable: true, + }, + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isNullable: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateTemplateParams.ts b/src/client/schemas/$UpdateTemplateParams.ts new file mode 100644 index 0000000..af9d421 --- /dev/null +++ b/src/client/schemas/$UpdateTemplateParams.ts @@ -0,0 +1,32 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateTemplateParams = { + properties: { + active: { + type: 'boolean', + isNullable: true, + }, + body_template: { + type: 'string', + isNullable: true, + }, + description: { + type: 'string', + isNullable: true, + }, + labels: { + type: 'any[]', + isNullable: true, + }, + name: { + type: 'string', + isNullable: true, + }, + title_template: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateUserAccountParams.ts b/src/client/schemas/$UpdateUserAccountParams.ts new file mode 100644 index 0000000..c3b3e31 --- /dev/null +++ b/src/client/schemas/$UpdateUserAccountParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateUserAccountParams = { + properties: { + bio: { + type: 'string', + isNullable: true, + }, + display_name: { + type: 'string', + isNullable: true, + }, + username: { + type: 'string', + isNullable: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateUserAppearanceParams.ts b/src/client/schemas/$UpdateUserAppearanceParams.ts new file mode 100644 index 0000000..da17829 --- /dev/null +++ b/src/client/schemas/$UpdateUserAppearanceParams.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateUserAppearanceParams = { + properties: { + color_scheme: { + type: 'string', + isNullable: true, + }, + density: { + type: 'string', + isNullable: true, + }, + editor_theme: { + type: 'string', + isNullable: true, + }, + font_size: { + type: 'string', + isNullable: true, + }, + markdown_preview: { + type: 'boolean', + isNullable: true, + }, + reduced_motion: { + type: 'boolean', + isNullable: true, + }, + theme: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateUserNotifySettingParams.ts b/src/client/schemas/$UpdateUserNotifySettingParams.ts new file mode 100644 index 0000000..b840707 --- /dev/null +++ b/src/client/schemas/$UpdateUserNotifySettingParams.ts @@ -0,0 +1,36 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateUserNotifySettingParams = { + properties: { + digest_frequency: { + type: 'string', + isNullable: true, + }, + email_notifications: { + type: 'boolean', + isNullable: true, + }, + marketing_emails: { + type: 'boolean', + isNullable: true, + }, + mention_notifications: { + type: 'boolean', + isNullable: true, + }, + review_notifications: { + type: 'boolean', + isNullable: true, + }, + security_notifications: { + type: 'boolean', + isNullable: true, + }, + web_notifications: { + type: 'boolean', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateUserProfileParams.ts b/src/client/schemas/$UpdateUserProfileParams.ts new file mode 100644 index 0000000..a4e0dca --- /dev/null +++ b/src/client/schemas/$UpdateUserProfileParams.ts @@ -0,0 +1,40 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateUserProfileParams = { + properties: { + company: { + type: 'string', + isNullable: true, + }, + full_name: { + type: 'string', + isNullable: true, + }, + language: { + type: 'string', + isNullable: true, + }, + location: { + type: 'string', + isNullable: true, + }, + profile_readme: { + type: 'string', + isNullable: true, + }, + timezone: { + type: 'string', + isNullable: true, + }, + twitter_username: { + type: 'string', + isNullable: true, + }, + website_url: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateWebhookParams.ts b/src/client/schemas/$UpdateWebhookParams.ts new file mode 100644 index 0000000..9a594d1 --- /dev/null +++ b/src/client/schemas/$UpdateWebhookParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateWebhookParams = { + properties: { + active: { + type: 'boolean', + isNullable: true, + }, + events: { + type: 'any[]', + isNullable: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + url: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateWikiPageParams.ts b/src/client/schemas/$UpdateWikiPageParams.ts new file mode 100644 index 0000000..97fe627 --- /dev/null +++ b/src/client/schemas/$UpdateWikiPageParams.ts @@ -0,0 +1,20 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateWikiPageParams = { + properties: { + commit_message: { + type: 'string', + isNullable: true, + }, + content: { + type: 'string', + isNullable: true, + }, + title: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateWorkspaceParams.ts b/src/client/schemas/$UpdateWorkspaceParams.ts new file mode 100644 index 0000000..e4196a6 --- /dev/null +++ b/src/client/schemas/$UpdateWorkspaceParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateWorkspaceParams = { + properties: { + default_role: { + type: 'string', + isNullable: true, + }, + description: { + type: 'string', + isNullable: true, + }, + name: { + type: 'string', + isNullable: true, + }, + visibility: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UpdateWorkspaceSettingsParams.ts b/src/client/schemas/$UpdateWorkspaceSettingsParams.ts new file mode 100644 index 0000000..998b66a --- /dev/null +++ b/src/client/schemas/$UpdateWorkspaceSettingsParams.ts @@ -0,0 +1,40 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UpdateWorkspaceSettingsParams = { + properties: { + allow_member_invites: { + type: 'boolean', + isNullable: true, + }, + allow_public_repos: { + type: 'boolean', + isNullable: true, + }, + default_branch_name: { + type: 'string', + isNullable: true, + }, + default_repo_visibility: { + type: 'string', + isNullable: true, + }, + issue_tracking_enabled: { + type: 'boolean', + isNullable: true, + }, + pull_requests_enabled: { + type: 'boolean', + isNullable: true, + }, + require_two_factor: { + type: 'boolean', + isNullable: true, + }, + wiki_enabled: { + type: 'boolean', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UploadUserAvatarParams.ts b/src/client/schemas/$UploadUserAvatarParams.ts new file mode 100644 index 0000000..44a3b44 --- /dev/null +++ b/src/client/schemas/$UploadUserAvatarParams.ts @@ -0,0 +1,24 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UploadUserAvatarParams = { + properties: { + content_type: { + type: 'string', + isNullable: true, + }, + data: { + type: 'array', + contains: { + type: 'number', + format: 'int32', + }, + isRequired: true, + }, + file_name: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$User.ts b/src/client/schemas/$User.ts new file mode 100644 index 0000000..8cdfc2f --- /dev/null +++ b/src/client/schemas/$User.ts @@ -0,0 +1,69 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $User = { + properties: { + avatar_url: { + type: 'string', + isNullable: true, + }, + bio: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + display_name: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_active: { + type: 'boolean', + isRequired: true, + }, + is_bot: { + type: 'boolean', + isRequired: true, + }, + last_login_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + username: { + type: 'string', + isRequired: true, + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UserAppearance.ts b/src/client/schemas/$UserAppearance.ts new file mode 100644 index 0000000..b28745d --- /dev/null +++ b/src/client/schemas/$UserAppearance.ts @@ -0,0 +1,51 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserAppearance = { + properties: { + color_scheme: { + type: 'ColorScheme', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + density: { + type: 'Density', + isRequired: true, + }, + editor_theme: { + type: 'string', + isNullable: true, + }, + font_size: { + type: 'FontSize', + isRequired: true, + }, + markdown_preview: { + type: 'boolean', + isRequired: true, + }, + reduced_motion: { + type: 'boolean', + isRequired: true, + }, + theme: { + type: 'Theme', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$UserAvatarResponse.ts b/src/client/schemas/$UserAvatarResponse.ts new file mode 100644 index 0000000..3f13a84 --- /dev/null +++ b/src/client/schemas/$UserAvatarResponse.ts @@ -0,0 +1,16 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserAvatarResponse = { + properties: { + avatar_url: { + type: 'string', + isRequired: true, + }, + storage_key: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UserDevice.ts b/src/client/schemas/$UserDevice.ts new file mode 100644 index 0000000..befdb92 --- /dev/null +++ b/src/client/schemas/$UserDevice.ts @@ -0,0 +1,57 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserDevice = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + device_name: { + type: 'string', + isRequired: true, + }, + device_type: { + type: 'DeviceType', + isRequired: true, + }, + fingerprint: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + last_seen_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + trusted: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_agent: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$UserGpgKey.ts b/src/client/schemas/$UserGpgKey.ts new file mode 100644 index 0000000..95a0721 --- /dev/null +++ b/src/client/schemas/$UserGpgKey.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserGpgKey = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_id: { + type: 'string', + isRequired: true, + }, + primary_email: { + type: 'string', + isNullable: true, + }, + public_key: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + verified_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$UserNotifySetting.ts b/src/client/schemas/$UserNotifySetting.ts new file mode 100644 index 0000000..cbddf98 --- /dev/null +++ b/src/client/schemas/$UserNotifySetting.ts @@ -0,0 +1,51 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserNotifySetting = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + digest_frequency: { + type: 'DigestFrequency', + isRequired: true, + }, + email_notifications: { + type: 'boolean', + isRequired: true, + }, + marketing_emails: { + type: 'boolean', + isRequired: true, + }, + mention_notifications: { + type: 'boolean', + isRequired: true, + }, + review_notifications: { + type: 'boolean', + isRequired: true, + }, + security_notifications: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + web_notifications: { + type: 'boolean', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UserOAuthInfo.ts b/src/client/schemas/$UserOAuthInfo.ts new file mode 100644 index 0000000..7373254 --- /dev/null +++ b/src/client/schemas/$UserOAuthInfo.ts @@ -0,0 +1,44 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserOAuthInfo = { + properties: { + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + linked_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + provider: { + type: 'Provider', + isRequired: true, + }, + provider_email: { + type: 'string', + isNullable: true, + }, + provider_user_id: { + type: 'string', + isRequired: true, + }, + provider_username: { + type: 'string', + isNullable: true, + }, + token_expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$UserPersonalAccessTokenInfo.ts b/src/client/schemas/$UserPersonalAccessTokenInfo.ts new file mode 100644 index 0000000..16a8338 --- /dev/null +++ b/src/client/schemas/$UserPersonalAccessTokenInfo.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserPersonalAccessTokenInfo = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + name: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + scopes: { + type: 'array', + contains: { + type: 'Scope', + }, + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + }, +} as const; diff --git a/src/client/schemas/$UserProfile.ts b/src/client/schemas/$UserProfile.ts new file mode 100644 index 0000000..7abe0be --- /dev/null +++ b/src/client/schemas/$UserProfile.ts @@ -0,0 +1,55 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserProfile = { + properties: { + company: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + full_name: { + type: 'string', + isNullable: true, + }, + language: { + type: 'string', + isNullable: true, + }, + location: { + type: 'string', + isNullable: true, + }, + profile_readme: { + type: 'string', + isNullable: true, + }, + timezone: { + type: 'string', + isNullable: true, + }, + twitter_username: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + website_url: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UserSecurityLog.ts b/src/client/schemas/$UserSecurityLog.ts new file mode 100644 index 0000000..e09ea82 --- /dev/null +++ b/src/client/schemas/$UserSecurityLog.ts @@ -0,0 +1,47 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserSecurityLog = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + event_type: { + type: 'EventType', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + user_agent: { + type: 'string', + isNullable: true, + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$UserSessionInfo.ts b/src/client/schemas/$UserSessionInfo.ts new file mode 100644 index 0000000..c7c86a0 --- /dev/null +++ b/src/client/schemas/$UserSessionInfo.ts @@ -0,0 +1,41 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserSessionInfo = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + last_active_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + user_agent: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$UserSshKey.ts b/src/client/schemas/$UserSshKey.ts new file mode 100644 index 0000000..1555954 --- /dev/null +++ b/src/client/schemas/$UserSshKey.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $UserSshKey = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + fingerprint_sha256: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + key_type: { + type: 'KeyType', + isRequired: true, + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + public_key: { + type: 'string', + isRequired: true, + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$Value.ts b/src/client/schemas/$Value.ts new file mode 100644 index 0000000..6077e65 --- /dev/null +++ b/src/client/schemas/$Value.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Value = { + properties: { + }, +} as const; diff --git a/src/client/schemas/$Verify2FAParams.ts b/src/client/schemas/$Verify2FAParams.ts new file mode 100644 index 0000000..b74d169 --- /dev/null +++ b/src/client/schemas/$Verify2FAParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Verify2FAParams = { + properties: { + code: { + type: 'string', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$Visibility.ts b/src/client/schemas/$Visibility.ts new file mode 100644 index 0000000..7ef48a3 --- /dev/null +++ b/src/client/schemas/$Visibility.ts @@ -0,0 +1,7 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Visibility = { + type: 'Enum', +} as const; diff --git a/src/client/schemas/$WatchParams.ts b/src/client/schemas/$WatchParams.ts new file mode 100644 index 0000000..0a15944 --- /dev/null +++ b/src/client/schemas/$WatchParams.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WatchParams = { + properties: { + level: { + type: 'string', + isNullable: true, + }, + }, +} as const; diff --git a/src/client/schemas/$WikiCompareResult.ts b/src/client/schemas/$WikiCompareResult.ts new file mode 100644 index 0000000..18a1a79 --- /dev/null +++ b/src/client/schemas/$WikiCompareResult.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WikiCompareResult = { + description: `Result of comparing two wiki page revisions`, + properties: { + new: { + type: 'WikiPageRevision', + description: `The newer revision being compared`, + isRequired: true, + }, + old: { + type: 'WikiPageRevision', + description: `The older revision being compared`, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$WikiPage.ts b/src/client/schemas/$WikiPage.ts new file mode 100644 index 0000000..3c3440a --- /dev/null +++ b/src/client/schemas/$WikiPage.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WikiPage = { + properties: { + author_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_editor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + repo_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + slug: { + type: 'string', + isRequired: true, + }, + title: { + type: 'string', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + version: { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, +} as const; diff --git a/src/client/schemas/$WikiPageRevision.ts b/src/client/schemas/$WikiPageRevision.ts new file mode 100644 index 0000000..6def3c5 --- /dev/null +++ b/src/client/schemas/$WikiPageRevision.ts @@ -0,0 +1,45 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WikiPageRevision = { + properties: { + commit_message: { + type: 'string', + isNullable: true, + }, + content: { + type: 'string', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + editor_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + page_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + title: { + type: 'string', + isRequired: true, + }, + version: { + type: 'number', + isRequired: true, + format: 'int32', + }, + }, +} as const; diff --git a/src/client/schemas/$Workspace.ts b/src/client/schemas/$Workspace.ts new file mode 100644 index 0000000..82677e2 --- /dev/null +++ b/src/client/schemas/$Workspace.ts @@ -0,0 +1,70 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $Workspace = { + properties: { + archived_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + avatar_url: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_role: { + type: 'string', + isRequired: true, + }, + deleted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + description: { + type: 'string', + isNullable: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_personal: { + type: 'boolean', + isRequired: true, + }, + name: { + type: 'string', + isRequired: true, + }, + owner_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + plan: { + type: 'string', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + visibility: { + type: 'Visibility', + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceAuditLog.ts b/src/client/schemas/$WorkspaceAuditLog.ts new file mode 100644 index 0000000..bd5a83f --- /dev/null +++ b/src/client/schemas/$WorkspaceAuditLog.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceAuditLog = { + properties: { + action: { + type: 'string', + isRequired: true, + }, + actor_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + ip_address: { + type: 'string', + isNullable: true, + }, + metadata: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'Value', + }], + }, + target_id: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + target_type: { + type: 'one-of', + contains: [{ + type: 'null', + }, { + type: 'TargetType', + }], + }, + user_agent: { + type: 'string', + isNullable: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceBilling.ts b/src/client/schemas/$WorkspaceBilling.ts new file mode 100644 index 0000000..04d9d6a --- /dev/null +++ b/src/client/schemas/$WorkspaceBilling.ts @@ -0,0 +1,68 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceBilling = { + properties: { + billing_email: { + type: 'string', + isNullable: true, + }, + canceled_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + current_period_end: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + current_period_start: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + customer_id: { + type: 'string', + isNullable: true, + }, + plan: { + type: 'string', + isRequired: true, + }, + seats: { + type: 'number', + isRequired: true, + format: 'int32', + }, + status: { + type: 'Status', + isRequired: true, + }, + subscription_id: { + type: 'string', + isNullable: true, + }, + trial_ends_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceCustomBranding.ts b/src/client/schemas/$WorkspaceCustomBranding.ts new file mode 100644 index 0000000..87c4c57 --- /dev/null +++ b/src/client/schemas/$WorkspaceCustomBranding.ts @@ -0,0 +1,51 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceCustomBranding = { + properties: { + accent_color: { + type: 'string', + isNullable: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + custom_css: { + type: 'string', + isNullable: true, + }, + enabled: { + type: 'boolean', + isRequired: true, + }, + favicon_url: { + type: 'string', + isNullable: true, + }, + logo_url: { + type: 'string', + isNullable: true, + }, + primary_color: { + type: 'string', + isNullable: true, + }, + support_url: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceDomain.ts b/src/client/schemas/$WorkspaceDomain.ts new file mode 100644 index 0000000..e4d5005 --- /dev/null +++ b/src/client/schemas/$WorkspaceDomain.ts @@ -0,0 +1,49 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceDomain = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + domain: { + type: 'string', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + is_primary: { + type: 'boolean', + isRequired: true, + }, + is_verified: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + verification_token_hash: { + type: 'string', + isNullable: true, + }, + verified_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceIntegration.ts b/src/client/schemas/$WorkspaceIntegration.ts new file mode 100644 index 0000000..791929d --- /dev/null +++ b/src/client/schemas/$WorkspaceIntegration.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceIntegration = { + properties: { + config: { + properties: { + }, + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + enabled: { + type: 'boolean', + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + installed_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_used_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + name: { + type: 'string', + isRequired: true, + }, + provider: { + type: 'Provider', + isRequired: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceIntegrationConfig.ts b/src/client/schemas/$WorkspaceIntegrationConfig.ts new file mode 100644 index 0000000..506dcf7 --- /dev/null +++ b/src/client/schemas/$WorkspaceIntegrationConfig.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceIntegrationConfig = { + properties: { + callback_url: { + type: 'string', + isNullable: true, + }, + channel_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + extra: { + type: 'dictionary', + contains: { + type: 'Value', + }, + isRequired: true, + }, + permissions: { + type: 'array', + contains: { + type: 'Permission', + }, + isRequired: true, + }, + repo_ids: { + type: 'array', + contains: { + type: 'string', + format: 'uuid', + }, + isRequired: true, + }, + scopes: { + type: 'array', + contains: { + type: 'Scope', + }, + isRequired: true, + }, + settings: { + type: 'dictionary', + contains: { + type: 'Value', + }, + isRequired: true, + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceInvitation.ts b/src/client/schemas/$WorkspaceInvitation.ts new file mode 100644 index 0000000..3883f16 --- /dev/null +++ b/src/client/schemas/$WorkspaceInvitation.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceInvitation = { + properties: { + accepted_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + accepted_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + email: { + type: 'string', + isRequired: true, + }, + expires_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + revoked_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + token_hash: { + type: 'string', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceMember.ts b/src/client/schemas/$WorkspaceMember.ts new file mode 100644 index 0000000..61739cb --- /dev/null +++ b/src/client/schemas/$WorkspaceMember.ts @@ -0,0 +1,56 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceMember = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + invited_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + joined_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_active_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + role: { + type: 'Role', + isRequired: true, + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + user_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspacePendingApproval.ts b/src/client/schemas/$WorkspacePendingApproval.ts new file mode 100644 index 0000000..9925d2e --- /dev/null +++ b/src/client/schemas/$WorkspacePendingApproval.ts @@ -0,0 +1,60 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspacePendingApproval = { + properties: { + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + expires_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reason: { + type: 'string', + isNullable: true, + }, + request_type: { + type: 'RequestType', + isRequired: true, + }, + requester_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + reviewed_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + reviewed_by: { + type: 'string', + isNullable: true, + format: 'uuid', + }, + status: { + type: 'Status', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceSettings.ts b/src/client/schemas/$WorkspaceSettings.ts new file mode 100644 index 0000000..4a430bf --- /dev/null +++ b/src/client/schemas/$WorkspaceSettings.ts @@ -0,0 +1,55 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceSettings = { + properties: { + allow_member_invites: { + type: 'boolean', + isRequired: true, + }, + allow_public_repos: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + default_branch_name: { + type: 'string', + isRequired: true, + }, + default_repo_visibility: { + type: 'string', + isRequired: true, + }, + issue_tracking_enabled: { + type: 'boolean', + isRequired: true, + }, + pull_requests_enabled: { + type: 'boolean', + isRequired: true, + }, + require_two_factor: { + type: 'boolean', + isRequired: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + wiki_enabled: { + type: 'boolean', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceStats.ts b/src/client/schemas/$WorkspaceStats.ts new file mode 100644 index 0000000..5b49d1a --- /dev/null +++ b/src/client/schemas/$WorkspaceStats.ts @@ -0,0 +1,58 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceStats = { + properties: { + bandwidth_bytes: { + type: 'number', + isRequired: true, + format: 'int64', + }, + build_minutes_used: { + type: 'number', + isRequired: true, + format: 'int64', + }, + issues_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + last_activity_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + members_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + pull_requests_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + repos_count: { + type: 'number', + isRequired: true, + format: 'int64', + }, + storage_bytes: { + type: 'number', + isRequired: true, + format: 'int64', + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/schemas/$WorkspaceWebhook.ts b/src/client/schemas/$WorkspaceWebhook.ts new file mode 100644 index 0000000..212928e --- /dev/null +++ b/src/client/schemas/$WorkspaceWebhook.ts @@ -0,0 +1,61 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $WorkspaceWebhook = { + properties: { + active: { + type: 'boolean', + isRequired: true, + }, + created_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + created_by: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + events: { + type: 'array', + contains: { + type: 'EventType', + }, + isRequired: true, + }, + id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + last_delivery_at: { + type: 'string', + isNullable: true, + format: 'date-time', + }, + last_delivery_status: { + type: 'string', + isNullable: true, + }, + secret_ciphertext: { + type: 'string', + isNullable: true, + }, + updated_at: { + type: 'string', + isRequired: true, + format: 'date-time', + }, + url: { + type: 'string', + isRequired: true, + }, + workspace_id: { + type: 'string', + isRequired: true, + format: 'uuid', + }, + }, +} as const; diff --git a/src/client/services/AuthService.ts b/src/client/services/AuthService.ts new file mode 100644 index 0000000..01ed28f --- /dev/null +++ b/src/client/services/AuthService.ts @@ -0,0 +1,428 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiEmptyResponse } from '../models/ApiEmptyResponse'; +import type { ApiResponse_CaptchaResponse } from '../models/ApiResponse_CaptchaResponse'; +import type { ApiResponse_ContextMe } from '../models/ApiResponse_ContextMe'; +import type { ApiResponse_EmailResponse } from '../models/ApiResponse_EmailResponse'; +import type { ApiResponse_Enable2FAResponse } from '../models/ApiResponse_Enable2FAResponse'; +import type { ApiResponse_Get2FAStatusResponse } from '../models/ApiResponse_Get2FAStatusResponse'; +import type { ApiResponse_Regenerate2FABackupCodesResponse } from '../models/ApiResponse_Regenerate2FABackupCodesResponse'; +import type { ApiResponse_RegisterEmailCodeResponse } from '../models/ApiResponse_RegisterEmailCodeResponse'; +import type { ApiResponse_RegisterResponse } from '../models/ApiResponse_RegisterResponse'; +import type { ApiResponse_RsaResponse } from '../models/ApiResponse_RsaResponse'; +import type { Disable2FAParams } from '../models/Disable2FAParams'; +import type { EmailChangeRequest } from '../models/EmailChangeRequest'; +import type { EmailVerifyRequest } from '../models/EmailVerifyRequest'; +import type { LoginParams } from '../models/LoginParams'; +import type { Regenerate2FABackupCodesRequest } from '../models/Regenerate2FABackupCodesRequest'; +import type { RegisterEmailCodeParams } from '../models/RegisterEmailCodeParams'; +import type { RegisterParams } from '../models/RegisterParams'; +import type { ResetPasswordRequest } from '../models/ResetPasswordRequest'; +import type { ResetPasswordVerifyParams } from '../models/ResetPasswordVerifyParams'; +import type { Verify2FAParams } from '../models/Verify2FAParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class AuthService { + /** + * Regenerate 2FA backup codes + * After verifying the current password, generate a new set of backup codes for a user with 2FA enabled and replace the old backup codes. password must be encrypted with the current session RSA public key. Backup codes are returned in plaintext only once in this response; clients must prompt users to store them securely. + * @returns ApiResponse_Regenerate2FABackupCodesResponse Backup codes have been regenerated; old backup codes are immediately invalidated. + * @throws ApiError + */ + public static authRegenerateTwoFactorBackupCodes({ + requestBody, + }: { + /** + * The current account password encrypted with RSA. + */ + requestBody: Regenerate2FABackupCodesRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/2fa/backup-codes/regenerate', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `2FA is not enabled, the password is incorrect, or RSA decryption failed.`, + 401: `The current session is not authenticated.`, + 500: `Database write or backup code hashing failed.`, + }, + }); + } + /** + * Disable two-factor authentication + * Disable TOTP two-factor authentication for the current signed-in user. This requires verifying both the current password and a valid TOTP code or backup code. password must be encrypted with the current session RSA public key; a successfully verified backup code is consumed. + * @returns ApiEmptyResponse 2FA has been disabled. + * @throws ApiError + */ + public static authDisableTwoFactor({ + requestBody, + }: { + /** + * TOTP/backup code and the current password encrypted with RSA. + */ + requestBody: Disable2FAParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/2fa/disable', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `2FA is not enabled, the verification code is incorrect, the password is incorrect, or RSA decryption failed.`, + 401: `The current session is not authenticated.`, + 500: `Database write failed.`, + }, + }); + } + /** + * Initialize two-factor authentication setup + * Generate a new TOTP secret, otpauth QR-code URI, and 10 one-time backup codes for the current signed-in user, and save them in a not-yet-enabled state. Clients must guide the user to scan the QR code and call /auth/2fa/verify with a dynamic code before 2FA is actually enabled. Backup codes are returned in plaintext only once in this response; frontends must remind users to store them securely. + * @returns ApiResponse_Enable2FAResponse 2FA setup initialized successfully. Returns the secret, QR-code URI, and backup codes. + * @throws ApiError + */ + public static authPrepareTwoFactorEnable(): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/2fa/enable', + errors: { + 400: `The current user has already enabled 2FA.`, + 401: `The current session is not authenticated.`, + 500: `Database write or backup code hashing failed.`, + }, + }); + } + /** + * Get two-factor authentication status + * Read the current signed-in user's TOTP two-factor authentication status, including whether it is enabled, the authentication method, and whether backup codes are still available. + * @returns ApiResponse_Get2FAStatusResponse Read successfully. + * @throws ApiError + */ + public static authGetTwoFactorStatus(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/auth/2fa/status', + errors: { + 401: `The current session is not authenticated.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Verify and enable two-factor authentication + * After initializing with /auth/2fa/enable, submit the 6-digit TOTP code generated by the authenticator app. On success, the current user's 2FA status is set to enabled. A small clock drift of one 30-second window before or after is allowed. + * @returns ApiEmptyResponse 2FA has been enabled. + * @throws ApiError + */ + public static authVerifyAndEnableTwoFactor({ + requestBody, + }: { + /** + * The 6-digit TOTP code generated by the authenticator app. + */ + requestBody: Verify2FAParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/2fa/verify', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `2FA has not been initialized, is already enabled, or the verification code is incorrect.`, + 401: `The current session is not authenticated.`, + 500: `Database write failed.`, + }, + }); + } + /** + * Get captcha image + * Generate a one-time captcha image and store the plaintext captcha in the current session. Captchas are used for sensitive entry points such as login and sending registration email codes. Set rsa=true to return the current session RSA public key at the same time and reduce frontend initialization requests. The captcha is consumed after either successful or failed validation, so clients must fetch a new one after failure. + * @returns ApiResponse_CaptchaResponse Captcha generated successfully. The base64 field is image data that can be used directly as img.src. + * @throws ApiError + */ + public static authGetCaptcha({ + w, + h, + dark, + rsa, + }: { + /** + * Captcha image width; allowed range is 80..=400. + */ + w: number, + /** + * Captcha image height; allowed range is 30..=200. + */ + h: number, + /** + * Whether to generate a dark-mode captcha. + */ + dark: boolean, + /** + * Whether to include the RSA public key in the response. + */ + rsa: boolean, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/auth/captcha', + query: { + 'w': w, + 'h': h, + 'dark': dark, + 'rsa': rsa, + }, + errors: { + 400: `Invalid captcha size.`, + 500: `Session write failed or RSA initialization failed.`, + }, + }); + } + /** + * Get current user verified email + * Return the verified primary email for the current signed-in user. If no verified email is bound to the account, the email field is null. + * @returns ApiResponse_EmailResponse Read successfully. + * @throws ApiError + */ + public static authGetPrimaryEmail(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/auth/email', + errors: { + 401: `The current session is not authenticated.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Request login email change + * After verifying the current user password, send a confirmation link to the new email address. password must be encrypted with the current session RSA public key. The token in the confirmation link is valid for 1 hour by default; the actual email switch is completed by calling /auth/email/verify. + * @returns ApiEmptyResponse The confirmation email has been queued for delivery. + * @throws ApiError + */ + public static authRequestEmailChange({ + requestBody, + }: { + /** + * The new email address and encrypted current account password. + */ + requestBody: EmailChangeRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/email/change', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `The new email is empty, the password is incorrect, or RSA decryption failed.`, + 401: `The current session is not authenticated.`, + 409: `The new email is already in use.`, + 500: `Cache, email service, or database read failed.`, + }, + }); + } + /** + * Confirm email change + * Complete an email change using the token from the confirmation email. The endpoint checks again whether the target email is already taken, then marks old emails as unverified and inserts the new verified primary email in a transaction. + * @returns ApiEmptyResponse Email changed successfully. + * @throws ApiError + */ + public static authVerifyEmailChange({ + requestBody, + }: { + /** + * Email change confirmation token. + */ + requestBody: EmailVerifyRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/email/verify', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `The token is empty.`, + 404: `The token is invalid or expired.`, + 409: `The target email was taken by another account before confirmation.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Account login + * Log in using a username or verified email. password must be a Base64 ciphertext encrypted with the public key returned by /auth/rsa; the first login attempt must include captcha. If the account has TOTP enabled, the first successful password check returns 400/two-factor required and records pending verification state in the session. Then submit username, password, and totp_code again in the same session to complete login. On success, the session is renewed, the current user is bound, and temporary RSA keys are cleared. + * @returns ApiEmptyResponse Login succeeded. The server establishes login state through the session cookie. + * @throws ApiError + */ + public static authLogin({ + requestBody, + }: { + /** + * Login parameters. username accepts a username or email; password is an RSA-OAEP-SHA256 encrypted ciphertext; captcha is the captcha stored in the current session; totp_code is required only during the second verification step. + */ + requestBody: LoginParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/login', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Captcha error, RSA decryption failure, or missing/incorrect TOTP.`, + 404: `User does not exist or password is incorrect; to reduce enumeration risk, incorrect passwords are also treated as user-not-found.`, + 500: `Database, cache, or session write failed.`, + }, + }); + } + /** + * Log out + * Clear the user identity and all temporary authentication data from the current session, including captcha, temporary RSA keys, and pending 2FA state. This endpoint is idempotent: unauthenticated users also receive a success response. + * @returns ApiEmptyResponse Logged out successfully, or the session was already unauthenticated. + * @throws ApiError + */ + public static authLogout(): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/logout', + errors: { + 500: `Session persistence failed.`, + }, + }); + } + /** + * Get current signed-in user context + * Return the current user's basic profile, preferred language, timezone, and notification summary using the user_uid bound to the session. This endpoint is typically used to restore the login state when the frontend app starts. + * @returns ApiResponse_ContextMe The current session is authenticated. Returns the user context. + * @throws ApiError + */ + public static authGetCurrentUser(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/auth/me', + errors: { + 401: `The current session is unauthenticated or the login state has expired.`, + 404: `The user in the session no longer exists, has been disabled, or has been deleted.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Register a new account + * Create an account after validating username, email, password, captcha, and email verification code. password must be encrypted with the current session RSA public key; captcha and email_code are one-time credentials. On successful registration, the new user is written to the session and does not need to log in again. + * @returns ApiResponse_RegisterResponse Registration succeeded; the current session is automatically signed in as the new user. + * @throws ApiError + */ + public static authRegister({ + requestBody, + }: { + /** + * Registration parameters. email_code comes from /auth/register/email-code; password is a Base64 ciphertext encrypted with RSA-OAEP-SHA256. + */ + requestBody: RegisterParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/register', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Captcha error, email verification code error, weak password, RSA decryption failure, or missing required fields.`, + 409: `The username or email is already in use.`, + 500: `Database transaction, password hashing, cache, or session write failed.`, + }, + }); + } + /** + * Send registration email verification code + * After validating the captcha in the current session, send a 6-digit registration code to the target email address. The endpoint checks whether a verified email already exists and applies a per-email cooldown to prevent email bombing. The code is valid for 10 minutes by default. + * @returns ApiResponse_RegisterEmailCodeResponse The verification email has been queued for delivery. Returns the code expiration time. + * @throws ApiError + */ + public static authSendRegisterEmailCode({ + requestBody, + }: { + /** + * The target email address and captcha from the current session. + */ + requestBody: RegisterEmailCodeParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/register/email-code', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `The captcha is incorrect, the email is empty, or requests are too frequent.`, + 409: `The email is already used by another verified account.`, + 500: `Cache write failed or the email service is unavailable.`, + }, + }); + } + /** + * Request password reset email + * Submit an email address to send a password reset link if it belongs to an active user. To prevent user enumeration, the business logic attempts to return success whether the email exists, rate limits are triggered, or email delivery fails. Internally, the endpoint enforces a 60-second cooldown and a daily limit of 5 requests per email. + * @returns ApiEmptyResponse The request has been accepted; if the email exists, a reset email will be sent. + * @throws ApiError + */ + public static authRequestPasswordReset({ + requestBody, + }: { + /** + * The email address that should receive the password reset link. + */ + requestBody: ResetPasswordRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/reset-password', + body: requestBody, + mediaType: 'application/json', + errors: { + 500: `Rare unrecoverable server-side error.`, + }, + }); + } + /** + * Confirm password reset + * Set a new password using the token from the password reset email. password must be encrypted with the current session RSA public key; the new password is strength-checked and rehashed with Argon2id. The token is deleted immediately after successful use; expired or missing tokens fail. + * @returns ApiEmptyResponse Password reset succeeded. + * @throws ApiError + */ + public static authVerifyPasswordReset({ + requestBody, + }: { + /** + * The reset token and new password encrypted with RSA. + */ + requestBody: ResetPasswordVerifyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/auth/reset-password/verify', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `The token is invalid or expired, RSA decryption failed, or the password is too weak.`, + 500: `Database update or password hashing failed.`, + }, + }); + } + /** + * Get login form RSA public key + * Generate or reuse a temporary RSA-2048 key pair for the current browser session and return the public key in PKCS#1 PEM format. Clients should use this public key to encrypt sensitive fields such as passwords with RSA-OAEP-SHA256 before submitting login, registration, password reset, or 2FA disable requests. The private key is encrypted with AEAD and stored only in the server-side session; it is never returned to clients. + * @returns ApiResponse_RsaResponse Return the RSA public key available for the current session; if an unexpired key already exists in the session, reuse the existing public key. + * @throws ApiError + */ + public static authGetRsaPublicKey(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/auth/rsa', + errors: { + 500: `APP_SESSION_SECRET is missing, RSA generation failed, or session write failed.`, + }, + }); + } +} diff --git a/src/client/services/IssuesService.ts b/src/client/services/IssuesService.ts new file mode 100644 index 0000000..be875ae --- /dev/null +++ b/src/client/services/IssuesService.ts @@ -0,0 +1,2121 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiResponse_Issue } from '../models/ApiResponse_Issue'; +import type { ApiResponse_IssueAssignee } from '../models/ApiResponse_IssueAssignee'; +import type { ApiResponse_IssueComment } from '../models/ApiResponse_IssueComment'; +import type { ApiResponse_IssueLabel } from '../models/ApiResponse_IssueLabel'; +import type { ApiResponse_IssueLabelRelation } from '../models/ApiResponse_IssueLabelRelation'; +import type { ApiResponse_IssueMilestone } from '../models/ApiResponse_IssueMilestone'; +import type { ApiResponse_IssuePrRelation } from '../models/ApiResponse_IssuePrRelation'; +import type { ApiResponse_IssueReaction } from '../models/ApiResponse_IssueReaction'; +import type { ApiResponse_IssueRepoRelation } from '../models/ApiResponse_IssueRepoRelation'; +import type { ApiResponse_IssueSubscriber } from '../models/ApiResponse_IssueSubscriber'; +import type { ApiResponse_IssueTemplate } from '../models/ApiResponse_IssueTemplate'; +import type { ApiResponse_String } from '../models/ApiResponse_String'; +import type { ApiResponse_Vec_Issue } from '../models/ApiResponse_Vec_Issue'; +import type { ApiResponse_Vec_IssueAssignee } from '../models/ApiResponse_Vec_IssueAssignee'; +import type { ApiResponse_Vec_IssueComment } from '../models/ApiResponse_Vec_IssueComment'; +import type { ApiResponse_Vec_IssueEvent } from '../models/ApiResponse_Vec_IssueEvent'; +import type { ApiResponse_Vec_IssueLabel } from '../models/ApiResponse_Vec_IssueLabel'; +import type { ApiResponse_Vec_IssueLabelRelation } from '../models/ApiResponse_Vec_IssueLabelRelation'; +import type { ApiResponse_Vec_IssueMilestone } from '../models/ApiResponse_Vec_IssueMilestone'; +import type { ApiResponse_Vec_IssuePrRelation } from '../models/ApiResponse_Vec_IssuePrRelation'; +import type { ApiResponse_Vec_IssueReaction } from '../models/ApiResponse_Vec_IssueReaction'; +import type { ApiResponse_Vec_IssueRepoRelation } from '../models/ApiResponse_Vec_IssueRepoRelation'; +import type { ApiResponse_Vec_IssueSubscriber } from '../models/ApiResponse_Vec_IssueSubscriber'; +import type { ApiResponse_Vec_IssueTemplate } from '../models/ApiResponse_Vec_IssueTemplate'; +import type { CreateCommentParams } from '../models/CreateCommentParams'; +import type { CreateIssueParams } from '../models/CreateIssueParams'; +import type { CreateIssueReactionParams } from '../models/CreateIssueReactionParams'; +import type { CreateLabelParams } from '../models/CreateLabelParams'; +import type { CreateMilestoneParams } from '../models/CreateMilestoneParams'; +import type { CreateTemplateParams } from '../models/CreateTemplateParams'; +import type { LinkPrParams } from '../models/LinkPrParams'; +import type { LinkRepoParams } from '../models/LinkRepoParams'; +import type { LockIssueParams } from '../models/LockIssueParams'; +import type { MuteIssueParams } from '../models/MuteIssueParams'; +import type { TransferIssueParams } from '../models/TransferIssueParams'; +import type { UpdateCommentParams } from '../models/UpdateCommentParams'; +import type { UpdateIssueParams } from '../models/UpdateIssueParams'; +import type { UpdateLabelParams } from '../models/UpdateLabelParams'; +import type { UpdateMilestoneParams } from '../models/UpdateMilestoneParams'; +import type { UpdateTemplateParams } from '../models/UpdateTemplateParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class IssuesService { + /** + * List issues in a workspace + * Returns a paginated list of issues in the workspace, sorted by issue number (newest first). + * Supports filtering by state, priority, author, assignee, milestone, and label. + * Only returns issues visible to the authenticated user (public + workspace member access). + * Requires authentication. + * @returns ApiResponse_Vec_Issue Issues listed successfully. Returns filtered array of issue objects with metadata. + * @throws ApiError + */ + public static issueList({ + workspaceName, + state, + priority, + authorId, + assigneeId, + milestoneId, + labelId, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Filter by issue state ("open" or "closed") + */ + state?: string | null, + /** + * Filter by priority level + */ + priority?: string | null, + /** + * Filter by author user ID + */ + authorId?: string | null, + /** + * Filter by assignee user ID + */ + assigneeId?: string | null, + /** + * Filter by milestone ID + */ + milestoneId?: string | null, + /** + * Filter by label ID + */ + labelId?: string | null, + /** + * Maximum number of issues to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of issues to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'state': state, + 'priority': priority, + 'author_id': authorId, + 'assignee_id': assigneeId, + 'milestone_id': milestoneId, + 'label_id': labelId, + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `Workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create an issue + * Creates a new issue in the specified workspace. + * Requires at least Member role in the workspace. + * + * Parameters: + * - title: Issue title (required) + * - body: Issue body in markdown (optional) + * - priority: Priority level (optional, defaults to "none") + * - visibility: Visibility setting (optional, defaults to "public") + * - due_at: Due date (optional) + * - repo_ids: Related repository IDs + * - label_ids: Label IDs to apply + * - assignee_ids: User IDs to assign + * - milestone_id: Milestone ID to attach + * + * Effects: + * - Issue is created with auto-incrementing number + * - Author is automatically subscribed + * - Relations, labels, and assignees are attached + * - Workspace stats are updated + * + * Returns the created issue with full metadata. + * @returns ApiResponse_Issue Issue created successfully. Returns the newly created issue with full metadata. + * @throws ApiError + */ + public static issueCreate({ + workspaceName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue creation parameters + */ + requestBody: CreateIssueParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty title, invalid repository/label/milestone references`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Workspace or referenced resource not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Get an issue by number + * Returns detailed information about a specific issue, identified by workspace name and issue number. + * Requires read access to the issue (public or workspace member). + * @returns ApiResponse_Issue Issue retrieved successfully. Returns complete issue with all metadata. + * @throws ApiError + */ + public static issueGet({ + workspaceName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update an issue + * Updates an existing issue's metadata such as title, body, priority, visibility, due date, and milestone. + * Requires write access to the issue (author or workspace member). + * + * All fields are optional; only provided fields are updated. + * Returns the updated issue with full metadata. + * @returns ApiResponse_Issue Issue updated successfully. Returns the updated issue with full metadata. + * @throws ApiError + */ + public static issueUpdate({ + workspaceName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Issue update parameters (all fields optional) + */ + requestBody: UpdateIssueParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid priority, visibility, or milestone`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Workspace, issue, or referenced resource not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete an issue + * Soft-deletes an issue. The issue is marked as deleted but remains in the database. + * Requires Admin role in the workspace (or issue author). + * + * Effects: + * - Issue is marked as deleted (soft-delete) + * - Workspace issue count is decremented + * + * Returns success message on completion. + * @returns ApiResponse_String Issue deleted successfully. + * @throws ApiError + */ + public static issueDelete({ + workspaceName, + number, + }: { + workspaceName: string, + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or issue author)`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List assignees of an issue + * Returns a paginated list of all users assigned to the given issue. + * Shows who is assigned, when they were assigned, and who assigned them. + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueAssignee Assignees listed successfully. Returns array of assignee objects with assignment metadata. + * @throws ApiError + */ + public static issueListAssignees({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of assignees to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of assignees to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/assignees', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Assign a user to an issue + * Assigns a workspace member to the given issue. + * Requires write access to the issue (author or workspace member). + * + * Effects: + * - User is assigned to the issue + * - Assignee is automatically subscribed to the issue + * - Issue assignee count is incremented + * + * Returns the created assignment record. + * @returns ApiResponse_IssueAssignee User assigned successfully. Returns the created assignment record. + * @throws ApiError + */ + public static issueAssign({ + workspaceName, + number, + userId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * User ID (UUID) to assign + */ + userId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/assignees/{user_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'user_id': userId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Issue or user not found`, + 409: `User is already assigned to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * Unassign a user from an issue + * Removes a user from the issue's assignee list. + * Requires write access to the issue (author or workspace member). + * + * Effects: + * - User is removed from the issue's assignees + * - Issue assignee count is decremented + * + * Returns success message on completion. + * @returns ApiResponse_String User unassigned successfully. + * @throws ApiError + */ + public static issueUnassign({ + workspaceName, + number, + userId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * User ID (UUID) to unassign + */ + userId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/assignees/{user_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'user_id': userId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `User is not assigned to this issue or not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Close an issue + * Closes an open issue. The issue is marked as closed and the closing user is recorded. + * Requires write access to the issue (author or workspace member). + * + * Effects: + * - Issue state changes to "closed" + * - Closed by and closed at are recorded + * - A "Closed" event is logged + * + * Returns the closed issue with updated metadata. + * @returns ApiResponse_Issue Issue closed successfully. Returns the closed issue with updated metadata. + * @throws ApiError + */ + public static issueClose({ + workspaceName, + number, + }: { + workspaceName: string, + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/close', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + errors: { + 400: `Issue is already closed`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to close this issue`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List issue comments + * Returns a paginated list of comments on an issue, sorted by creation date (oldest first). + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueComment Comments listed successfully. + * @throws ApiError + */ + public static issueListComments({ + workspaceName, + number, + limit, + offset, + }: { + workspaceName: string, + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/comments', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a comment on an issue + * Adds a new comment to an issue. Users with read access can comment unless the issue is locked + * (in which case only users with write access can comment). + * + * Parameters: + * - body: Comment body in markdown format (required) + * - reply_to_comment_id: ID of parent comment for threaded replies (optional) + * + * Effects: + * - Comment is created and attached to the issue + * - Commenter is automatically subscribed to the issue + * - Issue comment count is incremented + * + * Returns the created comment with metadata. + * @returns ApiResponse_IssueComment Comment created successfully. + * @throws ApiError + */ + public static issueCreateComment({ + workspaceName, + number, + requestBody, + }: { + workspaceName: string, + number: number, + /** + * Comment creation parameters + */ + requestBody: CreateCommentParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/comments', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty body or issue is locked`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (issue locked and user lacks write access)`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update an issue comment + * Updates the body of an existing comment. Only the comment author can update their own comments. + * Requires read access to the issue. + * + * Returns the updated comment with edit timestamp. + * @returns ApiResponse_IssueComment Comment updated successfully. + * @throws ApiError + */ + public static issueUpdateComment({ + workspaceName, + number, + commentId, + requestBody, + }: { + workspaceName: string, + number: number, + commentId: string, + /** + * Comment update parameters + */ + requestBody: UpdateCommentParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/comments/{comment_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'comment_id': commentId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty body`, + 401: `Authentication required or session expired`, + 403: `Cannot edit other users' comments`, + 404: `Workspace, issue, or comment not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete an issue comment + * Soft-deletes a comment. The comment author can delete their own comments. + * Workspace admins can delete any comment. + * + * Effects: + * - Comment is marked as deleted + * - Issue comment count is decremented + * + * Returns success message on completion. + * @returns ApiResponse_String Comment deleted successfully. + * @throws ApiError + */ + public static issueDeleteComment({ + workspaceName, + number, + commentId, + }: { + workspaceName: string, + number: number, + commentId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/comments/{comment_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'comment_id': commentId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Cannot delete other users' comments (requires admin)`, + 404: `Workspace, issue, or comment not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List issue events + * Returns a chronological timeline of all events for the given issue. + * Events include creation, updates, state changes, assignments, label changes, etc. + * Sorted by creation date (oldest first for timeline display). + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueEvent Events listed successfully. Returns chronological array of event objects. + * @throws ApiError + */ + public static issueListEvents({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of events to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of events to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/events', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List labels assigned to an issue + * Returns a paginated list of all label relations for the given issue. + * Shows which labels are attached to the issue, with assignment metadata. + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueLabelRelation Label relations listed successfully. Returns array of label relation objects with metadata. + * @throws ApiError + */ + public static issueListLabelRelations({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of label relations to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of label relations to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/labels', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Assign a label to an issue + * Attaches a label to the given issue. The label must belong to a repository in the same workspace. + * Requires write access to the issue (author or workspace member). + * + * Effects: + * - Label is attached to the issue + * - Issue label count is incremented + * + * Returns the created label relation. + * @returns ApiResponse_IssueLabelRelation Label assigned successfully. Returns the created label relation. + * @throws ApiError + */ + public static issueAssignLabel({ + workspaceName, + number, + labelId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Label ID (UUID) to assign + */ + labelId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'label_id': labelId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Issue or label not found`, + 409: `Label is already assigned to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * Unassign a label from an issue + * Removes a label from the given issue. + * Requires write access to the issue (author or workspace member). + * + * Effects: + * - Label relation is removed from the issue + * - Issue label count is decremented + * + * Returns success message on completion. + * @returns ApiResponse_String Label unassigned successfully. + * @throws ApiError + */ + public static issueUnassignLabel({ + workspaceName, + number, + labelId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Label ID (UUID) to unassign + */ + labelId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'label_id': labelId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Label is not assigned to this issue or not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Lock or unlock an issue + * Locks or unlocks conversation on an issue. When locked, only users with write access can comment. + * Requires write access to the issue (author or workspace member). + * + * Returns the updated issue with lock status. + * @returns ApiResponse_Issue Issue lock status updated successfully. + * @throws ApiError + */ + public static issueLock({ + workspaceName, + number, + requestBody, + }: { + workspaceName: string, + number: number, + /** + * Lock/unlock parameters + */ + requestBody: LockIssueParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/lock', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to manage this issue`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Mute or unmute issue notifications + * Mutes or unmutes notifications for the given issue without unsubscribing. + * Requires an active subscription to the issue. + * + * Returns success message on completion. + * @returns ApiResponse_String Mute status updated successfully. + * @throws ApiError + */ + public static issueMute({ + workspaceName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Mute/unmute parameters + */ + requestBody: MuteIssueParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/mute', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required or session expired`, + 404: `Not currently subscribed to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * List pull request relations for an issue + * Returns a paginated list of all pull requests linked to the given issue. + * Shows relation type (closes, references, depends_on, etc.) and link metadata. + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssuePrRelation PR relations listed successfully. Returns array of PR relation objects. + * @throws ApiError + */ + public static issueListPrRelations({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of relations to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of relations to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/prs', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Link a pull request to an issue + * Creates a relation between the given issue and a pull request. + * Commonly used to mark a PR as closing or referencing an issue. + * Requires write access to the issue. + * + * Parameters: + * - pull_request_id: Pull request ID (UUID) to link + * - relation_type: Relation type ("closes", "references", "depends_on", default: "references") + * + * Returns the created relation. + * @returns ApiResponse_IssuePrRelation Pull request linked successfully. Returns the created relation. + * @throws ApiError + */ + public static issueLinkPr({ + workspaceName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Link pull request parameters + */ + requestBody: LinkPrParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/prs', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid relation type`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Issue or pull request not found`, + 409: `Pull request is already linked to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * Unlink a pull request from an issue + * Removes a pull request relation from the given issue. + * Requires write access to the issue. + * + * Returns success message on completion. + * @returns ApiResponse_String Pull request unlinked successfully. + * @throws ApiError + */ + public static issueUnlinkPr({ + workspaceName, + number, + relationId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Relation ID (UUID) + */ + relationId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/prs/{relation_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'relation_id': relationId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `PR relation not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List reactions on an issue + * Returns a paginated list of all emoji reactions on the given issue. + * Includes reaction content, target type, and user who added each reaction. + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueReaction Reactions listed successfully. Returns array of reaction objects. + * @throws ApiError + */ + public static issueListReactions({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of reactions to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of reactions to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/reactions', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Add a reaction to an issue + * Adds an emoji reaction to the given issue. + * Requires read access to the issue. + * + * Parameters: + * - content: Reaction content (e.g., "👍", "❤️", "🎉") + * - target_type: Target type for the reaction (defaults to "Issue") + * - target_id: Target ID for reactions on specific comments (optional) + * + * Returns the created reaction. + * @returns ApiResponse_IssueReaction Reaction added successfully. Returns the created reaction. + * @throws ApiError + */ + public static issueAddReaction({ + workspaceName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Reaction creation parameters + */ + requestBody: CreateIssueReactionParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/reactions', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty content or invalid target type`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Remove a reaction from an issue + * Removes a previously added reaction. Only the user who added the reaction can remove it. + * Requires read access to the issue. + * + * Returns success message on completion. + * @returns ApiResponse_String Reaction removed successfully. + * @throws ApiError + */ + public static issueRemoveReaction({ + workspaceName, + number, + reactionId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Reaction ID (UUID) + */ + reactionId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/reactions/{reaction_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'reaction_id': reactionId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Cannot remove another user's reaction`, + 404: `Reaction not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Reopen an issue + * Reopens a closed issue. The issue state changes back to "open" and closed metadata is cleared. + * Requires write access to the issue (author or workspace member). + * + * Returns the reopened issue with updated metadata. + * @returns ApiResponse_Issue Issue reopened successfully. Returns the reopened issue with updated metadata. + * @throws ApiError + */ + public static issueReopen({ + workspaceName, + number, + }: { + workspaceName: string, + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/reopen', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + errors: { + 400: `Issue is not closed`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to reopen this issue`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List repository relations for an issue + * Returns a paginated list of all repositories linked to the given issue. + * Shows relation type (references, duplicates, blocks, etc.) and link metadata. + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueRepoRelation Repository relations listed successfully. Returns array of relation objects. + * @throws ApiError + */ + public static issueListRepoRelations({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of relations to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of relations to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/repos', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Link a repository to an issue + * Creates a relation between the given issue and a repository. + * Requires write access to the issue. + * + * Parameters: + * - repo_id: Repository ID (UUID) to link + * - relation_type: Relation type ("references", "duplicates", "blocks", "depends_on", default: "references") + * + * Returns the created relation. + * @returns ApiResponse_IssueRepoRelation Repository linked successfully. Returns the created relation. + * @throws ApiError + */ + public static issueLinkRepo({ + workspaceName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Link repository parameters + */ + requestBody: LinkRepoParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/repos', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid relation type`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Issue or repository not found`, + 409: `Repository is already linked to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * Unlink a repository from an issue + * Removes a repository relation from the given issue. + * Requires write access to the issue. + * + * Returns success message on completion. + * @returns ApiResponse_String Repository unlinked successfully. + * @throws ApiError + */ + public static issueUnlinkRepo({ + workspaceName, + number, + relationId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Relation ID (UUID) + */ + relationId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/repos/{relation_id}', + path: { + 'workspace_name': workspaceName, + 'number': number, + 'relation_id': relationId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this issue`, + 404: `Repository relation not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Subscribe to an issue + * Subscribes the authenticated user to the given issue to receive notifications. + * Requires read access to the issue. + * + * Effects: + * - User is added as a subscriber with "manual" reason + * - User receives notifications for all issue activity + * + * Returns the created subscription record. + * @returns ApiResponse_IssueSubscriber Subscribed successfully. Returns the subscription record. + * @throws ApiError + */ + public static issueSubscribe({ + workspaceName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/subscribe', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 409: `Already subscribed to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * Unsubscribe from an issue + * Removes the authenticated user's subscription to the given issue. + * Stops all notifications for this issue. + * + * Returns success message on completion. + * @returns ApiResponse_String Unsubscribed successfully. + * @throws ApiError + */ + public static issueUnsubscribe({ + workspaceName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/subscribe', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `Not currently subscribed to this issue`, + 500: `Internal server error`, + }, + }); + } + /** + * List subscribers of an issue + * Returns a paginated list of all users subscribed to the given issue. + * Shows who receives notifications and their subscription reason (author, assignee, manual). + * Requires read access to the issue. + * @returns ApiResponse_Vec_IssueSubscriber Subscribers listed successfully. Returns array of subscriber objects. + * @throws ApiError + */ + public static issueListSubscribers({ + workspaceName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Maximum number of subscribers to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of subscribers to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/subscribers', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to view this issue`, + 404: `Issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Transfer an issue to another workspace + * Moves an issue from the current workspace to a different workspace. + * Requires Admin role in both the source and target workspaces. + * + * Effects: + * - Issue is transferred to the target workspace with a new number + * - Source workspace issue count is decremented + * - Target workspace issue count is incremented + * + * Returns the transferred issue with updated workspace and number. + * @returns ApiResponse_Issue Issue transferred successfully. Returns the issue with new workspace assignment. + * @throws ApiError + */ + public static issueTransfer({ + workspaceName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Issue number (unique within the workspace) + */ + number: number, + /** + * Transfer parameters + */ + requestBody: TransferIssueParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/issues/{number}/transfer', + path: { + 'workspace_name': workspaceName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid target workspace`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions in source or target workspace`, + 404: `Workspace or issue not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List labels in a repository + * Returns all issue labels defined in the repository, sorted alphabetically. + * Requires read access to the repository. + * @returns ApiResponse_Vec_IssueLabel Labels listed successfully. + * @throws ApiError + */ + public static issueListLabels({ + workspaceName, + repoName, + }: { + workspaceName: string, + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/labels', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a label + * Creates a new issue label in a repository. + * Requires at least Member role in the repository. + * + * Parameters: + * - name: Label name (required, e.g., "bug", "feature") + * - color: Hex color code (required, e.g., "#FF0000") + * - description: Label description (optional) + * + * Returns the created label with metadata. + * @returns ApiResponse_IssueLabel Label created successfully. + * @throws ApiError + */ + public static issueCreateLabel({ + workspaceName, + repoName, + requestBody, + }: { + workspaceName: string, + repoName: string, + /** + * Label creation parameters + */ + requestBody: CreateLabelParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/labels', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty name or invalid color`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a label + * Updates an existing issue label's name, color, or description. + * Requires Admin role in the repository. + * + * All fields are optional; only provided fields are updated. + * Returns the updated label. + * @returns ApiResponse_IssueLabel Label updated successfully. + * @throws ApiError + */ + public static issueUpdateLabel({ + workspaceName, + repoName, + labelId, + requestBody, + }: { + workspaceName: string, + repoName: string, + labelId: string, + /** + * Label update parameters (all fields optional) + */ + requestBody: UpdateLabelParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'label_id': labelId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `Repository, workspace, or label not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a label + * Permanently removes an issue label from a repository. + * Requires Admin role in the repository. + * + * Effects: + * - Label is permanently deleted + * - All issue-label relations using this label are removed + * + * Returns success message on completion. + * @returns ApiResponse_String Label deleted successfully. + * @throws ApiError + */ + public static issueDeleteLabel({ + workspaceName, + repoName, + labelId, + }: { + workspaceName: string, + repoName: string, + labelId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'label_id': labelId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `Repository, workspace, or label not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List milestones in a repository + * Returns a paginated list of milestones in the repository, sorted by state (open first) then by due date. + * Includes milestone metadata such as title, description, state, due date, and progress. + * Requires read access to the repository. + * @returns ApiResponse_Vec_IssueMilestone Milestones listed successfully. Returns array of milestone objects with metadata. + * @throws ApiError + */ + public static issueListMilestones({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of milestones to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of milestones to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/milestones', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a milestone + * Creates a new milestone in a repository for tracking issue progress. + * Requires at least Member role in the repository. + * + * Parameters: + * - title: Milestone title (required) + * - description: Description of the milestone (optional) + * - due_at: Target due date (optional) + * + * Returns the created milestone with metadata. + * @returns ApiResponse_IssueMilestone Milestone created successfully. Returns the newly created milestone with metadata. + * @throws ApiError + */ + public static issueCreateMilestone({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Milestone creation parameters + */ + requestBody: CreateMilestoneParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/milestones', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty title`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a milestone + * Updates an existing milestone's metadata. Can also close or reopen the milestone via the state field. + * Requires at least Member role in the repository. + * + * Updatable fields: + * - title: Milestone title (optional) + * - description: Description (optional) + * - due_at: Target due date (optional) + * - state: State ("open" or "closed") for closing/reopening the milestone (optional) + * + * All fields are optional; only provided fields are updated. + * Returns the updated milestone with full metadata. + * @returns ApiResponse_IssueMilestone Milestone updated successfully. Returns the updated milestone with full metadata. + * @throws ApiError + */ + public static issueUpdateMilestone({ + workspaceName, + repoName, + milestoneId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Milestone ID (UUID) + */ + milestoneId: string, + /** + * Milestone update parameters (all fields optional) + */ + requestBody: UpdateMilestoneParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/milestones/{milestone_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'milestone_id': milestoneId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Repository, workspace, or milestone not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a milestone + * Permanently removes a milestone from the repository. + * Requires Admin role in the repository. + * + * Effects: + * - Milestone is permanently deleted + * - Issues attached to this milestone lose their milestone association + * + * Returns success message on completion. + * @returns ApiResponse_String Milestone deleted successfully. + * @throws ApiError + */ + public static issueDeleteMilestone({ + workspaceName, + repoName, + milestoneId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Milestone ID (UUID) + */ + milestoneId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/milestones/{milestone_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'milestone_id': milestoneId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `Repository, workspace, or milestone not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List issue templates in a repository + * Returns a paginated list of all active issue templates in the repository. + * Templates provide pre-filled content for creating new issues. + * Sorted alphabetically by name. + * Requires read access to the repository. + * @returns ApiResponse_Vec_IssueTemplate Templates listed successfully. Returns array of template objects. + * @throws ApiError + */ + public static issueListTemplates({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of templates to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of templates to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/templates', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create an issue template + * Creates a new issue template in the repository. + * Requires at least Member role in the repository. + * + * Parameters: + * - name: Template name (required) + * - description: Template description (optional) + * - title_template: Default title for issues (optional, supports placeholders) + * - body_template: Default body content in markdown (required) + * - labels: List of label names to auto-apply (optional) + * + * Returns the created template with metadata. + * @returns ApiResponse_IssueTemplate Template created successfully. Returns the newly created template. + * @throws ApiError + */ + public static issueCreateTemplate({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Template creation parameters + */ + requestBody: CreateTemplateParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/templates', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty name or body template`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update an issue template + * Updates an existing issue template's metadata and content. + * Requires Admin role in the repository. + * + * All fields are optional; only provided fields are updated. + * Returns the updated template. + * @returns ApiResponse_IssueTemplate Template updated successfully. Returns the updated template. + * @throws ApiError + */ + public static issueUpdateTemplate({ + workspaceName, + repoName, + templateId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Template ID (UUID) + */ + templateId: string, + /** + * Template update parameters (all fields optional) + */ + requestBody: UpdateTemplateParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/templates/{template_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'template_id': templateId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `Repository, workspace, or template not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete an issue template + * Permanently removes an issue template from the repository. + * Requires Admin role in the repository. + * + * Returns success message on completion. + * @returns ApiResponse_String Template deleted successfully. + * @throws ApiError + */ + public static issueDeleteTemplate({ + workspaceName, + repoName, + templateId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Template ID (UUID) + */ + templateId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/issues/templates/{template_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'template_id': templateId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `Template not found`, + 500: `Internal server error`, + }, + }); + } +} diff --git a/src/client/services/PullRequestsService.ts b/src/client/services/PullRequestsService.ts new file mode 100644 index 0000000..53fee4e --- /dev/null +++ b/src/client/services/PullRequestsService.ts @@ -0,0 +1,2185 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { AddReplyParams } from '../models/AddReplyParams'; +import type { ApiResponse_PrAssignee } from '../models/ApiResponse_PrAssignee'; +import type { ApiResponse_PrCheckRun } from '../models/ApiResponse_PrCheckRun'; +import type { ApiResponse_PrLabel } from '../models/ApiResponse_PrLabel'; +import type { ApiResponse_PrLabelRelation } from '../models/ApiResponse_PrLabelRelation'; +import type { ApiResponse_PrMergeStrategy } from '../models/ApiResponse_PrMergeStrategy'; +import type { ApiResponse_PrReaction } from '../models/ApiResponse_PrReaction'; +import type { ApiResponse_PrReview } from '../models/ApiResponse_PrReview'; +import type { ApiResponse_PrReviewComment } from '../models/ApiResponse_PrReviewComment'; +import type { ApiResponse_PrStatus } from '../models/ApiResponse_PrStatus'; +import type { ApiResponse_PrSubscription } from '../models/ApiResponse_PrSubscription'; +import type { ApiResponse_PullRequest } from '../models/ApiResponse_PullRequest'; +import type { ApiResponse_String } from '../models/ApiResponse_String'; +import type { ApiResponse_Vec_PrAssignee } from '../models/ApiResponse_Vec_PrAssignee'; +import type { ApiResponse_Vec_PrCheckRun } from '../models/ApiResponse_Vec_PrCheckRun'; +import type { ApiResponse_Vec_PrCommit } from '../models/ApiResponse_Vec_PrCommit'; +import type { ApiResponse_Vec_PrEvent } from '../models/ApiResponse_Vec_PrEvent'; +import type { ApiResponse_Vec_PrFile } from '../models/ApiResponse_Vec_PrFile'; +import type { ApiResponse_Vec_PrLabel } from '../models/ApiResponse_Vec_PrLabel'; +import type { ApiResponse_Vec_PrLabelRelation } from '../models/ApiResponse_Vec_PrLabelRelation'; +import type { ApiResponse_Vec_PrReaction } from '../models/ApiResponse_Vec_PrReaction'; +import type { ApiResponse_Vec_PrReview } from '../models/ApiResponse_Vec_PrReview'; +import type { ApiResponse_Vec_PrReviewComment } from '../models/ApiResponse_Vec_PrReviewComment'; +import type { ApiResponse_Vec_PrSubscription } from '../models/ApiResponse_Vec_PrSubscription'; +import type { ApiResponse_Vec_PullRequest } from '../models/ApiResponse_Vec_PullRequest'; +import type { CreateCheckRunParams } from '../models/CreateCheckRunParams'; +import type { CreatePrLabelParams } from '../models/CreatePrLabelParams'; +import type { CreatePrParams } from '../models/CreatePrParams'; +import type { CreateReactionParams } from '../models/CreateReactionParams'; +import type { CreateReviewParams } from '../models/CreateReviewParams'; +import type { DismissReviewParams } from '../models/DismissReviewParams'; +import type { LockPrParams } from '../models/LockPrParams'; +import type { MergePrParams } from '../models/MergePrParams'; +import type { MutePrParams } from '../models/MutePrParams'; +import type { SubmitReviewParams } from '../models/SubmitReviewParams'; +import type { UpdateCheckRunParams } from '../models/UpdateCheckRunParams'; +import type { UpdateMergeStrategyParams } from '../models/UpdateMergeStrategyParams'; +import type { UpdatePrLabelParams } from '../models/UpdatePrLabelParams'; +import type { UpdatePrParams } from '../models/UpdatePrParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class PullRequestsService { + /** + * List pull requests in a repository + * Returns a paginated list of pull requests, sorted by number (newest first). + * Supports filtering by state, author, and draft status. + * Requires read access to the repository. + * @returns ApiResponse_Vec_PullRequest PRs listed successfully. Returns filtered array of PR objects. + * @throws ApiError + */ + public static prList({ + workspaceName, + repoName, + state, + authorId, + draft, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Filter by PR state ("open", "closed", "merged") + */ + state?: string | null, + /** + * Filter by author user ID + */ + authorId?: string | null, + /** + * Filter by draft status + */ + draft?: boolean | null, + /** + * Maximum number of PRs to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of PRs to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'state': state, + 'author_id': authorId, + 'draft': draft, + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a pull request + * Creates a new pull request proposing changes from a source branch to a target branch. + * Requires at least Member role in the repository. + * + * Parameters: + * - title: PR title (required) + * - body: PR description in markdown (optional) + * - source_repo_id: Source repository ID (supports cross-repo PRs from forks) + * - source_branch: Source branch name (must exist) + * - target_branch: Target branch name (must exist in the repo) + * - head_commit_sha: Head commit SHA from the source branch + * - base_commit_sha: Base commit SHA for diff calculation (optional) + * - draft: Whether this is a draft PR (optional, defaults to false) + * + * Effects: + * - PR is created with auto-incrementing number + * - PR status tracking is initialized + * - Author is automatically subscribed + * - Repository stats are updated + * + * Returns the created PR with full metadata. + * @returns ApiResponse_PullRequest PR created successfully. Returns the newly created PR with full metadata. + * @throws ApiError + */ + public static prCreate({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR creation parameters + */ + requestBody: CreatePrParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty title, non-existent branch/commit, or invalid fork relationship`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List PR labels in a repository + * @returns ApiResponse_Vec_PrLabel Labels listed successfully. + * @throws ApiError + */ + public static prListLabels({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/labels', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required`, + 404: `Repo not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a PR label. Requires Member role. + * @returns ApiResponse_PrLabel Label created. + * @throws ApiError + */ + public static prCreateLabel({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Label creation parameters + */ + requestBody: CreatePrLabelParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/labels', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters`, + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `Repo not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a PR label. Requires Admin role. + * @returns ApiResponse_PrLabel Label updated. + * @throws ApiError + */ + public static prUpdateLabel({ + workspaceName, + repoName, + labelId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Label ID (UUID) + */ + labelId: string, + /** + * Label update parameters + */ + requestBody: UpdatePrLabelParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'label_id': labelId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions (Admin required)`, + 404: `Label not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a PR label. Requires Admin role. + * @returns ApiResponse_String Label deleted. + * @throws ApiError + */ + public static prDeleteLabel({ + workspaceName, + repoName, + labelId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Label ID (UUID) + */ + labelId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'label_id': labelId, + }, + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions (Admin required)`, + 404: `Label not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Get a pull request by number + * Returns detailed information about a specific pull request. + * Requires read access to the repository. + * @returns ApiResponse_PullRequest PR retrieved successfully. Returns complete PR with all metadata. + * @throws ApiError + */ + public static prGet({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository, workspace, or PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a pull request + * Updates an existing pull request's metadata such as title, body, target branch, and draft status. + * Requires write access to the PR (author or repository member). + * + * All fields are optional; only provided fields are updated. + * Returns the updated PR with full metadata. + * @returns ApiResponse_PullRequest PR updated successfully. Returns the updated PR with full metadata. + * @throws ApiError + */ + public static prUpdate({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * PR update parameters (all fields optional) + */ + requestBody: UpdatePrParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to edit this PR`, + 404: `Repository, workspace, or PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a pull request + * Soft-deletes a PR. Requires Admin role in the repository. + * + * Returns success message on completion. + * @returns ApiResponse_String PR deleted successfully. + * @throws ApiError + */ + public static prDelete({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List assignees of a PR + * @returns ApiResponse_Vec_PrAssignee Assignees listed. + * @throws ApiError + */ + public static prListAssignees({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/assignees', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Assign a user to a PR. Assignee is auto-subscribed. + * @returns ApiResponse_PrAssignee User assigned. + * @throws ApiError + */ + public static prAssign({ + workspaceName, + repoName, + number, + userId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * User ID (UUID) to assign/unassign + */ + userId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/assignees/{user_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'user_id': userId, + }, + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 409: `User already assigned`, + 500: `Internal server error`, + }, + }); + } + /** + * Unassign a user from a PR + * @returns ApiResponse_String User unassigned. + * @throws ApiError + */ + public static prUnassign({ + workspaceName, + repoName, + number, + userId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * User ID (UUID) to assign/unassign + */ + userId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/assignees/{user_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'user_id': userId, + }, + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `Assignee not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List check runs for a PR + * @returns ApiResponse_Vec_PrCheckRun Check runs listed. + * @throws ApiError + */ + public static prListCheckRuns({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/check-runs', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a check run. Requires Member role. + * @returns ApiResponse_PrCheckRun Check run created. + * @throws ApiError + */ + public static prCreateCheckRun({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Check run parameters + */ + requestBody: CreateCheckRunParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/check-runs', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid status`, + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a check run. Requires Member role. + * @returns ApiResponse_PrCheckRun Check run updated. + * @throws ApiError + */ + public static prUpdateCheckRun({ + workspaceName, + repoName, + number, + checkRunId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Check run ID (UUID) + */ + checkRunId: string, + /** + * Check run update parameters + */ + requestBody: UpdateCheckRunParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/check-runs/{check_run_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'check_run_id': checkRunId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid status`, + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `Check run not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a check run. Requires Admin role. + * @returns ApiResponse_String Check run deleted. + * @throws ApiError + */ + public static prDeleteCheckRun({ + workspaceName, + repoName, + number, + checkRunId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Check run ID (UUID) + */ + checkRunId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/check-runs/{check_run_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'check_run_id': checkRunId, + }, + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions (Admin required)`, + 404: `Check run not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Close a pull request + * Closes an open PR without merging. + * Requires write access to the PR. + * + * Returns the closed PR. + * @returns ApiResponse_PullRequest PR closed successfully. + * @throws ApiError + */ + public static prClose({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/close', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 400: `PR is not open`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a review comment (own comments only) + * @returns ApiResponse_PrReviewComment Comment updated. + * @throws ApiError + */ + public static prUpdateReviewComment({ + workspaceName, + repoName, + number, + commentId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Comment ID (UUID) + */ + commentId: string, + /** + * Update parameters + */ + requestBody: AddReplyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/comments/{comment_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'comment_id': commentId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required`, + 403: `Cannot edit other users' comments`, + 404: `Comment not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a review comment. Own comments or Admin role. + * @returns ApiResponse_String Comment deleted. + * @throws ApiError + */ + public static prDeleteReviewComment({ + workspaceName, + repoName, + number, + commentId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Comment ID (UUID) + */ + commentId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/comments/{comment_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'comment_id': commentId, + }, + errors: { + 401: `Authentication required`, + 403: `Cannot delete other users' comments (Admin required)`, + 404: `Comment not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Reply to a review comment + * @returns ApiResponse_PrReviewComment Reply added. + * @throws ApiError + */ + public static prAddReviewReply({ + workspaceName, + repoName, + number, + commentId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Comment ID (UUID) + */ + commentId: string, + /** + * Reply parameters + */ + requestBody: AddReplyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/comments/{comment_id}/reply', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'comment_id': commentId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Empty body`, + 401: `Authentication required`, + 404: `Comment not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List commits in a pull request + * Returns a paginated list of all commits included in the PR, sorted by position. + * Requires read access to the repository. + * @returns ApiResponse_Vec_PrCommit Commits listed successfully. + * @throws ApiError + */ + public static prListCommits({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Maximum number of commits to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of commits to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/commits', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List PR events (timeline). Returns chronological activity log. + * @returns ApiResponse_Vec_PrEvent Events listed. + * @throws ApiError + */ + public static prListEvents({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/events', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List changed files in a pull request + * Returns a paginated list of all files changed in the PR, sorted by path. + * Includes additions, deletions, and patch diffs for each file. + * Requires read access to the repository. + * @returns ApiResponse_Vec_PrFile Files listed successfully. + * @throws ApiError + */ + public static prListFiles({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Maximum number of files to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of files to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/files', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List labels assigned to a PR + * @returns ApiResponse_Vec_PrLabelRelation Label relations listed. + * @throws ApiError + */ + public static prListLabelRelations({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/labels', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Assign a label to a PR + * @returns ApiResponse_PrLabelRelation Label assigned. + * @throws ApiError + */ + public static prAssignLabel({ + workspaceName, + repoName, + number, + labelId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Label ID (UUID) + */ + labelId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'label_id': labelId, + }, + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `PR or label not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Unassign a label from a PR + * @returns ApiResponse_String Label unassigned. + * @throws ApiError + */ + public static prUnassignLabel({ + workspaceName, + repoName, + number, + labelId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Label ID (UUID) + */ + labelId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/labels/{label_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'label_id': labelId, + }, + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `Label not assigned`, + 500: `Internal server error`, + }, + }); + } + /** + * Lock or unlock a pull request conversation + * When locked, only repository maintainers and admins can comment on the PR. + * Requires write access to the PR. + * + * Returns the updated PR. + * @returns ApiResponse_PullRequest PR lock status updated. + * @throws ApiError + */ + public static prLock({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Lock/unlock parameters + */ + requestBody: LockPrParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/lock', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Merge a pull request + * Merges the source branch into the target branch. + * Requires at least Maintainer role in the repository. + * + * Branch protection rules are enforced: + * - Required approvals count (self-approval not allowed) + * - Required status checks must pass + * - Admins can bypass protection rules + * + * Parameters: + * - strategy: Merge strategy ("merge", "squash", "rebase", default: "merge") + * - squash_title: Custom title for squash merge (optional) + * - squash_message: Custom message for squash merge (optional) + * - delete_source_branch: Delete source branch after merge (optional, only same-repo) + * + * Returns the merged PR with merge commit SHA. + * @returns ApiResponse_PullRequest PR merged successfully. Returns the merged PR with merge commit SHA. + * @throws ApiError + */ + public static prMerge({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Merge parameters + */ + requestBody: MergePrParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/merge', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Cannot merge: PR not open, is draft, or branch protection requirements not met`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Maintainer role or higher)`, + 404: `PR not found`, + 500: `Internal server error or git merge failure`, + }, + }); + } + /** + * Get PR merge strategy + * Returns the current merge strategy settings for a PR. + * Requires read access to the repository. + * @returns ApiResponse_PrMergeStrategy Merge strategy retrieved successfully. + * @throws ApiError + */ + public static prGetMergeStrategy({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/merge-strategy', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `PR or merge strategy not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update PR merge strategy + * Updates the merge strategy settings for a PR. + * Requires write access to the PR. + * + * Updatable fields: + * - strategy: Merge strategy type ("merge", "squash", "rebase") + * - auto_merge: Enable auto-merge when all checks pass + * - squash_title: Custom title for squash merge + * - squash_message: Custom message for squash merge + * - delete_source_branch: Delete source branch after merge + * - merge_when_checks_pass: Auto-merge when checks pass + * + * All fields are optional; only provided fields are updated. + * @returns ApiResponse_PrMergeStrategy Merge strategy updated successfully. + * @throws ApiError + */ + public static prUpdateMergeStrategy({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Merge strategy update parameters (all fields optional) + */ + requestBody: UpdateMergeStrategyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/merge-strategy', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: unsupported strategy`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Mute or unmute notifications for a PR + * @returns ApiResponse_String Mute status updated. + * @throws ApiError + */ + public static prMute({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Mute/unmute parameters + */ + requestBody: MutePrParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/mute', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required`, + 404: `Not subscribed`, + 500: `Internal server error`, + }, + }); + } + /** + * List reactions on a PR + * @returns ApiResponse_Vec_PrReaction Reactions listed. + * @throws ApiError + */ + public static prListReactions({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reactions', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Add a reaction to a PR + * @returns ApiResponse_PrReaction Reaction added. + * @throws ApiError + */ + public static prAddReaction({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Reaction parameters + */ + requestBody: CreateReactionParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reactions', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid content or target type`, + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Remove a reaction. Only the reaction author can remove it. + * @returns ApiResponse_String Reaction removed. + * @throws ApiError + */ + public static prRemoveReaction({ + workspaceName, + repoName, + number, + reactionId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Reaction ID (UUID) + */ + reactionId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reactions/{reaction_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'reaction_id': reactionId, + }, + errors: { + 401: `Authentication required`, + 403: `Cannot remove another user's reaction`, + 404: `Reaction not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Mark a draft PR as ready for review + * Converts a draft pull request to a ready-for-review state. + * Requires write access to the PR. + * + * Effects: + * - Draft flag is set to false + * - A "DraftReady" event is logged + * - Reviewers are notified that the PR is ready + * + * Returns the updated PR. + * @returns ApiResponse_PullRequest PR marked as ready for review. + * @throws ApiError + */ + public static prMarkReady({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/ready', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 400: `PR is already ready for review`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Reopen a pull request + * Reopens a closed (but not merged) PR. + * Requires write access to the PR. + * + * Returns the reopened PR. + * @returns ApiResponse_PullRequest PR reopened successfully. + * @throws ApiError + */ + public static prReopen({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reopen', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 400: `PR is not closed or already merged`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List reviews on a PR + * @returns ApiResponse_Vec_PrReview Reviews listed. + * @throws ApiError + */ + public static prListReviews({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a review. States: pending, approved, changes_requested, commented. Authors cannot approve their own PRs. + * @returns ApiResponse_PrReview Review created. + * @throws ApiError + */ + public static prCreateReview({ + workspaceName, + repoName, + number, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Review parameters + */ + requestBody: CreateReviewParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid state or self-approval`, + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List comments for a specific review + * @returns ApiResponse_Vec_PrReviewComment Review comments listed. + * @throws ApiError + */ + public static prListReviewComments({ + workspaceName, + repoName, + number, + reviewId, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Review ID (UUID) + */ + reviewId: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews/{review_id}/comments', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'review_id': reviewId, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `Review not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Dismiss a submitted review. Requires Admin role. + * @returns ApiResponse_PrReview Review dismissed. + * @throws ApiError + */ + public static prDismissReview({ + workspaceName, + repoName, + number, + reviewId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Review ID (UUID) + */ + reviewId: string, + /** + * Dismiss parameters + */ + requestBody: DismissReviewParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews/{review_id}/dismiss', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'review_id': reviewId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Authentication required`, + 403: `Insufficient permissions (Admin required)`, + 404: `Review not found or not submitted`, + 500: `Internal server error`, + }, + }); + } + /** + * Submit a pending review. Changes its state to approved, changes_requested, or commented. + * @returns ApiResponse_PrReview Review submitted. + * @throws ApiError + */ + public static prSubmitReview({ + workspaceName, + repoName, + number, + reviewId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + /** + * Review ID (UUID) + */ + reviewId: string, + /** + * Submit parameters + */ + requestBody: SubmitReviewParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/reviews/{review_id}/submit', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + 'review_id': reviewId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid state or self-approval`, + 401: `Authentication required`, + 403: `Insufficient permissions`, + 404: `Review not found or already submitted`, + 500: `Internal server error`, + }, + }); + } + /** + * Get PR status summary + * Returns the current status of a PR including checks state, mergeability, + * approval count, and file change statistics. + * Requires read access to the repository. + * @returns ApiResponse_PrStatus PR status retrieved successfully. + * @throws ApiError + */ + public static prGetStatus({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/status', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions`, + 404: `PR or status not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Subscribe to a PR to receive notifications + * @returns ApiResponse_PrSubscription Subscribed. + * @throws ApiError + */ + public static prSubscribe({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/subscribe', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 409: `Already subscribed`, + 500: `Internal server error`, + }, + }); + } + /** + * Unsubscribe from a PR + * @returns ApiResponse_String Unsubscribed. + * @throws ApiError + */ + public static prUnsubscribe({ + workspaceName, + repoName, + number, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/subscribe', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + errors: { + 401: `Authentication required`, + 404: `Not subscribed`, + 500: `Internal server error`, + }, + }); + } + /** + * List subscriptions on a PR + * @returns ApiResponse_Vec_PrSubscription Subscriptions listed. + * @throws ApiError + */ + public static prListSubscriptions({ + workspaceName, + repoName, + number, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * PR number (unique within the repository) + */ + number: number, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/prs/{number}/subscriptions', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'number': number, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required`, + 404: `PR not found`, + 500: `Internal server error`, + }, + }); + } +} diff --git a/src/client/services/ReposService.ts b/src/client/services/ReposService.ts new file mode 100644 index 0000000..2c54f9b --- /dev/null +++ b/src/client/services/ReposService.ts @@ -0,0 +1,3039 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { AcceptInvitationParams } from '../models/AcceptInvitationParams'; +import type { AddDeployKeyParams } from '../models/AddDeployKeyParams'; +import type { AddRepoMemberParams } from '../models/AddRepoMemberParams'; +import type { ApiResponse_BranchMergeCheck } from '../models/ApiResponse_BranchMergeCheck'; +import type { ApiResponse_BranchProtectionRule } from '../models/ApiResponse_BranchProtectionRule'; +import type { ApiResponse_Option_BranchProtectionRule } from '../models/ApiResponse_Option_BranchProtectionRule'; +import type { ApiResponse_Repo } from '../models/ApiResponse_Repo'; +import type { ApiResponse_RepoBranch } from '../models/ApiResponse_RepoBranch'; +import type { ApiResponse_RepoCommitComment } from '../models/ApiResponse_RepoCommitComment'; +import type { ApiResponse_RepoCommitStatus } from '../models/ApiResponse_RepoCommitStatus'; +import type { ApiResponse_RepoDeployKey } from '../models/ApiResponse_RepoDeployKey'; +import type { ApiResponse_RepoInvitation } from '../models/ApiResponse_RepoInvitation'; +import type { ApiResponse_RepoMember } from '../models/ApiResponse_RepoMember'; +import type { ApiResponse_RepoRelease } from '../models/ApiResponse_RepoRelease'; +import type { ApiResponse_RepoStats } from '../models/ApiResponse_RepoStats'; +import type { ApiResponse_RepoTag } from '../models/ApiResponse_RepoTag'; +import type { ApiResponse_RepoWebhook } from '../models/ApiResponse_RepoWebhook'; +import type { ApiResponse_String } from '../models/ApiResponse_String'; +import type { ApiResponse_Vec_BranchProtectionRule } from '../models/ApiResponse_Vec_BranchProtectionRule'; +import type { ApiResponse_Vec_Repo } from '../models/ApiResponse_Vec_Repo'; +import type { ApiResponse_Vec_RepoBranch } from '../models/ApiResponse_Vec_RepoBranch'; +import type { ApiResponse_Vec_RepoCommitComment } from '../models/ApiResponse_Vec_RepoCommitComment'; +import type { ApiResponse_Vec_RepoCommitStatus } from '../models/ApiResponse_Vec_RepoCommitStatus'; +import type { ApiResponse_Vec_RepoDeployKey } from '../models/ApiResponse_Vec_RepoDeployKey'; +import type { ApiResponse_Vec_RepoFork } from '../models/ApiResponse_Vec_RepoFork'; +import type { ApiResponse_Vec_RepoInvitation } from '../models/ApiResponse_Vec_RepoInvitation'; +import type { ApiResponse_Vec_RepoMember } from '../models/ApiResponse_Vec_RepoMember'; +import type { ApiResponse_Vec_RepoRelease } from '../models/ApiResponse_Vec_RepoRelease'; +import type { ApiResponse_Vec_RepoStar } from '../models/ApiResponse_Vec_RepoStar'; +import type { ApiResponse_Vec_RepoTag } from '../models/ApiResponse_Vec_RepoTag'; +import type { ApiResponse_Vec_RepoWatch } from '../models/ApiResponse_Vec_RepoWatch'; +import type { ApiResponse_Vec_RepoWebhook } from '../models/ApiResponse_Vec_RepoWebhook'; +import type { CreateBranchParams } from '../models/CreateBranchParams'; +import type { CreateCommitCommentParams } from '../models/CreateCommitCommentParams'; +import type { CreateCommitStatusParams } from '../models/CreateCommitStatusParams'; +import type { CreateProtectionRuleParams } from '../models/CreateProtectionRuleParams'; +import type { CreateReleaseParams } from '../models/CreateReleaseParams'; +import type { CreateRepoInvitationParams } from '../models/CreateRepoInvitationParams'; +import type { CreateRepoParams } from '../models/CreateRepoParams'; +import type { CreateTagParams } from '../models/CreateTagParams'; +import type { CreateWebhookParams } from '../models/CreateWebhookParams'; +import type { ForkRepoParams } from '../models/ForkRepoParams'; +import type { SetBranchProtectionParams } from '../models/SetBranchProtectionParams'; +import type { TransferOwnerParams } from '../models/TransferOwnerParams'; +import type { UpdateProtectionRuleParams } from '../models/UpdateProtectionRuleParams'; +import type { UpdateReleaseParams } from '../models/UpdateReleaseParams'; +import type { UpdateRepoMemberRoleParams } from '../models/UpdateRepoMemberRoleParams'; +import type { UpdateRepoParams } from '../models/UpdateRepoParams'; +import type { UpdateWebhookParams } from '../models/UpdateWebhookParams'; +import type { WatchParams } from '../models/WatchParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class ReposService { + /** + * Accept a repository invitation + * Accepts a pending repository invitation using the token received via email. + * Requires authentication and a verified email address matching the invitation. + * + * Effects: + * - User is added as a repository member with the invited role + * - User is added to the workspace if not already a member + * - Invitation is marked as accepted + * + * Returns the accepted invitation with full metadata. + * @returns ApiResponse_RepoInvitation Invitation accepted successfully. User is now a member of the repository. + * @throws ApiError + */ + public static repoAcceptInvitation({ + requestBody, + }: { + /** + * Invitation acceptance parameters + */ + requestBody: AcceptInvitationParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/repos/invitations/accept', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid or expired token, or email doesn't match invitation`, + 401: `Authentication required or session expired`, + 404: `Invitation not found`, + 409: `User is already a member of this repository`, + 500: `Internal server error`, + }, + }); + } + /** + * List repositories in a workspace + * Returns a paginated list of repositories that the current user has access to within the specified workspace. + * Access is determined by: + * - Public repositories: accessible to all authenticated users + * - Private repositories: accessible only to repository members and workspace owners + * - Internal repositories: accessible to all workspace members + * + * The results are sorted by creation date in descending order (newest first). + * @returns ApiResponse_Vec_Repo Repositories listed successfully. Returns an array of repository objects with metadata. + * @throws ApiError + */ + public static repoList({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Maximum number of repositories to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of repositories to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this workspace`, + 404: `Workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a new repository + * Creates a new Git repository within the specified workspace. The authenticated user becomes the repository owner. + * + * Requirements: + * - User must have at least Member role in the workspace + * - Repository name must be unique within the workspace + * - Name must be 1-100 characters, alphanumeric, hyphens, underscores, and dots allowed + * + * Optional parameters: + * - description: Repository description (max 500 characters) + * - visibility: "public", "private", or "internal" (defaults to workspace setting) + * - default_branch: Default branch name (defaults to "main") + * + * Returns the created repository with full metadata. + * @returns ApiResponse_Repo Repository created successfully. Returns the newly created repository with full metadata. + * @throws ApiError + */ + public static repoCreate({ + workspaceName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository creation parameters + */ + requestBody: CreateRepoParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: name too long, invalid characters, or invalid visibility`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to create repositories in this workspace`, + 404: `Workspace not found`, + 409: `Repository with this name already exists in the workspace`, + 500: `Internal server error or Git initialization failed`, + }, + }); + } + /** + * Get a specific repository + * Returns detailed information about a specific repository identified by workspace and repository name. + * Access is determined by repository visibility: + * - Public repositories: accessible to all authenticated users + * - Private repositories: accessible only to repository members and workspace owners + * - Internal repositories: accessible to all workspace members + * + * Returns 404 if the repository doesn't exist or the user lacks access permissions. + * @returns ApiResponse_Repo Repository retrieved successfully. Returns complete repository metadata including visibility, default branch, creation date, and statistics. + * @throws ApiError + */ + public static repoGet({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository not found or access denied`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a repository + * Updates repository metadata such as name, description, visibility, and default branch. + * Requires Admin role or higher in the repository. + * + * Update rules: + * - name: Must be unique within workspace if changed (1-100 characters) + * - description: Max 500 characters + * - visibility: "public", "private", or "internal" (workspace owners can restrict public repos) + * - default_branch: Must be an existing branch name + * + * All fields are optional; only provided fields are updated. + * Returns the updated repository with full metadata. + * @returns ApiResponse_Repo Repository updated successfully. Returns the updated repository with full metadata. + * @throws ApiError + */ + public static repoUpdate({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Repository update parameters (all fields optional) + */ + requestBody: UpdateRepoParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: name too long, invalid characters, default branch doesn't exist, or public repos disabled`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 409: `Repository name already exists in the workspace`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a repository + * Permanently deletes a repository and all associated data including: + * - Git repository and all commits + * - Branches, tags, and releases + * - Issues, pull requests, and comments + * - Webhooks, deploy keys, and protection rules + * - Stars, watches, and forks + * + * Requires Owner role in the repository. This action is irreversible. + * + * Returns success message on completion. + * @returns ApiResponse_String Repository deleted successfully. All repository data has been permanently removed. + * @throws ApiError + */ + public static repoDelete({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Owner role)`, + 404: `Repository or workspace not found`, + 500: `Internal server error or Git deletion failed`, + }, + }); + } + /** + * Archive a repository + * Marks a repository as archived, making it read-only. All write operations (push, create issues, etc.) are disabled. + * Requires Owner role in the repository. + * + * Effects: + * - Repository status changes to "archived" + * - All write operations are blocked + * - Repository remains visible based on its visibility setting + * - Can be unarchived later by repository owners + * + * Returns success message on completion. + * @returns ApiResponse_String Repository archived successfully. Repository is now read-only. + * @throws ApiError + */ + public static repoArchive({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/archive', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Owner role)`, + 404: `Repository or workspace not found`, + 409: `Repository is already archived`, + 500: `Internal server error`, + }, + }); + } + /** + * List branches in a repository + * Returns a paginated list of all branches in the repository, sorted by name alphabetically. + * Includes branch metadata such as: + * - Branch name and commit SHA + * - Protected status + * - Default branch flag + * - Last push information + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoBranch Branches listed successfully. Returns an array of branch objects with metadata. + * @throws ApiError + */ + public static repoListBranches({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of branches to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of branches to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a new branch + * Creates a new branch in the repository based on an existing commit or branch. + * Requires Write role or higher in the repository. + * + * Parameters: + * - name: Branch name (1-100 characters, alphanumeric, hyphens, underscores, dots, slashes allowed) + * - from: Source branch name or commit SHA to branch from (defaults to default branch) + * + * Returns the created branch with metadata including the initial commit SHA. + * @returns ApiResponse_RepoBranch Branch created successfully. Returns the newly created branch with metadata. + * @throws ApiError + */ + public static repoCreateBranch({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Branch creation parameters + */ + requestBody: CreateBranchParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: name too long, invalid characters, or source branch/commit doesn't exist`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or source branch/commit not found`, + 409: `Branch with this name already exists`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * Delete a branch + * Permanently deletes a branch from the repository. The default branch cannot be deleted. + * Requires Write role or higher in the repository. + * + * Effects: + * - Branch is permanently removed from the repository + * - All commits exclusive to this branch remain accessible via their SHA + * - Open pull requests targeting this branch will be closed + * + * Returns success message on completion. + * @returns ApiResponse_String Branch deleted successfully. + * @throws ApiError + */ + public static repoDeleteBranch({ + workspaceName, + repoName, + branchId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Branch ID (UUID) + */ + branchId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{branch_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'branch_id': branchId, + }, + errors: { + 400: `Cannot delete the default branch`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or branch not found`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * Set default branch + * Sets a branch as the repository's default branch. The default branch is used for: + * - New pull requests base branch + * - Repository cloning + * - New branch creation base + * + * Requires Admin role or higher in the repository. + * + * Returns success message on completion. + * @returns ApiResponse_String Default branch set successfully. All new operations will use this branch as the default. + * @throws ApiError + */ + public static repoSetDefaultBranch({ + workspaceName, + repoName, + branchId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Branch ID (UUID) + */ + branchId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{branch_id}/default', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'branch_id': branchId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or branch not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Set branch protection + * Enables or disables protection for a specific branch. + * Requires Admin role or higher in the repository. + * + * Effects: + * - When enabled: prevents force pushes and branch deletion + * - When disabled: allows force pushes and branch deletion + * + * Returns success message on completion. + * @returns ApiResponse_String Branch protection rules set successfully. + * @throws ApiError + */ + public static repoSetBranchProtection({ + workspaceName, + repoName, + branchId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Branch ID (UUID) + */ + branchId: string, + /** + * Branch protection parameters + */ + requestBody: SetBranchProtectionParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{branch_id}/protection', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'branch_id': branchId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: negative approvals count or conflicting protection settings`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or branch not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Check if a branch meets merge requirements + * @returns ApiResponse_BranchMergeCheck Merge check completed successfully + * @throws ApiError + */ + public static checkBranchMerge({ + workspaceName, + repoName, + targetBranch, + prNumber, + }: { + workspaceName: string, + repoName: string, + targetBranch: string, + prNumber: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/branches/{target_branch}/merge-check', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'target_branch': targetBranch, + }, + query: { + 'pr_number': prNumber, + }, + errors: { + 401: `Unauthorized`, + 403: `Forbidden`, + 404: `Repository or pull request not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a commit comment + * Creates a new comment on a specific commit. Comments can be general or inline (attached to a specific file and line). + * Requires Write role or higher in the repository. + * + * Parameters: + * - commit_sha: Commit SHA to comment on (must exist in repository) + * - body: Comment body in markdown format (1-10000 characters) + * - path: File path for inline comments (optional) + * - line: Line number for inline comments (optional, requires path) + * + * Effects: + * - Comment is attached to the commit + * - Comment author receives notifications for replies + * - Inline comments appear in code review interfaces + * + * Returns the created comment with metadata including ID and timestamps. + * @returns ApiResponse_RepoCommitComment Commit comment created successfully. Returns the newly created comment with metadata. + * @throws ApiError + */ + public static repoCreateCommitComment({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Commit comment creation parameters + */ + requestBody: CreateCommitCommentParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/comments', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: body too long, line without path, or commit doesn't exist`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, commit, or file path not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Resolve a commit comment + * Marks a commit comment as resolved, indicating the issue has been addressed. + * Requires Write role or higher in the repository. + * + * Effects: + * - Comment is marked as resolved + * - Resolved comments are visually distinguished in code review interfaces + * - Resolution is recorded with the resolver's user ID and timestamp + * + * Returns success message on completion. + * @returns ApiResponse_String Commit comment resolved successfully. + * @throws ApiError + */ + public static repoResolveCommitComment({ + workspaceName, + repoName, + commentId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Comment ID (UUID) + */ + commentId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/comments/{comment_id}/resolve', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'comment_id': commentId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or comment not found`, + 409: `Comment is already resolved`, + 500: `Internal server error`, + }, + }); + } + /** + * List commit comments + * Returns a paginated list of all comments on a specific commit, sorted by creation date (newest first). + * Includes comment metadata such as: + * - Comment body in markdown format + * - Author information + * - File path and line number (for inline comments) + * - Resolved status + * - Creation and update timestamps + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoCommitComment Commit comments listed successfully. Returns an array of comment objects with metadata. + * @throws ApiError + */ + public static repoListCommitComments({ + workspaceName, + repoName, + pushCommitId, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Push commit ID (UUID) + */ + pushCommitId: string, + /** + * Maximum number of comments to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of comments to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/commits/{commit_sha}/comments', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'push_commit_id': pushCommitId, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository, workspace, or commit not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List commit statuses + * Returns a paginated list of all status checks for a specific commit, sorted by creation date (newest first). + * Includes status metadata such as: + * - Status state (pending, success, failure, error) + * - Context name (e.g., "ci/build", "ci/test") + * - Description and target URL + * - Creator information + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoCommitStatus Commit statuses listed successfully. Returns an array of status objects with metadata. + * @throws ApiError + */ + public static repoListCommitStatuses({ + workspaceName, + repoName, + pushCommitId, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Push commit ID (UUID) + */ + pushCommitId: string, + /** + * Maximum number of statuses to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of statuses to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/commits/{commit_sha}/statuses', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'push_commit_id': pushCommitId, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository, workspace, or commit not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List deploy keys in a repository + * Returns a paginated list of all deploy keys in the repository, sorted by creation date (newest first). + * Includes deploy key metadata such as: + * - Key title and fingerprint + * - Read-only status + * - Creator information + * - Creation date and last used date + * + * Requires Admin role or higher in the repository. + * @returns ApiResponse_Vec_RepoDeployKey Deploy keys listed successfully. Returns an array of deploy key objects with metadata. + * @throws ApiError + */ + public static repoListDeployKeys({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of deploy keys to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of deploy keys to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/deploy-keys', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Add a deploy key to a repository + * Adds an SSH public key for automated deployments and CI/CD access to the repository. + * Requires Admin role or higher in the repository. + * + * Parameters: + * - title: Human-readable name for the deploy key (1-100 characters) + * - key: SSH public key in OpenSSH format (e.g., "ssh-rsa AAAA...") + * - read_only: Whether the key has read-only access (default: true) + * + * Effects: + * - Deploy key is added to the repository + * - Key can be used for Git operations (clone, fetch, push if not read-only) + * - Key fingerprint is calculated and stored + * + * Returns the created deploy key with metadata including fingerprint. + * @returns ApiResponse_RepoDeployKey Deploy key added successfully. Returns the newly created deploy key with metadata. + * @throws ApiError + */ + public static repoAddDeployKey({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Deploy key addition parameters + */ + requestBody: AddDeployKeyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/deploy-keys', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: title too long or invalid SSH key format`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 409: `Deploy key with this fingerprint already exists`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a deploy key from a repository + * Removes an SSH deploy key from the repository, revoking its access. + * Requires Admin role or higher in the repository. + * + * Effects: + * - Deploy key is permanently removed from the repository + * - Key can no longer be used for Git operations + * - Automated systems using this key will lose access + * + * Returns success message on completion. + * @returns ApiResponse_String Deploy key deleted successfully. + * @throws ApiError + */ + public static repoDeleteDeployKey({ + workspaceName, + repoName, + keyId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Deploy key ID (UUID) + */ + keyId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/deploy-keys/{key_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'key_id': keyId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or deploy key not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Fork a repository + * Creates a copy of the repository in the specified workspace or the current user's workspace. + * Requires read access to the source repository and write access to the target workspace. + * + * Effects: + * - Creates a new repository with all branches, tags, and commit history + * - Establishes a parent-child relationship between source and fork + * - Fork is initially set to private visibility + * - Current user becomes the owner of the fork + * + * Returns the created fork repository with full metadata. + * @returns ApiResponse_Repo Repository forked successfully. Returns the newly created fork with full metadata. + * @throws ApiError + */ + public static repoFork({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Fork parameters (all fields optional) + */ + requestBody: ForkRepoParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/fork', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: target name conflicts or invalid characters`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to fork or create in target workspace`, + 404: `Source repository or target workspace not found`, + 409: `Fork with this name already exists in target workspace`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * List forks of a repository + * Returns a paginated list of all repositories that have been forked from this repository. + * Includes fork metadata such as: + * - Fork repository information + * - Fork owner and workspace + * - Fork creation date + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoFork Forks listed successfully. Returns an array of fork objects with metadata. + * @throws ApiError + */ + public static repoListForks({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of forks to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of forks to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/forks', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List repository invitations + * Returns a paginated list of all pending invitations for the repository, sorted by creation date (newest first). + * Includes invitation metadata such as: + * - Invitee email address + * - Invited role + * - Inviter information + * - Expiration date + * - Creation date + * + * Requires Admin role or higher in the repository. + * @returns ApiResponse_Vec_RepoInvitation Invitations listed successfully. Returns an array of invitation objects with metadata. + * @throws ApiError + */ + public static repoListInvitations({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of invitations to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of invitations to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/invitations', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a repository invitation + * Sends an invitation email to a user to join the repository with a specific role. + * Requires Admin role or higher in the repository. + * + * Parameters: + * - email: Email address of the invitee (must be a valid email) + * - role: Role to assign when invitation is accepted ("read", "write", "admin") + * + * Effects: + * - Invitation email is sent to the invitee + * - Invitation expires after 7 days + * - Invitee must have a verified email to accept + * + * Returns the created invitation with metadata including expiration date. + * @returns ApiResponse_RepoInvitation Invitation created successfully. Returns the newly created invitation with metadata. + * @throws ApiError + */ + public static repoCreateInvitation({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Invitation creation parameters + */ + requestBody: CreateRepoInvitationParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/invitations', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid email format or invalid role`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 409: `User is already a member or has a pending invitation`, + 500: `Internal server error or email sending failed`, + }, + }); + } + /** + * Revoke a repository invitation + * Cancels a pending invitation, preventing the invitee from accepting it. + * Requires Admin role or higher in the repository. + * + * Effects: + * - Invitation is marked as revoked + * - Invitee can no longer accept the invitation + * - Invitation email link becomes invalid + * + * Returns success message on completion. + * @returns ApiResponse_String Invitation revoked successfully. + * @throws ApiError + */ + public static repoRevokeInvitation({ + workspaceName, + repoName, + invitationId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Invitation ID (UUID) + */ + invitationId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/invitations/{invitation_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'invitation_id': invitationId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or invitation not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Leave a repository + * Removes the current user's access to the repository. + * Requires the user to be a member of the repository. + * + * Restrictions: + * - Repository owner cannot leave (use transfer_owner instead) + * + * Effects: + * - User loses all access to the repository + * - User is removed from all repository activities + * + * Returns success message on completion. + * @returns ApiResponse_String Left repository successfully. + * @throws ApiError + */ + public static repoLeave({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/leave', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 400: `Repository owner cannot leave the repository`, + 401: `Authentication required or session expired`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List repository members + * Returns a paginated list of all members with access to the repository, sorted by join date (oldest first). + * Includes member metadata such as: + * - User information (ID, username, display name) + * - Role (owner, admin, write, read) + * - Join date and last activity + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoMember Members listed successfully. Returns an array of member objects with user information and roles. + * @throws ApiError + */ + public static repoListMembers({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of members to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of members to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Add a member to a repository + * Grants a user access to the repository with a specific role. + * Requires Admin role or higher in the repository. + * + * Requirements: + * - User must exist in the system + * - User must be a member of the workspace + * - Role must be one of: "read", "write", "admin" (cannot assign "owner") + * + * Returns the created member record with user information and role. + * @returns ApiResponse_RepoMember Member added successfully. Returns the newly created member record with user information and role. + * @throws ApiError + */ + public static repoAddMember({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Member addition parameters + */ + requestBody: AddRepoMemberParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid role or user doesn't exist`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or user not found`, + 409: `User is already a member of this repository`, + 500: `Internal server error`, + }, + }); + } + /** + * Remove a member from a repository + * Revokes a user's access to the repository. + * Requires Admin role or higher in the repository. + * + * Restrictions: + * - Cannot remove the repository owner (use transfer_owner instead) + * - Cannot remove members with equal or higher role than your own + * + * Effects: + * - Member loses all access to the repository + * - Member is removed from all repository activities + * + * Returns success message on completion. + * @returns ApiResponse_String Member removed successfully. + * @throws ApiError + */ + public static repoRemoveMember({ + workspaceName, + repoName, + memberId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Member ID (UUID) + */ + memberId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members/{member_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'member_id': memberId, + }, + errors: { + 400: `Cannot remove the repository owner or member with higher role`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or member not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a member's role in a repository + * Changes the access level of an existing repository member. + * Requires Admin role or higher in the repository. + * + * Role restrictions: + * - Cannot change the owner's role (use transfer_owner instead) + * - Cannot assign "owner" role (use transfer_owner instead) + * - Can only assign roles equal to or lower than your own + * - Valid roles: "read", "write", "admin" + * + * Returns the updated member record with new role information. + * @returns ApiResponse_RepoMember Member role updated successfully. Returns the updated member record with new role. + * @throws ApiError + */ + public static repoUpdateMemberRole({ + workspaceName, + repoName, + memberId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Member ID (UUID) + */ + memberId: string, + /** + * Role update parameters + */ + requestBody: UpdateRepoMemberRoleParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/members/{member_id}/role', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'member_id': memberId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid role or attempting to change owner role`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or member not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List branch protection rules in a repository + * Returns a paginated list of all branch protection rules in the repository, sorted by pattern alphabetically. + * Includes protection rule metadata such as: + * - Branch name pattern (supports wildcards like "feature*") + * - Required approvals count + * - Required status checks + * - Restrictions on pushes and deletions + * - Creator information + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_BranchProtectionRule Protection rules listed successfully. Returns an array of protection rule objects with metadata. + * @throws ApiError + */ + public static repoListProtectionRules({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of protection rules to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of protection rules to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a branch protection rule + * Creates a new branch protection rule that enforces policies on matching branches. + * Requires Admin role or higher in the repository. + * + * Parameters: + * - pattern: Branch name pattern (supports wildcards like "feature*", "release**") + * - required_approvals: Number of required approvals before merging (0-10) + * - require_status_checks: Whether status checks must pass + * - required_status_checks: List of required status check contexts + * - restrict_pushes: Restrict who can push to matching branches + * - allow_force_pushes: Allow force pushes (only if restrict_pushes is false) + * - allow_deletions: Allow branch deletion (only if restrict_pushes is false) + * + * Returns the created protection rule with full configuration. + * @returns ApiResponse_BranchProtectionRule Protection rule created successfully. Returns the newly created protection rule with full configuration. + * @throws ApiError + */ + public static repoCreateProtectionRule({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Protection rule creation parameters + */ + requestBody: CreateProtectionRuleParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid pattern, negative approvals count, or conflicting settings`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 409: `Protection rule with this pattern already exists`, + 500: `Internal server error`, + }, + }); + } + /** + * Get a specific branch protection rule + * Returns detailed information about a specific branch protection rule. + * Requires read access to the repository. + * + * Returns the complete protection rule with all configuration details including: + * - Branch name pattern + * - Required approvals and status checks + * - Push and deletion restrictions + * - Creator information and timestamps + * @returns ApiResponse_BranchProtectionRule Protection rule retrieved successfully. Returns complete protection rule with all configuration details. + * @throws ApiError + */ + public static repoGetProtectionRule({ + workspaceName, + repoName, + ruleId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Protection rule ID (UUID) + */ + ruleId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules/{rule_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'rule_id': ruleId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository, workspace, or protection rule not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a branch protection rule + * Updates an existing branch protection rule's configuration. + * Requires Admin role or higher in the repository. + * + * Updatable fields: + * - required_approvals: Number of required approvals before merging (0-10) + * - require_status_checks: Whether status checks must pass + * - required_status_checks: List of required status check contexts + * - restrict_pushes: Restrict who can push to matching branches + * - allow_force_pushes: Allow force pushes (only if restrict_pushes is false) + * - allow_deletions: Allow branch deletion (only if restrict_pushes is false) + * + * All fields are optional; only provided fields are updated. + * Returns the updated protection rule with full configuration. + * @returns ApiResponse_BranchProtectionRule Protection rule updated successfully. Returns the updated protection rule with full configuration. + * @throws ApiError + */ + public static repoUpdateProtectionRule({ + workspaceName, + repoName, + ruleId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Protection rule ID (UUID) + */ + ruleId: string, + /** + * Protection rule update parameters (all fields optional) + */ + requestBody: UpdateProtectionRuleParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules/{rule_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'rule_id': ruleId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: negative approvals count or conflicting settings`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or protection rule not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a branch protection rule + * Permanently removes a branch protection rule from the repository. + * Requires Admin role or higher in the repository. + * + * Effects: + * - Protection rule is permanently removed + * - Branches matching the pattern are no longer protected by this rule + * - Pushes and merges to matching branches are no longer restricted + * + * Returns success message on completion. + * @returns ApiResponse_String Protection rule deleted successfully. + * @throws ApiError + */ + public static repoDeleteProtectionRule({ + workspaceName, + repoName, + ruleId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Protection rule ID (UUID) + */ + ruleId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection-rules/{rule_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'rule_id': ruleId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or protection rule not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Match a branch name against protection rules + * Checks if a branch name matches any protection rule in the repository. + * Requires read access to the repository. + * + * Returns the matching protection rule if found, or null if no rules match. + * Useful for determining what protections apply to a specific branch before performing operations. + * @returns ApiResponse_Option_BranchProtectionRule Branch protection check completed. Returns matching protection rule or null if no rules match. + * @throws ApiError + */ + public static repoMatchProtection({ + workspaceName, + repoName, + branchName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Branch name to check against protection rules + */ + branchName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/protection/match', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'branch_name': branchName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List releases in a repository + * Returns a paginated list of all releases in the repository, sorted by creation date (newest first). + * Includes release metadata such as: + * - Release name and tag + * - Release notes and description + * - Author and creation date + * - Draft and prerelease status + * - Asset download URLs + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoRelease Releases listed successfully. Returns an array of release objects with metadata. + * @throws ApiError + */ + public static repoListReleases({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of releases to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of releases to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/releases', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a new release + * Creates a new release in the repository, optionally creating a tag if it doesn't exist. + * Requires Write role or higher in the repository. + * + * Parameters: + * - tag_name: Tag name for the release (will be created if it doesn't exist) + * - name: Release name/title (required) + * - body: Release notes in markdown format (optional, max 10000 characters) + * - draft: Whether this is a draft release (default: false) + * - prerelease: Whether this is a prerelease (default: false) + * - target_commitish: Commit SHA or branch name to tag (defaults to default branch) + * + * Returns the created release with metadata including download URLs for assets. + * @returns ApiResponse_RepoRelease Release created successfully. Returns the newly created release with metadata. + * @throws ApiError + */ + public static repoCreateRelease({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Release creation parameters + */ + requestBody: CreateReleaseParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/releases', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: name too long, invalid tag name, or target commit doesn't exist`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or target commit not found`, + 409: `Release with this tag already exists`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * Update a release + * Updates release metadata such as name, description, draft status, and prerelease flag. + * Requires Write role or higher in the repository. + * + * Updatable fields: + * - name: Release name/title (max 255 characters) + * - body: Release notes in markdown format (max 10000 characters) + * - draft: Whether this is a draft release + * - prerelease: Whether this is a prerelease + * + * All fields are optional; only provided fields are updated. + * Returns the updated release with full metadata. + * @returns ApiResponse_RepoRelease Release updated successfully. Returns the updated release with full metadata. + * @throws ApiError + */ + public static repoUpdateRelease({ + workspaceName, + repoName, + releaseId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Release ID (UUID) + */ + releaseId: string, + /** + * Release update parameters (all fields optional) + */ + requestBody: UpdateReleaseParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/releases/{release_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'release_id': releaseId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: name too long or invalid characters`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or release not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a release + * Permanently deletes a release from the repository. The associated tag and commits are not deleted. + * Requires Write role or higher in the repository. + * + * Effects: + * - Release metadata is permanently removed + * - Release assets are deleted + * - The associated tag remains in the repository + * - The tagged commits remain in the repository history + * + * Returns success message on completion. + * @returns ApiResponse_String Release deleted successfully. The release and its assets have been permanently removed. + * @throws ApiError + */ + public static repoDeleteRelease({ + workspaceName, + repoName, + releaseId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Release ID (UUID) + */ + releaseId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/releases/{release_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'release_id': releaseId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or release not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Star a repository + * Adds the current user to the repository's stargazers list. + * Requires read access to the repository. + * + * Effects: + * - User is added to the repository's stargazers + * - Repository star count is incremented + * - User can unstar later to remove themselves + * + * Returns success message on completion. Idempotent operation (starring an already starred repository is a no-op). + * @returns ApiResponse_String Repository starred successfully. + * @throws ApiError + */ + public static repoStar({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/star', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Unstar a repository + * Removes the current user from the repository's stargazers list. + * Requires read access to the repository. + * + * Effects: + * - User is removed from the repository's stargazers + * - Repository star count is decremented + * + * Returns success message on completion. Idempotent operation (unstarring an unstarred repository is a no-op). + * @returns ApiResponse_String Repository unstarred successfully. + * @throws ApiError + */ + public static repoUnstar({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/star', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List stargazers of a repository + * Returns a paginated list of users who have starred the repository, sorted by star date (newest first). + * Includes stargazer metadata such as: + * - User information (ID, username, display name) + * - Star timestamp + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoStar Stargazers listed successfully. Returns an array of stargazer objects with user information. + * @throws ApiError + */ + public static repoListStargazers({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of stargazers to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of stargazers to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/stargazers', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Get repository statistics + * Returns comprehensive statistics for a repository including: + * - Star count and watcher count + * - Fork count + * - Branch and tag counts + * - Commit count + * - Release count + * - Open issues and pull requests count + * - Storage size and bandwidth usage + * - Last push timestamp + * + * Requires read access to the repository. + * @returns ApiResponse_RepoStats Repository statistics retrieved successfully. Returns comprehensive repository metrics. + * @throws ApiError + */ + public static repoGetStats({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/stats', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Refresh repository statistics + * Recalculates and updates repository statistics from the current state of the repository. + * Requires Admin role or higher in the repository. + * + * Effects: + * - Recalculates star, watcher, and fork counts + * - Recalculates branch and tag counts + * - Recalculates commit count from Git history + * - Recalculates release count + * - Recalculates open issues and pull requests count + * - Updates storage size and bandwidth usage + * - Updates last push timestamp + * + * Returns the refreshed statistics with all updated values. + * @returns ApiResponse_RepoStats Repository statistics refreshed successfully. Returns all updated metrics. + * @throws ApiError + */ + public static repoRefreshStats({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/stats/refresh', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * Create a commit status + * Creates a new status check for a specific commit, typically used by CI/CD systems. + * Requires Write role or higher in the repository. + * + * Parameters: + * - commit_sha: Commit SHA to attach the status to (must exist in repository) + * - state: Status state ("pending", "success", "failure", "error") + * - context: Status context name (e.g., "ci/build", "ci/test") - must be unique per commit + * - description: Human-readable description of the status (optional, max 500 characters) + * - target_url: URL with detailed information about the status (optional) + * + * Effects: + * - Status is attached to the commit + * - Can be used by branch protection rules to enforce status checks + * - Multiple statuses can exist for the same commit with different contexts + * + * Returns the created status with metadata including ID and timestamps. + * @returns ApiResponse_RepoCommitStatus Commit status created successfully. Returns the newly created status with metadata. + * @throws ApiError + */ + public static repoCreateCommitStatus({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Commit status creation parameters + */ + requestBody: CreateCommitStatusParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/statuses', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid state, context too long, or commit doesn't exist`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or commit not found`, + 409: `Status with this context already exists for this commit (use update instead)`, + 500: `Internal server error`, + }, + }); + } + /** + * Sync a fork with upstream + * Synchronizes a forked repository with the latest changes from the parent repository. + * Requires Write role or higher in the fork repository. + * + * Effects: + * - Merges changes from the parent repository's default branch into the fork + * - Creates a merge commit if there are conflicts + * - Updates the fork's commit history + * + * Only works on repositories that are forks (have a parent repository). + * Returns success message on completion. + * @returns ApiResponse_String Fork synchronized successfully with upstream repository. + * @throws ApiError + */ + public static repoSyncFork({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/sync', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 400: `Repository is not a fork or has merge conflicts that require manual resolution`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or parent repository not found`, + 409: `Merge conflicts detected; manual resolution required`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * List tags in a repository + * Returns a paginated list of all tags in the repository, sorted by creation date (newest first). + * Includes tag metadata such as: + * - Tag name and commit SHA + * - Tagger information and timestamp + * - Tag message (for annotated tags) + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoTag Tags listed successfully. Returns an array of tag objects with metadata. + * @throws ApiError + */ + public static repoListTags({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of tags to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of tags to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/tags', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a new tag + * Creates a new tag in the repository pointing to a specific commit or branch. + * Requires Write role or higher in the repository. + * + * Parameters: + * - name: Tag name (1-100 characters, typically follows semantic versioning like v1.0.0) + * - target: Commit SHA or branch name to tag (defaults to HEAD of default branch) + * - message: Optional tag message for annotated tags + * + * Returns the created tag with metadata including the commit SHA. + * @returns ApiResponse_RepoTag Tag created successfully. Returns the newly created tag with metadata. + * @throws ApiError + */ + public static repoCreateTag({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Tag creation parameters + */ + requestBody: CreateTagParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/tags', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: name too long, invalid characters, or target commit/branch doesn't exist`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or target commit/branch not found`, + 409: `Tag with this name already exists`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * Delete a tag + * Permanently deletes a tag from the repository. The tagged commit remains accessible via its SHA. + * Requires Write role or higher in the repository. + * + * Effects: + * - Tag is permanently removed from the repository + * - The tagged commit remains in the repository history + * - Releases associated with this tag are not automatically deleted + * + * Returns success message on completion. + * @returns ApiResponse_String Tag deleted successfully. + * @throws ApiError + */ + public static repoDeleteTag({ + workspaceName, + repoName, + tagId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Tag ID (UUID) + */ + tagId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/tags/{tag_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'tag_id': tagId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Write role or higher)`, + 404: `Repository, workspace, or tag not found`, + 500: `Internal server error or Git operation failed`, + }, + }); + } + /** + * Transfer repository ownership + * Transfers ownership of a repository to another user. The new owner must be an existing repository member. + * Requires Owner role in the repository. + * + * Effects: + * - Current owner becomes an Admin + * - New owner gains full Owner permissions + * - Repository URL remains unchanged + * - All forks and stars are preserved + * + * Returns the updated repository with new owner information. + * @returns ApiResponse_Repo Ownership transferred successfully. Returns the repository with updated owner information. + * @throws ApiError + */ + public static repoTransferOwner({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Transfer ownership parameters + */ + requestBody: TransferOwnerParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/transfer-owner', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid new owner ID or user is not a repository member`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Owner role)`, + 404: `Repository, workspace, or new owner not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Unarchive a repository + * Restores an archived repository to active status, re-enabling all write operations. + * Requires Owner role in the repository. + * + * Effects: + * - Repository status changes from "archived" to "active" + * - All write operations are re-enabled + * - Previous visibility and settings are preserved + * + * Returns success message on completion. + * @returns ApiResponse_String Repository unarchived successfully. All write operations are now enabled. + * @throws ApiError + */ + public static repoUnarchive({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/unarchive', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Owner role)`, + 404: `Repository or workspace not found`, + 409: `Repository is not archived`, + 500: `Internal server error`, + }, + }); + } + /** + * Watch a repository + * Subscribes the current user to notifications for repository activities. + * Requires read access to the repository. + * + * Watch levels: + * - "participating": Notifications for issues/PRs you're involved in + * - "watching": All repository notifications (default) + * - "ignoring": No notifications + * + * Returns success message on completion. Idempotent operation. + * @returns ApiResponse_String Repository watch subscription updated successfully. + * @throws ApiError + */ + public static repoWatch({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Watch parameters (level is optional, defaults to 'watching') + */ + requestBody: WatchParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/watch', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid watch level (must be 'participating', 'watching', or 'ignoring')`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Unwatch a repository + * Removes the current user's watch subscription from the repository. + * Requires read access to the repository. + * + * Effects: + * - User is removed from the repository's watchers + * - User will no longer receive notifications for repository activities + * + * Returns success message on completion. Idempotent operation (unwatching an unwatched repository is a no-op). + * @returns ApiResponse_String Repository watch subscription removed successfully. + * @throws ApiError + */ + public static repoUnwatch({ + workspaceName, + repoName, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/watch', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List watchers of a repository + * Returns a paginated list of users who are watching the repository, sorted by watch date (newest first). + * Includes watcher metadata such as: + * - User information (ID, username, display name) + * - Watch level (participating, watching, or ignoring) + * - Watch timestamp + * + * Requires read access to the repository. + * @returns ApiResponse_Vec_RepoWatch Watchers listed successfully. Returns an array of watcher objects with user information and watch level. + * @throws ApiError + */ + public static repoListWatchers({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of watchers to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of watchers to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/watchers', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List webhooks in a repository + * Returns a paginated list of all webhooks in the repository, sorted by creation date (newest first). + * Includes webhook metadata such as: + * - Webhook URL and events + * - Active status + * - Last delivery status and timestamp + * - Creator information + * + * Requires Admin role or higher in the repository. + * @returns ApiResponse_Vec_RepoWebhook Webhooks listed successfully. Returns an array of webhook objects with metadata. + * @throws ApiError + */ + public static repoListWebhooks({ + workspaceName, + repoName, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Maximum number of webhooks to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of webhooks to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/webhooks', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a webhook in a repository + * Creates a new webhook that receives HTTP POST notifications for repository events. + * Requires Admin role or higher in the repository. + * + * Parameters: + * - url: Webhook endpoint URL (must be HTTPS in production) + * - events: List of events to subscribe to (e.g., "push", "pull_request", "issue") + * - secret: Optional secret for webhook signature verification + * - active: Whether the webhook is active (default: true) + * + * Effects: + * - Webhook is created and starts receiving events + * - Webhook deliveries are logged and can be retried on failure + * + * Returns the created webhook with metadata including ID and configuration. + * @returns ApiResponse_RepoWebhook Webhook created successfully. Returns the newly created webhook with metadata. + * @throws ApiError + */ + public static repoCreateWebhook({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Webhook creation parameters + */ + requestBody: CreateWebhookParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/webhooks', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid URL format or empty events list`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a webhook in a repository + * Updates webhook configuration such as URL, events, secret, and active status. + * Requires Admin role or higher in the repository. + * + * Updatable fields: + * - url: Webhook endpoint URL (must be HTTPS in production) + * - events: List of events to subscribe to + * - secret: Secret for webhook signature verification + * - active: Whether the webhook is active + * + * All fields are optional; only provided fields are updated. + * Returns the updated webhook with full metadata. + * @returns ApiResponse_RepoWebhook Webhook updated successfully. Returns the updated webhook with full metadata. + * @throws ApiError + */ + public static repoUpdateWebhook({ + workspaceName, + repoName, + webhookId, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Webhook ID (UUID) + */ + webhookId: string, + /** + * Webhook update parameters (all fields optional) + */ + requestBody: UpdateWebhookParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/webhooks/{webhook_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'webhook_id': webhookId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid URL format or empty events list`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or webhook not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a webhook from a repository + * Permanently removes a webhook from the repository, stopping all event notifications. + * Requires Admin role or higher in the repository. + * + * Effects: + * - Webhook is permanently removed from the repository + * - Webhook stops receiving event notifications immediately + * - Webhook delivery history is deleted + * + * Returns success message on completion. + * @returns ApiResponse_String Webhook deleted successfully. + * @throws ApiError + */ + public static repoDeleteWebhook({ + workspaceName, + repoName, + webhookId, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Webhook ID (UUID) + */ + webhookId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/webhooks/{webhook_id}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'webhook_id': webhookId, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role or higher)`, + 404: `Repository, workspace, or webhook not found`, + 500: `Internal server error`, + }, + }); + } +} diff --git a/src/client/services/UserService.ts b/src/client/services/UserService.ts new file mode 100644 index 0000000..6169cb6 --- /dev/null +++ b/src/client/services/UserService.ts @@ -0,0 +1,835 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { AddGpgKeyParams } from '../models/AddGpgKeyParams'; +import type { AddSshKeyParams } from '../models/AddSshKeyParams'; +import type { ApiResponse_String } from '../models/ApiResponse_String'; +import type { ApiResponse_User } from '../models/ApiResponse_User'; +import type { ApiResponse_UserAppearance } from '../models/ApiResponse_UserAppearance'; +import type { ApiResponse_UserAvatarResponse } from '../models/ApiResponse_UserAvatarResponse'; +import type { ApiResponse_UserGpgKey } from '../models/ApiResponse_UserGpgKey'; +import type { ApiResponse_UserNotifySetting } from '../models/ApiResponse_UserNotifySetting'; +import type { ApiResponse_UserProfile } from '../models/ApiResponse_UserProfile'; +import type { ApiResponse_UserSshKey } from '../models/ApiResponse_UserSshKey'; +import type { ApiResponse_Vec_UserDevice } from '../models/ApiResponse_Vec_UserDevice'; +import type { ApiResponse_Vec_UserGpgKey } from '../models/ApiResponse_Vec_UserGpgKey'; +import type { ApiResponse_Vec_UserOAuthInfo } from '../models/ApiResponse_Vec_UserOAuthInfo'; +import type { ApiResponse_Vec_UserPersonalAccessTokenInfo } from '../models/ApiResponse_Vec_UserPersonalAccessTokenInfo'; +import type { ApiResponse_Vec_UserSecurityLog } from '../models/ApiResponse_Vec_UserSecurityLog'; +import type { ApiResponse_Vec_UserSessionInfo } from '../models/ApiResponse_Vec_UserSessionInfo'; +import type { ApiResponse_Vec_UserSshKey } from '../models/ApiResponse_Vec_UserSshKey'; +import type { UpdateUserAccountParams } from '../models/UpdateUserAccountParams'; +import type { UpdateUserAppearanceParams } from '../models/UpdateUserAppearanceParams'; +import type { UpdateUserNotifySettingParams } from '../models/UpdateUserNotifySettingParams'; +import type { UpdateUserProfileParams } from '../models/UpdateUserProfileParams'; +import type { UploadUserAvatarParams } from '../models/UploadUserAvatarParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class UserService { + /** + * Get current user account + * Returns the authenticated user's account information including: + * - Username, display name, and bio + * - Avatar URL + * - Account status and role + * - Last login and creation timestamps + * + * Requires authentication. + * @returns ApiResponse_User Account retrieved successfully. Returns user account with all metadata. + * @throws ApiError + */ + public static userGetAccount(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/account', + errors: { + 401: `Authentication required or session expired`, + 404: `User not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update user account + * Updates the authenticated user's account settings. + * Requires authentication. + * + * Updatable fields: + * - username: New username (must be unique across the platform) + * - display_name: Human-readable display name + * - bio: Short biography text + * - visibility: Profile visibility ("public", "private", or "internal") + * + * All fields are optional; only provided fields are updated. + * Returns the updated user account with all metadata. + * @returns ApiResponse_User Account updated successfully. Returns updated user account with all metadata. + * @throws ApiError + */ + public static userUpdateAccount({ + requestBody, + }: { + /** + * Account update parameters (all fields optional) + */ + requestBody: UpdateUserAccountParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/user/account', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty username or unsupported visibility value`, + 401: `Authentication required or session expired`, + 404: `User not found`, + 409: `Username already taken`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete user account + * Permanently deletes the authenticated user's account and all associated data. + * Requires authentication. + * + * Preconditions: + * - User must transfer or delete all owned workspaces + * - User must transfer or delete all owned repositories + * + * Effects: + * - All user data is removed (SSH keys, GPG keys, sessions, devices, OAuth links, etc.) + * - User is soft-deleted (marked as deleted, not physically removed) + * - Current session is cleared + * - Account cannot be recovered + * + * Returns success message on completion. + * @returns ApiResponse_String Account deleted successfully. All user data has been removed. + * @throws ApiError + */ + public static userDeleteAccount(): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/account', + errors: { + 400: `Cannot delete: user still owns workspaces or repositories`, + 401: `Authentication required or session expired`, + 404: `User not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Upload user avatar + * Uploads a new avatar image for the authenticated user. + * Requires authentication. + * + * Parameters: + * - data: Raw avatar image bytes (PNG, JPEG, or WebP, max 5MB) + * - content_type: MIME type of the image (e.g., "image/png") + * - file_name: Original file name (used to infer file extension) + * + * Effects: + * - Avatar image is stored in S3-compatible object storage + * - Previous avatar is deleted from storage + * - User's avatar URL is updated + * + * Returns the new avatar URL and storage key. + * @returns ApiResponse_UserAvatarResponse Avatar uploaded successfully. Returns the new avatar URL and storage key. + * @throws ApiError + */ + public static userUploadAvatar({ + requestBody, + }: { + /** + * Avatar upload parameters + */ + requestBody: UploadUserAvatarParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/user/account/avatar', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: unsupported file type or image too large`, + 401: `Authentication required or session expired`, + 404: `User not found`, + 500: `Internal server error or S3 storage failure`, + }, + }); + } + /** + * Get user appearance settings + * Returns the authenticated user's UI appearance preferences including: + * - Theme (system, light, dark) + * - Color scheme (system, light, dark) + * - Density (compact, comfortable) + * - Font size (small, medium, large) + * - Editor theme + * - Markdown preview toggle + * - Reduced motion toggle + * + * If no settings exist, defaults are created automatically. + * Requires authentication. + * @returns ApiResponse_UserAppearance Appearance settings retrieved successfully. Returns all UI preference settings. + * @throws ApiError + */ + public static userGetAppearance(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/appearance', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Update user appearance settings + * Updates the authenticated user's UI appearance preferences. + * Requires authentication. + * + * Updatable fields: + * - theme: UI theme ("system", "light", "dark") + * - color_scheme: Color scheme ("system", "light", "dark") + * - density: UI density ("compact", "comfortable") + * - font_size: Font size ("small", "medium", "large") + * - editor_theme: Code editor theme name + * - markdown_preview: Enable/disable markdown live preview + * - reduced_motion: Enable/disable reduced motion + * + * All fields are optional; only provided fields are updated. + * Returns the updated appearance settings. + * @returns ApiResponse_UserAppearance Appearance settings updated successfully. Returns all updated UI preferences. + * @throws ApiError + */ + public static userUpdateAppearance({ + requestBody, + }: { + /** + * Appearance update parameters (all fields optional) + */ + requestBody: UpdateUserAppearanceParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/user/appearance', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: unsupported theme, color scheme, density, or font size`, + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * List user GPG keys + * Returns all GPG public keys registered by the authenticated user. + * Keys are sorted by creation date (newest first). + * Only non-revoked keys are included. + * Requires authentication. + * @returns ApiResponse_Vec_UserGpgKey GPG keys listed successfully. Returns array of GPG key objects with fingerprints and metadata. + * @throws ApiError + */ + public static userListGpgKeys(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/keys/gpg', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Add a GPG key + * Registers a new GPG public key for the authenticated user. + * Requires authentication. + * + * Parameters: + * - public_key: ASCII-armored PGP public key block + * - key_id: Short key ID or full fingerprint + * - primary_email: Primary email associated with the key (optional) + * - expires_at: Optional expiration date for the key + * + * Effects: + * - Key fingerprint is computed and stored + * - Key is immediately usable for verifying signed commits/tags + * - Duplicate keys are rejected + * + * Returns the created GPG key with fingerprint and metadata. + * @returns ApiResponse_UserGpgKey GPG key added successfully. Returns the created key with fingerprint and metadata. + * @throws ApiError + */ + public static userAddGpgKey({ + requestBody, + }: { + /** + * GPG key creation parameters + */ + requestBody: AddGpgKeyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/user/keys/gpg', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid PGP key format`, + 401: `Authentication required or session expired`, + 409: `GPG key with this fingerprint already exists`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a GPG key + * Revokes a GPG key belonging to the authenticated user. + * Requires authentication. + * + * Effects: + * - Key is marked as revoked (soft-deleted) + * - Key can no longer be used for verifying commits/tags + * - Revoked keys remain visible in key history + * + * Returns success message on completion. + * @returns ApiResponse_String GPG key revoked successfully. + * @throws ApiError + */ + public static userDeleteGpgKey({ + keyId, + }: { + /** + * GPG key ID (UUID) + */ + keyId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/keys/gpg/{key_id}', + path: { + 'key_id': keyId, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `GPG key not found or already revoked`, + 500: `Internal server error`, + }, + }); + } + /** + * List user SSH keys + * Returns all SSH public keys registered by the authenticated user. + * Keys are sorted by creation date (newest first). + * Only non-revoked keys are included. + * Requires authentication. + * @returns ApiResponse_Vec_UserSshKey SSH keys listed successfully. Returns array of SSH key objects with fingerprints and metadata. + * @throws ApiError + */ + public static userListSshKeys(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/keys/ssh', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Add an SSH key + * Registers a new SSH public key for the authenticated user. + * Requires authentication. + * + * Parameters: + * - title: Human-readable label for the key (e.g., "Work Laptop") + * - public_key: SSH public key string (supports RSA, Ed25519, ECDSA, DSA) + * - key_type: Key algorithm type ("rsa", "ed25519", "ecdsa", "dsa") + * - expires_at: Optional expiration date for the key + * + * Effects: + * - Key fingerprint is computed and stored + * - Key is immediately usable for Git operations + * - Duplicate keys are rejected + * + * Returns the created SSH key with fingerprint and metadata. + * @returns ApiResponse_UserSshKey SSH key added successfully. Returns the created key with fingerprint and metadata. + * @throws ApiError + */ + public static userAddSshKey({ + requestBody, + }: { + /** + * SSH key creation parameters + */ + requestBody: AddSshKeyParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/user/keys/ssh', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: invalid key format, unsupported key type, or type mismatch`, + 401: `Authentication required or session expired`, + 409: `SSH key with this fingerprint already exists`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete an SSH key + * Revokes an SSH key belonging to the authenticated user. + * Requires authentication. + * + * Effects: + * - Key is marked as revoked (soft-deleted) + * - Key can no longer be used for Git operations + * - Revoked keys remain visible in key history + * + * Returns success message on completion. + * @returns ApiResponse_String SSH key revoked successfully. + * @throws ApiError + */ + public static userDeleteSshKey({ + keyId, + }: { + /** + * SSH key ID (UUID) + */ + keyId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/keys/ssh/{key_id}', + path: { + 'key_id': keyId, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `SSH key not found or already revoked`, + 500: `Internal server error`, + }, + }); + } + /** + * Get user notification settings + * Returns the authenticated user's notification preferences including: + * - Email notification toggle + * - Web push notification toggle + * - Mention notification toggle + * - Review notification toggle + * - Security notification toggle + * - Marketing email toggle + * - Digest frequency (realtime, daily, weekly, off) + * + * If no settings exist, defaults are created automatically. + * Requires authentication. + * @returns ApiResponse_UserNotifySetting Notification settings retrieved successfully. Returns all notification preferences. + * @throws ApiError + */ + public static userGetNotifications(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/notifications', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Update user notification settings + * Updates the authenticated user's notification preferences. + * Requires authentication. + * + * Updatable fields: + * - email_notifications: Enable/disable email notifications + * - web_notifications: Enable/disable web push notifications + * - mention_notifications: Enable/disable @mention notifications + * - review_notifications: Enable/disable code review notifications + * - security_notifications: Enable/disable security notifications + * - marketing_emails: Enable/disable marketing emails + * - digest_frequency: Digest email frequency ("realtime", "daily", "weekly", "off") + * + * All fields are optional; only provided fields are updated. + * Returns the updated notification settings. + * @returns ApiResponse_UserNotifySetting Notification settings updated successfully. Returns all updated preferences. + * @throws ApiError + */ + public static userUpdateNotifications({ + requestBody, + }: { + /** + * Notification settings update parameters (all fields optional) + */ + requestBody: UpdateUserNotifySettingParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/user/notifications', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: unsupported digest frequency`, + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Get user profile + * Returns the authenticated user's public profile information including: + * - Full name and company + * - Location and website URL + * - Twitter username + * - Timezone and language + * - Profile README + * + * If no profile exists, an empty profile is created automatically. + * Requires authentication. + * @returns ApiResponse_UserProfile Profile retrieved successfully. Returns all profile fields. + * @throws ApiError + */ + public static userGetProfile(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/profile', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Update user profile + * Updates the authenticated user's public profile information. + * Requires authentication. + * + * Updatable fields: + * - full_name: Full legal name or display name + * - company: Organization or company name + * - location: Geographic location (e.g., "San Francisco, CA") + * - website_url: Personal or company website URL + * - twitter_username: Twitter/X handle + * - timezone: IANA timezone identifier (e.g., "America/New_York") + * - language: Preferred language code (e.g., "en", "zh-CN") + * - profile_readme: Markdown content for profile README + * + * All fields are optional; only provided fields are updated. + * Returns the updated profile with all fields. + * @returns ApiResponse_UserProfile Profile updated successfully. Returns all updated profile fields. + * @throws ApiError + */ + public static userUpdateProfile({ + requestBody, + }: { + /** + * Profile update parameters (all fields optional) + */ + requestBody: UpdateUserProfileParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/user/profile', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters`, + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * List user devices + * Returns all registered devices for the authenticated user. + * Devices are sorted by last seen time (most recent first). + * Includes device metadata such as name, type, fingerprint, and trust status. + * Requires authentication. + * @returns ApiResponse_Vec_UserDevice Devices listed successfully. Returns array of device objects with metadata. + * @throws ApiError + */ + public static userListDevices(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/security/devices', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a user device + * Removes a registered device from the authenticated user's trusted devices. + * Requires authentication. + * + * Effects: + * - Device is permanently removed + * - Device can no longer be used for 2FA bypass + * - Device will need to be re-registered and verified if needed + * + * Returns success message on completion. + * @returns ApiResponse_String Device deleted successfully. + * @throws ApiError + */ + public static userDeleteDevice({ + deviceId, + }: { + /** + * Device ID (UUID) + */ + deviceId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/security/devices/{device_id}', + path: { + 'device_id': deviceId, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `Device not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List security logs + * Returns a paginated list of security events for the authenticated user. + * Entries are sorted by creation date (newest first). + * Includes event types, descriptions, IP addresses, and user agents. + * Useful for auditing account activity and detecting suspicious behavior. + * Requires authentication. + * @returns ApiResponse_Vec_UserSecurityLog Security logs listed successfully. Returns array of security event entries with metadata. + * @throws ApiError + */ + public static userListSecurityLogs({ + limit, + offset, + }: { + /** + * Maximum number of log entries to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of log entries to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/security/logs', + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * List OAuth accounts + * Returns all linked OAuth/third-party login accounts for the authenticated user. + * Accounts are sorted by link date (most recent first). + * Includes provider information, usernames, and token expiry status. + * Requires authentication. + * @returns ApiResponse_Vec_UserOAuthInfo OAuth accounts listed successfully. Returns array of linked OAuth accounts with provider details. + * @throws ApiError + */ + public static userListOAuthAccounts(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/security/oauth', + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Unlink an OAuth account + * Removes a linked OAuth/third-party login account from the authenticated user. + * Requires authentication. + * + * Preconditions: + * - User must have at least one remaining login method (password or another OAuth account) + * + * Effects: + * - OAuth account link is permanently removed + * - User can no longer log in with this OAuth provider unless re-linked + * + * Returns success message on completion. + * @returns ApiResponse_String OAuth account unlinked successfully. + * @throws ApiError + */ + public static userUnlinkOAuth({ + oauthId, + }: { + /** + * OAuth account ID (UUID) + */ + oauthId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/security/oauth/{oauth_id}', + path: { + 'oauth_id': oauthId, + }, + errors: { + 400: `Cannot unlink: this is the last login method (set a password first)`, + 401: `Authentication required or session expired`, + 404: `OAuth account not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List user sessions + * Returns a paginated list of all active and recently-expired sessions for the authenticated user. + * Sessions are sorted by last activity (most recent first). + * Includes session metadata such as IP address, user agent, and expiration time. + * Requires authentication. + * @returns ApiResponse_Vec_UserSessionInfo Sessions listed successfully. Returns array of session objects with metadata. + * @throws ApiError + */ + public static userListSessions({ + limit, + offset, + }: { + /** + * Maximum number of sessions to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of sessions to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/security/sessions', + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Revoke a user session + * Immediately terminates a specific session belonging to the authenticated user. + * Requires authentication. + * + * Effects: + * - Session is marked as revoked + * - Session can no longer be used for authentication + * - Active connections using this session are disconnected + * + * Returns success message on completion. + * @returns ApiResponse_String Session revoked successfully. + * @throws ApiError + */ + public static userRevokeSession({ + sessionId, + }: { + /** + * Session ID (UUID) + */ + sessionId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/security/sessions/{session_id}', + path: { + 'session_id': sessionId, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `Session not found or already revoked`, + 500: `Internal server error`, + }, + }); + } + /** + * List personal access tokens + * Returns a paginated list of all personal access tokens (PATs) for the authenticated user. + * Tokens are sorted by creation date (newest first). + * Includes token names, scopes, last used timestamps, and expiry status. + * Note: Token values are never returned after creation for security reasons. + * Requires authentication. + * @returns ApiResponse_Vec_UserPersonalAccessTokenInfo Personal access tokens listed successfully. Returns array of token metadata objects (token values are never exposed). + * @throws ApiError + */ + public static userListTokens({ + limit, + offset, + }: { + /** + * Maximum number of tokens to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of tokens to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/user/security/tokens', + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 500: `Internal server error`, + }, + }); + } + /** + * Revoke a personal access token + * Immediately revokes a personal access token belonging to the authenticated user. + * Requires authentication. + * + * Effects: + * - Token is marked as revoked and can no longer be used + * - All API calls using this token will fail with 401 Unauthorized + * - Revoked tokens remain visible in token list for audit purposes + * + * Returns success message on completion. + * @returns ApiResponse_String Personal access token revoked successfully. + * @throws ApiError + */ + public static userRevokeToken({ + tokenId, + }: { + /** + * Token ID (UUID) + */ + tokenId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/user/security/tokens/{token_id}', + path: { + 'token_id': tokenId, + }, + errors: { + 401: `Authentication required or session expired`, + 404: `Token not found or already revoked`, + 500: `Internal server error`, + }, + }); + } +} diff --git a/src/client/services/WikiService.ts b/src/client/services/WikiService.ts new file mode 100644 index 0000000..0a39be3 --- /dev/null +++ b/src/client/services/WikiService.ts @@ -0,0 +1,488 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { ApiResponse_String } from '../models/ApiResponse_String'; +import type { ApiResponse_Vec_WikiPage } from '../models/ApiResponse_Vec_WikiPage'; +import type { ApiResponse_Vec_WikiPageRevision } from '../models/ApiResponse_Vec_WikiPageRevision'; +import type { ApiResponse_WikiCompareResult } from '../models/ApiResponse_WikiCompareResult'; +import type { ApiResponse_WikiPage } from '../models/ApiResponse_WikiPage'; +import type { ApiResponse_WikiPageRevision } from '../models/ApiResponse_WikiPageRevision'; +import type { CreateWikiPageParams } from '../models/CreateWikiPageParams'; +import type { UpdateWikiPageParams } from '../models/UpdateWikiPageParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class WikiService { + /** + * List wiki pages in a repository + * Returns a paginated list of all wiki pages in the repository. + * Supports searching by title or content. + * Requires read access to the repository. + * @returns ApiResponse_Vec_WikiPage Wiki pages listed successfully. + * @throws ApiError + */ + public static wikiListPages({ + workspaceName, + repoName, + search, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Search query to filter pages by title or content + */ + search?: string | null, + /** + * Maximum number of pages to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of pages to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + query: { + 'search': search, + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Create a wiki page + * Creates a new wiki page in the repository. + * Requires at least Member role in the repository. + * + * The title is automatically converted to a URL-friendly slug. + * An initial revision is created with the page. + * + * Returns the created wiki page with full metadata. + * @returns ApiResponse_WikiPage Wiki page created successfully. + * @throws ApiError + */ + public static wikiCreatePage({ + workspaceName, + repoName, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page creation parameters + */ + requestBody: CreateWikiPageParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters: empty title or content`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Repository or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Get a wiki page + * Retrieves a single wiki page by its slug. + * Requires read access to the repository. + * @returns ApiResponse_WikiPage Wiki page retrieved successfully. + * @throws ApiError + */ + public static wikiGetPage({ + workspaceName, + repoName, + slug, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Wiki page, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Update a wiki page + * Updates an existing wiki page's title, content, or both. + * Requires at least Member role in the repository. + * + * A new revision is automatically created with the changes. + * Optionally include a commit message to describe the changes. + * + * All fields are optional; only provided fields are updated. + * Returns the updated wiki page. + * @returns ApiResponse_WikiPage Wiki page updated successfully. + * @throws ApiError + */ + public static wikiUpdatePage({ + workspaceName, + repoName, + slug, + requestBody, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + /** + * Wiki page update parameters (all fields optional) + */ + requestBody: UpdateWikiPageParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid parameters`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Wiki page, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Delete a wiki page + * Soft-deletes a wiki page. The page is marked as deleted but remains in the database. + * Requires Admin role in the repository. + * + * The page and its revision history are preserved but no longer accessible via the API. + * Returns success message on completion. + * @returns ApiResponse_String Wiki page deleted successfully. + * @throws ApiError + */ + public static wikiDeletePage({ + workspaceName, + repoName, + slug, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Admin role)`, + 404: `Wiki page, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Compare two wiki page revisions + * Compares two versions of a wiki page and returns both revisions. + * Requires read access to the repository. + * + * Returns the old and new revisions for client-side diff computation. + * The client can compute the diff between the two content snapshots. + * @returns ApiResponse_WikiCompareResult Revisions compared successfully. Returns old and new revision objects. + * @throws ApiError + */ + public static wikiCompareRevisions({ + workspaceName, + repoName, + slug, + oldVersion, + newVersion, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + /** + * Older version number to compare from + */ + oldVersion: number, + /** + * Newer version number to compare to + */ + newVersion: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/compare', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + }, + query: { + 'old_version': oldVersion, + 'new_version': newVersion, + }, + errors: { + 400: `Invalid version numbers`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Wiki page, revisions, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Revert a wiki page to a historical version + * Reverts the wiki page to a specified historical version. + * Requires at least Member role in the repository. + * + * This creates a new revision with the content from the target version. + * The current content is not lost; it remains in the revision history. + * + * Returns the updated wiki page with the reverted content. + * @returns ApiResponse_WikiPage Wiki page reverted successfully. + * @throws ApiError + */ + public static wikiRevertPage({ + workspaceName, + repoName, + slug, + version, + commitMessage, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + /** + * Target version number to revert to + */ + version: number, + /** + * Optional commit message describing the revert + */ + commitMessage?: string | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/revert', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + }, + query: { + 'version': version, + 'commit_message': commitMessage, + }, + errors: { + 400: `Invalid version number`, + 401: `Authentication required or session expired`, + 403: `Insufficient permissions (requires Member role or higher)`, + 404: `Wiki page, revision, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * List wiki page revisions + * Returns a paginated list of all revisions for a wiki page, sorted by version (newest first). + * Requires read access to the repository. + * + * Each revision includes the full content snapshot at that version, + * the editor who made the change, and an optional commit message. + * @returns ApiResponse_Vec_WikiPageRevision Revisions listed successfully. + * @throws ApiError + */ + public static wikiListRevisions({ + workspaceName, + repoName, + slug, + limit, + offset, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + /** + * Maximum number of revisions to return (default: 50, max: 100) + */ + limit?: number | null, + /** + * Number of revisions to skip for pagination (default: 0) + */ + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/revisions', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Wiki page, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } + /** + * Get a specific wiki page revision + * Retrieves a specific revision of a wiki page by version number. + * Requires read access to the repository. + * + * Returns the full revision with content snapshot, editor, and commit message. + * @returns ApiResponse_WikiPageRevision Revision retrieved successfully. + * @throws ApiError + */ + public static wikiGetRevision({ + workspaceName, + repoName, + slug, + version, + }: { + /** + * Workspace name (unique identifier) + */ + workspaceName: string, + /** + * Repository name (unique within the workspace) + */ + repoName: string, + /** + * Wiki page slug (URL-friendly identifier) + */ + slug: string, + /** + * Revision version number + */ + version: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/repos/{repo_name}/wiki/{slug}/revisions/{version}', + path: { + 'workspace_name': workspaceName, + 'repo_name': repoName, + 'slug': slug, + 'version': version, + }, + errors: { + 401: `Authentication required or session expired`, + 403: `Insufficient permissions to access this repository`, + 404: `Wiki page, revision, repository, or workspace not found`, + 500: `Internal server error`, + }, + }); + } +} diff --git a/src/client/services/WorkspacesService.ts b/src/client/services/WorkspacesService.ts new file mode 100644 index 0000000..c0a7b90 --- /dev/null +++ b/src/client/services/WorkspacesService.ts @@ -0,0 +1,1451 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { AcceptInvitationRequest } from '../models/AcceptInvitationRequest'; +import type { AddDomainParams } from '../models/AddDomainParams'; +import type { AddMemberParams } from '../models/AddMemberParams'; +import type { ApiEmptyResponse } from '../models/ApiEmptyResponse'; +import type { ApiResponse_CreateInvitationResponse } from '../models/ApiResponse_CreateInvitationResponse'; +import type { ApiResponse_Vec_Workspace } from '../models/ApiResponse_Vec_Workspace'; +import type { ApiResponse_Vec_WorkspaceAuditLog } from '../models/ApiResponse_Vec_WorkspaceAuditLog'; +import type { ApiResponse_Vec_WorkspaceDomain } from '../models/ApiResponse_Vec_WorkspaceDomain'; +import type { ApiResponse_Vec_WorkspaceIntegration } from '../models/ApiResponse_Vec_WorkspaceIntegration'; +import type { ApiResponse_Vec_WorkspaceInvitation } from '../models/ApiResponse_Vec_WorkspaceInvitation'; +import type { ApiResponse_Vec_WorkspaceMember } from '../models/ApiResponse_Vec_WorkspaceMember'; +import type { ApiResponse_Vec_WorkspacePendingApproval } from '../models/ApiResponse_Vec_WorkspacePendingApproval'; +import type { ApiResponse_Vec_WorkspaceWebhook } from '../models/ApiResponse_Vec_WorkspaceWebhook'; +import type { ApiResponse_Workspace } from '../models/ApiResponse_Workspace'; +import type { ApiResponse_WorkspaceBilling } from '../models/ApiResponse_WorkspaceBilling'; +import type { ApiResponse_WorkspaceCustomBranding } from '../models/ApiResponse_WorkspaceCustomBranding'; +import type { ApiResponse_WorkspaceDomain } from '../models/ApiResponse_WorkspaceDomain'; +import type { ApiResponse_WorkspaceIntegration } from '../models/ApiResponse_WorkspaceIntegration'; +import type { ApiResponse_WorkspaceInvitation } from '../models/ApiResponse_WorkspaceInvitation'; +import type { ApiResponse_WorkspaceMember } from '../models/ApiResponse_WorkspaceMember'; +import type { ApiResponse_WorkspacePendingApproval } from '../models/ApiResponse_WorkspacePendingApproval'; +import type { ApiResponse_WorkspaceSettings } from '../models/ApiResponse_WorkspaceSettings'; +import type { ApiResponse_WorkspaceStats } from '../models/ApiResponse_WorkspaceStats'; +import type { ApiResponse_WorkspaceWebhook } from '../models/ApiResponse_WorkspaceWebhook'; +import type { CreateIntegrationParams } from '../models/CreateIntegrationParams'; +import type { CreateInvitationParams } from '../models/CreateInvitationParams'; +import type { CreateWebhookParams } from '../models/CreateWebhookParams'; +import type { CreateWorkspaceParams } from '../models/CreateWorkspaceParams'; +import type { RequestApprovalParams } from '../models/RequestApprovalParams'; +import type { ReviewApprovalRequest } from '../models/ReviewApprovalRequest'; +import type { TransferOwnerRequest } from '../models/TransferOwnerRequest'; +import type { UpdateBillingParams } from '../models/UpdateBillingParams'; +import type { UpdateBrandingParams } from '../models/UpdateBrandingParams'; +import type { UpdateIntegrationParams } from '../models/UpdateIntegrationParams'; +import type { UpdateMemberRoleParams } from '../models/UpdateMemberRoleParams'; +import type { UpdateWebhookParams } from '../models/UpdateWebhookParams'; +import type { UpdateWorkspaceParams } from '../models/UpdateWorkspaceParams'; +import type { UpdateWorkspaceSettingsParams } from '../models/UpdateWorkspaceSettingsParams'; +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; +export class WorkspacesService { + /** + * List accessible workspaces + * Return workspaces owned by, joined by, or publicly accessible to the current user. + * @returns ApiResponse_Vec_Workspace List of workspaces. + * @throws ApiError + */ + public static workspaceList({ + limit, + offset, + }: { + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces', + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Create a workspace + * Create a new workspace. The creator automatically becomes the owner. + * @returns ApiResponse_Workspace Workspace created. + * @throws ApiError + */ + public static workspaceCreate({ + requestBody, + }: { + /** + * Workspace creation parameters. + */ + requestBody: CreateWorkspaceParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Name is required or visibility is invalid.`, + 401: `Unauthenticated.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Accept an invitation + * Accept a workspace invitation using the token from the invitation email. The authenticated user's verified email must match the invited email. + * @returns ApiResponse_WorkspaceInvitation Invitation accepted and user added as a member. + * @throws ApiError + */ + public static workspaceAcceptInvitation({ + requestBody, + }: { + /** + * Invitation token. + */ + requestBody: AcceptInvitationRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/invitations/accept', + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid or expired invitation, or already a member.`, + 401: `Unauthenticated or email mismatch.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Get a workspace + * Return the workspace identified by name, subject to visibility checks. + * @returns ApiResponse_Workspace Workspace data. + * @throws ApiError + */ + public static workspaceGet({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated.`, + 404: `Workspace not found or not accessible.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Update a workspace + * Update workspace name, description, visibility, or default role. Requires admin role. + * @returns ApiResponse_Workspace Workspace updated. + * @throws ApiError + */ + public static workspaceUpdate({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Workspace update parameters — only included fields are changed. + */ + requestBody: UpdateWorkspaceParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Bad request — invalid visibility or default_role.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Delete a workspace + * Soft-delete a workspace. Requires owner role. + * @returns ApiEmptyResponse Workspace deleted. + * @throws ApiError + */ + public static workspaceDelete({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * List pending approvals + * Return pending approval requests for the workspace. Requires admin role. + * @returns ApiResponse_Vec_WorkspacePendingApproval List of pending approvals. + * @throws ApiError + */ + public static workspaceListApprovals({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/approvals', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Request an approval + * Submit a request for workspace admin approval. Readable by anyone with workspace access. + * @returns ApiResponse_WorkspacePendingApproval Approval request created. + * @throws ApiError + */ + public static workspaceRequestApproval({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Approval request type and optional reason. + */ + requestBody: RequestApprovalParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/approvals', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid request type.`, + 401: `Unauthenticated.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Review an approval request + * Approve or reject a pending approval request. Requires owner role. + * @returns ApiEmptyResponse Approval reviewed. + * @throws ApiError + */ + public static workspaceReviewApproval({ + workspaceName, + approvalId, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Approval record ID. + */ + approvalId: string, + /** + * Whether to approve or reject. + */ + requestBody: ReviewApprovalRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/approvals/{approval_id}', + path: { + 'workspace_name': workspaceName, + 'approval_id': approvalId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Approval not found or already reviewed.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Archive a workspace + * Archive a workspace. Requires owner role. All repos become read-only. + * @returns ApiEmptyResponse Workspace archived. + * @throws ApiError + */ + public static workspaceArchive({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/archive', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found or already archived.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Get audit logs + * Return recent audit log entries for the workspace. Requires admin role. + * @returns ApiResponse_Vec_WorkspaceAuditLog List of audit log entries. + * @throws ApiError + */ + public static workspaceAuditLogs({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/audit-logs', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Upload workspace avatar + * Upload an avatar image for a workspace. Requires admin role. Maximum size 5 MB. Supported: png, jpg, gif, webp. + * @returns ApiResponse_Workspace Avatar uploaded. + * @throws ApiError + */ + public static workspaceUploadAvatar({ + workspaceName, + requestBody, + contentType, + fileName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Raw image bytes. + */ + requestBody: Array, + /** + * MIME type of the uploaded image. + */ + contentType?: string, + /** + * Original file name for extension detection. + */ + fileName?: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/avatar', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'content_type': contentType, + 'file_name': fileName, + }, + body: requestBody, + mediaType: 'application/octet-stream', + errors: { + 400: `Unsupported image format or file too large.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Storage or database failure.`, + }, + }); + } + /** + * Get billing information + * Return billing information for a workspace. Requires owner role. + * @returns ApiResponse_WorkspaceBilling Billing information. + * @throws ApiError + */ + public static workspaceGetBilling({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/billing', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Update billing information + * Update billing plan, email, or seat count. Requires owner role. + * @returns ApiResponse_WorkspaceBilling Billing updated. + * @throws ApiError + */ + public static workspaceUpdateBilling({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Billing update parameters — only included fields are changed. + */ + requestBody: UpdateBillingParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/billing', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Get custom branding + * Return custom branding settings for a workspace. Requires admin role. + * @returns ApiResponse_WorkspaceCustomBranding Branding settings. + * @throws ApiError + */ + public static workspaceGetBranding({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/branding', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Update custom branding + * Update workspace custom branding including logo, favicon, colors, CSS, and support URL. Requires admin role. + * @returns ApiResponse_WorkspaceCustomBranding Branding updated. + * @throws ApiError + */ + public static workspaceUpdateBranding({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Branding update parameters — only included fields are changed. + */ + requestBody: UpdateBrandingParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/branding', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * List domains + * Return domains associated with the workspace. Requires admin role. + * @returns ApiResponse_Vec_WorkspaceDomain List of domains. + * @throws ApiError + */ + public static workspaceListDomains({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/domains', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Add a domain + * Add a domain for verification. The first domain added is auto-set as primary. Requires admin role. + * @returns ApiResponse_WorkspaceDomain Domain added (unverified). + * @throws ApiError + */ + public static workspaceAddDomain({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Domain name to add. + */ + requestBody: AddDomainParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/domains', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Domain is empty.`, + 401: `Unauthenticated or insufficient role.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Delete a domain + * Remove a domain from the workspace. Cannot delete the primary domain. Requires admin role. + * @returns ApiEmptyResponse Domain deleted. + * @throws ApiError + */ + public static workspaceDeleteDomain({ + workspaceName, + domainId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Domain record ID. + */ + domainId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/domains/{domain_id}', + path: { + 'workspace_name': workspaceName, + 'domain_id': domainId, + }, + errors: { + 400: `Cannot delete primary domain.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Domain not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Set primary domain + * Set a verified domain as the primary domain for the workspace. Requires owner role. + * @returns ApiEmptyResponse Primary domain set. + * @throws ApiError + */ + public static workspaceSetPrimaryDomain({ + workspaceName, + domainId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Domain record ID. + */ + domainId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/domains/{domain_id}/primary', + path: { + 'workspace_name': workspaceName, + 'domain_id': domainId, + }, + errors: { + 400: `Domain must be verified first.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Domain not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Verify a domain + * Mark a domain as verified. Requires admin role. + * @returns ApiEmptyResponse Domain verified. + * @throws ApiError + */ + public static workspaceVerifyDomain({ + workspaceName, + domainId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Domain record ID. + */ + domainId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/domains/{domain_id}/verify', + path: { + 'workspace_name': workspaceName, + 'domain_id': domainId, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Domain not found or already verified.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * List integrations + * Return integrations configured for the workspace. Requires admin role. + * @returns ApiResponse_Vec_WorkspaceIntegration List of integrations. + * @throws ApiError + */ + public static workspaceListIntegrations({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/integrations', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Create an integration + * Add a third-party integration to the workspace. Requires admin role. + * @returns ApiResponse_WorkspaceIntegration Integration created. + * @throws ApiError + */ + public static workspaceCreateIntegration({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Integration provider, name, config, and optional secret. + */ + requestBody: CreateIntegrationParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/integrations', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid provider or name is empty.`, + 401: `Unauthenticated or insufficient role.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Update an integration + * Update an integration's name, config, secret, or enabled state. Requires admin role. + * @returns ApiResponse_WorkspaceIntegration Integration updated. + * @throws ApiError + */ + public static workspaceUpdateIntegration({ + workspaceName, + integrationId, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Integration ID. + */ + integrationId: string, + /** + * Integration update parameters — only included fields are changed. + */ + requestBody: UpdateIntegrationParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/integrations/{integration_id}', + path: { + 'workspace_name': workspaceName, + 'integration_id': integrationId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Integration not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Delete an integration + * Remove an integration from the workspace. Requires admin role. + * @returns ApiEmptyResponse Integration deleted. + * @throws ApiError + */ + public static workspaceDeleteIntegration({ + workspaceName, + integrationId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Integration ID. + */ + integrationId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/integrations/{integration_id}', + path: { + 'workspace_name': workspaceName, + 'integration_id': integrationId, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Integration not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * List pending invitations + * Return pending (un-expired, un-revoked, un-accepted) invitations for a workspace. Requires admin role. + * @returns ApiResponse_Vec_WorkspaceInvitation List of invitations. + * @throws ApiError + */ + public static workspaceListInvitations({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/invitations', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Create an invitation + * Invite a user by email to join the workspace. An invitation email is sent. Requires admin role. + * @returns ApiResponse_CreateInvitationResponse Invitation created and email sent. + * @throws ApiError + */ + public static workspaceCreateInvitation({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Email and optional role. + */ + requestBody: CreateInvitationParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/invitations', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Email is empty, role is invalid, or invitation already exists.`, + 401: `Unauthenticated or insufficient role.`, + 500: `Database or email service failed.`, + }, + }); + } + /** + * Revoke an invitation + * Revoke a pending invitation so it can no longer be accepted. Requires admin role. + * @returns ApiEmptyResponse Invitation revoked. + * @throws ApiError + */ + public static workspaceRevokeInvitation({ + workspaceName, + invitationId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Invitation ID. + */ + invitationId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/invitations/{invitation_id}', + path: { + 'workspace_name': workspaceName, + 'invitation_id': invitationId, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Invitation not found or already used.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Leave a workspace + * Remove the current user from the workspace. The owner cannot leave; transfer ownership first. + * @returns ApiEmptyResponse Left the workspace. + * @throws ApiError + */ + public static workspaceLeave({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/leave', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 400: `Owner cannot leave.`, + 401: `Unauthenticated or not a member.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * List workspace members + * Return active members of a workspace. Viewable by anyone with read access. + * @returns ApiResponse_Vec_WorkspaceMember List of members. + * @throws ApiError + */ + public static workspaceListMembers({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/members', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or not readable.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Add a member + * Add a user to a workspace. Requires admin role. Cannot add members with role equal to or higher than the caller. + * @returns ApiResponse_WorkspaceMember Member added. + * @throws ApiError + */ + public static workspaceAddMember({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * User ID and optional role. + */ + requestBody: AddMemberParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/members', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Cannot add owner, invalid role, or member invites disabled.`, + 401: `Unauthenticated or insufficient role.`, + 409: `User is already a member.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Remove a member + * Remove a member from the workspace. Requires admin role. Cannot remove owner. + * @returns ApiEmptyResponse Member removed. + * @throws ApiError + */ + public static workspaceRemoveMember({ + workspaceName, + memberId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Member record ID. + */ + memberId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/members/{member_id}', + path: { + 'workspace_name': workspaceName, + 'member_id': memberId, + }, + errors: { + 400: `Cannot remove owner or member with equal/higher role.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Member not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Update a member's role + * Change the role of a workspace member. Requires admin role. Cannot change owner role; use transfer-owner instead. + * @returns ApiResponse_WorkspaceMember Member role updated. + * @throws ApiError + */ + public static workspaceUpdateMemberRole({ + workspaceName, + memberId, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Member record ID. + */ + memberId: string, + /** + * New role value. + */ + requestBody: UpdateMemberRoleParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/members/{member_id}/role', + path: { + 'workspace_name': workspaceName, + 'member_id': memberId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid role, cannot change owner, or insufficient role.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Member not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Get workspace settings + * Return workspace settings — readable by anyone with workspace access. + * @returns ApiResponse_WorkspaceSettings Workspace settings. + * @throws ApiError + */ + public static workspaceGetSettings({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/settings', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or not readable.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Update workspace settings + * Update workspace settings such as repo visibility defaults, feature toggles, and member invite permissions. Requires admin role. + * @returns ApiResponse_WorkspaceSettings Settings updated. + * @throws ApiError + */ + public static workspaceUpdateSettings({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Settings update parameters — only included fields are changed. + */ + requestBody: UpdateWorkspaceSettingsParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/settings', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Get workspace statistics + * Return workspace statistics including member, repository, issue, and pull request counts. Readable by anyone with workspace access. + * @returns ApiResponse_WorkspaceStats Workspace statistics. + * @throws ApiError + */ + public static workspaceGetStats({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/stats', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or not readable.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Refresh workspace statistics + * Recalculate workspace statistics by counting members, repos, issues, and PRs from live data. Requires admin role. + * @returns ApiResponse_WorkspaceStats Refreshed statistics. + * @throws ApiError + */ + public static workspaceRefreshStats({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/stats/refresh', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read or write failed.`, + }, + }); + } + /** + * Transfer workspace ownership + * Transfer workspace ownership to another active member. The current owner becomes admin. + * @returns ApiResponse_Workspace Ownership transferred. + * @throws ApiError + */ + public static workspaceTransferOwner({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * New owner user ID. + */ + requestBody: TransferOwnerRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/transfer-owner', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `New owner must be an active member and different from current owner.`, + 401: `Unauthenticated or insufficient role.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Unarchive a workspace + * Restore an archived workspace to active status. Requires owner role. + * @returns ApiEmptyResponse Workspace unarchived. + * @throws ApiError + */ + public static workspaceUnarchive({ + workspaceName, + }: { + /** + * Workspace name. + */ + workspaceName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/unarchive', + path: { + 'workspace_name': workspaceName, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Workspace not found or not archived.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * List webhooks + * Return webhooks configured for the workspace. Requires admin role. + * @returns ApiResponse_Vec_WorkspaceWebhook List of webhooks. + * @throws ApiError + */ + public static workspaceListWebhooks({ + workspaceName, + limit, + offset, + }: { + /** + * Workspace name. + */ + workspaceName: string, + limit?: number | null, + offset?: number | null, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/v1/workspaces/{workspace_name}/webhooks', + path: { + 'workspace_name': workspaceName, + }, + query: { + 'limit': limit, + 'offset': offset, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 500: `Database read failed.`, + }, + }); + } + /** + * Create a webhook + * Create a webhook for the workspace. Requires admin role. The URL must use HTTPS and cannot point to localhost or internal IPs. + * @returns ApiResponse_WorkspaceWebhook Webhook created. + * @throws ApiError + */ + public static workspaceCreateWebhook({ + workspaceName, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * HTTPS webhook URL, optional secret ciphertext, event types, and active flag. + */ + requestBody: CreateWebhookParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/v1/workspaces/{workspace_name}/webhooks', + path: { + 'workspace_name': workspaceName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid URL, missing events, or SSRF check failed.`, + 401: `Unauthenticated or insufficient role.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Update a webhook + * Update a webhook's URL, secret, events, or active state. Requires admin role. + * @returns ApiResponse_WorkspaceWebhook Webhook updated. + * @throws ApiError + */ + public static workspaceUpdateWebhook({ + workspaceName, + webhookId, + requestBody, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Webhook ID. + */ + webhookId: string, + /** + * Webhook update parameters — only included fields are changed. + */ + requestBody: UpdateWebhookParams, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/api/v1/workspaces/{workspace_name}/webhooks/{webhook_id}', + path: { + 'workspace_name': workspaceName, + 'webhook_id': webhookId, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Invalid URL.`, + 401: `Unauthenticated or insufficient role.`, + 404: `Webhook not found.`, + 500: `Database transaction failed.`, + }, + }); + } + /** + * Delete a webhook + * Remove a webhook from the workspace. Requires admin role. + * @returns ApiEmptyResponse Webhook deleted. + * @throws ApiError + */ + public static workspaceDeleteWebhook({ + workspaceName, + webhookId, + }: { + /** + * Workspace name. + */ + workspaceName: string, + /** + * Webhook ID. + */ + webhookId: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/v1/workspaces/{workspace_name}/webhooks/{webhook_id}', + path: { + 'workspace_name': workspaceName, + 'webhook_id': webhookId, + }, + errors: { + 401: `Unauthenticated or insufficient role.`, + 404: `Webhook not found.`, + 500: `Database transaction failed.`, + }, + }); + } +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..393a406 --- /dev/null +++ b/src/index.css @@ -0,0 +1,113 @@ +@import "tailwindcss"; + +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, 'Segoe UI', Roboto, sans-serif; + --heading: system-ui, 'Segoe UI', Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +body { + margin: 0; +} + +#root { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..0616c8d --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,38 @@ +/* @refresh reload */ +import { render } from 'solid-js/web'; +import { Router, Route } from '@solidjs/router'; +import { lazy, Suspense } from 'solid-js'; +import './index.css'; + +const Login = lazy(() => import('@/app/auth/pages/Login')); +const Register = lazy(() => import('@/app/auth/pages/Register')); +const ForgotPassword = lazy(() => import('@/app/auth/pages/ForgotPassword')); +const ResetPassword = lazy(() => import('@/app/auth/pages/ResetPassword')); + +function Home() { + return ( +
+

AppKS

+

Welcome to AppKS Platform

+
+ ); +} + +function LoadingFallback() { + return
Loading…
; +} + +render( + () => ( + + }> + + + + + + + + ), + document.getElementById('root')!, +); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..3a66e23 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "module": "esnext", + "lib": ["ES2023", "DOM"], + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "ignoreDeprecations": "6.0", + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "preserve", + "paths": { "@/*": ["./src/*"] }, + "baseUrl": ".", + + "jsxImportSource": "solid-js", + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..d3c52ea --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "module": "esnext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..1e41bb7 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite' +import solid from 'vite-plugin-solid' +import tailwindcss from '@tailwindcss/vite' +import { resolve } from 'path' + +export default defineConfig({ + plugins: [solid(), tailwindcss()], + resolve: { + alias: { '@': resolve(__dirname, 'src') }, + }, +})