feat(repo): migrate repo routes from channel_id to space_name URLs (stage 2)
- routes.rs: all 81 /repo/{channel_id}/{repo_id} prefixed routes -> /repos/{space_name}/{repo_id}
- 121 handlers: Path<(Uuid,Uuid)> -> Path<(String,Uuid)>, three-step lookup (lookup_space_by_name -> require_active_member -> channel_for_repo)
- lib/space: SpaceDb trait for cross-crate lookup; lookup/authz helpers genericized
- openapi.rs: register 30 previously missing handlers (extras), full 121 coverage
- openapi.json: channel_id occurrences 149 -> 91; fix space rename tests (single-conn sqlite + PRAGMA foreign_keys=OFF)
zhenyi committed
Modified lib/repo/handler/archive/get.rs lib/repo/handler/archive/get.rs +5 −2 View lib/repo/handler/archive/get.rs
@@ -12,7 +12,7 @@
1212
1313#[utoipa::path(
1414 get,
15 path = "/repo/{channel_id}/{repo_id}/archive/{archive_format}/{ref_name}",
15 path = "/repos/{space_name}/{repo_id}/archive/{archive_format}/{ref_name}",
1616 tag = "repo",
1717 params(ArchiveFormatQuery),
1818 responses((status = 200, description = "Download an archive")),
@@ -21,9 +21,12 @@
2121pub(crate) async fn handler(
2222 State(svc): State<RepoService>,
2323 AuthUser { claims }: AuthUser,
24 Path((_, repo_id, archive_format, ref_name)): Path<(Uuid, Uuid, String, String)>,
24 Path((space_name, repo_id, archive_format, ref_name)): Path<(String, Uuid, String, String)>,
2525 Query(q): Query<ArchiveFormatQuery>,
2626) -> RepoResult<Response> {
27 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
28 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
29 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2730 let bytes = svc
2831 .get_archive(claims.sub, repo_id, &archive_format, &ref_name, q)
2932 .await?;
Modified lib/repo/handler/branch/create.rs lib/repo/handler/branch/create.rs +5 −2 View lib/repo/handler/branch/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/branches",
13 path = "/repos/{space_name}/{repo_id}/branches",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateBranchOption>,
1616 responses((status = 201, description = "Create a branch", body = AppResponseData<BranchView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreateBranchOption>,
2424) -> RepoResult<AppResponseData<BranchView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_branch(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/branch/delete.rs lib/repo/handler/branch/delete.rs +5 −2 View lib/repo/handler/branch/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/branches/{branch_name}",
12 path = "/repos/{space_name}/{repo_id}/branches/{branch_name}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a branch")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, name)): Path<(Uuid, Uuid, String)>,
20 Path((space_name, repo_id, name)): Path<(String, Uuid, String)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_branch(claims.sub, repo_id, &name).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/branch/get.rs lib/repo/handler/branch/get.rs +5 −2 View lib/repo/handler/branch/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/branches/{branch_name}",
13 path = "/repos/{space_name}/{repo_id}/branches/{branch_name}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a branch", body = AppResponseData<BranchView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, name)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, name)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<BranchView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_branch(claims.sub, repo_id, &name).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/branch/list.rs lib/repo/handler/branch/list.rs +5 −2 View lib/repo/handler/branch/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/branches",
13 path = "/repos/{space_name}/{repo_id}/branches",
1414 tag = "repo",
1515 params(ListBranchQuery),
1616 responses((status = 200, description = "List branches", body = AppResponseData<BranchPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListBranchQuery>,
2424) -> RepoResult<AppResponseData<BranchPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_branches(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/branch/merge_upstream.rs lib/repo/handler/branch/merge_upstream.rs +5 −2 View lib/repo/handler/branch/merge_upstream.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/merge-upstream",
13 path = "/repos/{space_name}/{repo_id}/merge-upstream",
1414 tag = "repo",
1515 request_body = AppRequestData<MergeUpstreamRequest>,
1616 responses((status = 200, description = "Merge upstream", body = AppResponseData<MergeUpstreamResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<MergeUpstreamRequest>,
2424) -> RepoResult<AppResponseData<MergeUpstreamResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc
2629 .merge_upstream(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/branch/rename.rs lib/repo/handler/branch/rename.rs +5 −2 View lib/repo/handler/branch/rename.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 patch,
13 path = "/repo/{channel_id}/{repo_id}/branches/{branch_name}/rename",
13 path = "/repos/{space_name}/{repo_id}/branches/{branch_name}/rename",
1414 tag = "repo",
1515 request_body = AppRequestData<RenameBranchOption>,
1616 responses((status = 200, description = "Rename a branch", body = AppResponseData<BranchView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, name)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, name)): Path<(String, Uuid, String)>,
2323 input: AppRequest<RenameBranchOption>,
2424) -> RepoResult<AppResponseData<BranchView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .rename_branch(claims.sub, repo_id, &name, input.into_inner())
2730 .await?;
Modified lib/repo/handler/branch/update.rs lib/repo/handler/branch/update.rs +5 −2 View lib/repo/handler/branch/update.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 put,
13 path = "/repo/{channel_id}/{repo_id}/branches/{branch_name}",
13 path = "/repos/{space_name}/{repo_id}/branches/{branch_name}",
1414 tag = "repo",
1515 request_body = AppRequestData<UpdateBranchOption>,
1616 responses((status = 200, description = "Update a branch", body = AppResponseData<BranchView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, name)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, name)): Path<(String, Uuid, String)>,
2323 input: AppRequest<UpdateBranchOption>,
2424) -> RepoResult<AppResponseData<BranchView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .update_branch(claims.sub, repo_id, &name, input.into_inner())
2730 .await?;
Modified lib/repo/handler/branch_protection/create.rs lib/repo/handler/branch_protection/create.rs +5 −2 View lib/repo/handler/branch_protection/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/branch_protections",
13 path = "/repos/{space_name}/{repo_id}/branch_protections",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateBranchProtectionOption>,
1616 responses((status = 201, description = "Create a branch protection", body = AppResponseData<BranchProtectionView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreateBranchProtectionOption>,
2424) -> RepoResult<AppResponseData<BranchProtectionView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_branch_protection(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/branch_protection/delete.rs lib/repo/handler/branch_protection/delete.rs +5 −2 View lib/repo/handler/branch_protection/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/branch_protections/{policy_id}",
12 path = "/repos/{space_name}/{repo_id}/branch_protections/{policy_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a branch protection")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, policy_id)): Path<(Uuid, Uuid, Uuid)>,
20 Path((space_name, repo_id, policy_id)): Path<(String, Uuid, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_branch_protection(claims.sub, repo_id, policy_id)
2326 .await?;
2427 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/branch_protection/edit.rs lib/repo/handler/branch_protection/edit.rs +5 −2 View lib/repo/handler/branch_protection/edit.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 patch,
13 path = "/repo/{channel_id}/{repo_id}/branch_protections/{policy_id}",
13 path = "/repos/{space_name}/{repo_id}/branch_protections/{policy_id}",
1414 tag = "repo",
1515 request_body = AppRequestData<EditBranchProtectionOption>,
1616 responses((status = 200, description = "Edit a branch protection", body = AppResponseData<BranchProtectionView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, policy_id)): Path<(Uuid, Uuid, Uuid)>,
22 Path((space_name, repo_id, policy_id)): Path<(String, Uuid, Uuid)>,
2323 input: AppRequest<EditBranchProtectionOption>,
2424) -> RepoResult<AppResponseData<BranchProtectionView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .edit_branch_protection(claims.sub, repo_id, policy_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/branch_protection/get.rs lib/repo/handler/branch_protection/get.rs +5 −2 View lib/repo/handler/branch_protection/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/branch_protections/{policy_id}",
13 path = "/repos/{space_name}/{repo_id}/branch_protections/{policy_id}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a branch protection", body = AppResponseData<BranchProtectionView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, policy_id)): Path<(Uuid, Uuid, Uuid)>,
21 Path((space_name, repo_id, policy_id)): Path<(String, Uuid, Uuid)>,
2222) -> RepoResult<AppResponseData<BranchProtectionView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc
2427 .get_branch_protection(claims.sub, repo_id, policy_id)
2528 .await?;
Modified lib/repo/handler/branch_protection/list.rs lib/repo/handler/branch_protection/list.rs +5 −2 View lib/repo/handler/branch_protection/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/branch_protections",
13 path = "/repos/{space_name}/{repo_id}/branch_protections",
1414 tag = "repo",
1515 params(ListBranchProtectionQuery),
1616 responses((status = 200, description = "List branch protections", body = AppResponseData<BranchProtectionPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListBranchProtectionQuery>,
2424) -> RepoResult<AppResponseData<BranchProtectionPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_branch_protections(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/branch_protection/priority.rs lib/repo/handler/branch_protection/priority.rs +5 −2 View lib/repo/handler/branch_protection/priority.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/branch_protections/priority",
13 path = "/repos/{space_name}/{repo_id}/branch_protections/priority",
1414 tag = "repo",
1515 request_body = AppRequestData<UpdateBranchProtectionPriorities>,
1616 responses((status = 204, description = "Update branch protection priorities")),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<UpdateBranchProtectionPriorities>,
2424) -> RepoResult<AppResponseData<NoData>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 svc.update_branch_protection_priorities(claims.sub, repo_id, input.into_inner())
2629 .await?;
2730 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/collab/add.rs lib/repo/handler/collab/add.rs +5 −2 View lib/repo/handler/collab/add.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 put,
13 path = "/repo/{channel_id}/{repo_id}/collaborators/{user_id}",
13 path = "/repos/{space_name}/{repo_id}/collaborators/{user_id}",
1414 tag = "repo",
1515 request_body = AppRequestData<AddCollaboratorOption>,
1616 responses((status = 204, description = "Add or update a collaborator")),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, user_id)): Path<(Uuid, Uuid, Uuid)>,
22 Path((space_name, repo_id, user_id)): Path<(String, Uuid, Uuid)>,
2323 input: AppRequest<AddCollaboratorOption>,
2424) -> RepoResult<AppResponseData<NoData>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 svc.add_collaborator(claims.sub, repo_id, user_id, input.into_inner())
2629 .await?;
2730 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/collab/delete.rs lib/repo/handler/collab/delete.rs +5 −2 View lib/repo/handler/collab/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/collaborators/{user_id}",
12 path = "/repos/{space_name}/{repo_id}/collaborators/{user_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "Remove a collaborator")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, user_id)): Path<(Uuid, Uuid, Uuid)>,
20 Path((space_name, repo_id, user_id)): Path<(String, Uuid, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_collaborator(claims.sub, repo_id, user_id)
2326 .await?;
2427 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/collab/is.rs lib/repo/handler/collab/is.rs +5 −2 View lib/repo/handler/collab/is.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 get,
12 path = "/repo/{channel_id}/{repo_id}/collaborators/{user_id}",
12 path = "/repos/{space_name}/{repo_id}/collaborators/{user_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "User is a collaborator")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, user_id)): Path<(Uuid, Uuid, Uuid)>,
20 Path((space_name, repo_id, user_id)): Path<(String, Uuid, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 let is = svc.is_collaborator(claims.sub, repo_id, user_id).await?;
2326 if is {
2427 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/collab/list.rs lib/repo/handler/collab/list.rs +5 −2 View lib/repo/handler/collab/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/collaborators",
13 path = "/repos/{space_name}/{repo_id}/collaborators",
1414 tag = "repo",
1515 params(ListCollaboratorQuery),
1616 responses((status = 200, description = "List collaborators", body = AppResponseData<CollaboratorPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListCollaboratorQuery>,
2424) -> RepoResult<AppResponseData<CollaboratorPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc
2629 .list_collaborators(claims.sub, repo_id, q.page, q.limit)
2730 .await?;
Modified lib/repo/handler/collab/permission.rs lib/repo/handler/collab/permission.rs +5 −2 View lib/repo/handler/collab/permission.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/collaborators/{user_id}/permission",
13 path = "/repos/{space_name}/{repo_id}/collaborators/{user_id}/permission",
1414 tag = "repo",
1515 responses((status = 200, description = "Get collaborator permission", body = AppResponseData<RepoCollaboratorPermission>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, user_id)): Path<(Uuid, Uuid, Uuid)>,
21 Path((space_name, repo_id, user_id)): Path<(String, Uuid, Uuid)>,
2222) -> RepoResult<AppResponseData<RepoCollaboratorPermission>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let perm = svc
2427 .get_repo_permissions(claims.sub, repo_id, user_id)
2528 .await?;
Modified lib/repo/handler/commit_status/combined.rs lib/repo/handler/commit_status/combined.rs +5 −2 View lib/repo/handler/commit_status/combined.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/commits/{ref}/status",
13 path = "/repos/{space_name}/{repo_id}/commits/{ref}/status",
1414 tag = "repo",
1515 responses((status = 200, description = "Get combined status by ref", body = AppResponseData<CombinedStatusView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, git_ref)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, git_ref)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<CombinedStatusView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc
2427 .combined_status_by_ref(claims.sub, repo_id, &git_ref)
2528 .await?;
Modified lib/repo/handler/commit_status/create.rs lib/repo/handler/commit_status/create.rs +5 −2 View lib/repo/handler/commit_status/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/statuses/{sha}",
13 path = "/repos/{space_name}/{repo_id}/statuses/{sha}",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateStatusOption>,
1616 responses((status = 201, description = "Create a commit status", body = AppResponseData<CommitStatusView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2323 input: AppRequest<CreateStatusOption>,
2424) -> RepoResult<AppResponseData<CommitStatusView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_commit_status(claims.sub, repo_id, &sha, input.into_inner())
2730 .await?;
Modified lib/repo/handler/commit_status/list.rs lib/repo/handler/commit_status/list.rs +5 −2 View lib/repo/handler/commit_status/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/statuses/{sha}",
13 path = "/repos/{space_name}/{repo_id}/statuses/{sha}",
1414 tag = "repo",
1515 params(ListStatusQuery),
1616 responses((status = 200, description = "List commit statuses", body = AppResponseData<CommitStatusPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2323 Query(q): Query<ListStatusQuery>,
2424) -> RepoResult<AppResponseData<CommitStatusPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc
2629 .list_commit_statuses(claims.sub, repo_id, &sha, q)
2730 .await?;
Modified lib/repo/handler/commit_status/list_by_ref.rs lib/repo/handler/commit_status/list_by_ref.rs +5 −2 View lib/repo/handler/commit_status/list_by_ref.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/commits/{ref}/statuses",
13 path = "/repos/{space_name}/{repo_id}/commits/{ref}/statuses",
1414 tag = "repo",
1515 params(ListStatusQuery),
1616 responses((status = 200, description = "List commit statuses by ref", body = AppResponseData<CommitStatusPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, git_ref)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, git_ref)): Path<(String, Uuid, String)>,
2323 Query(q): Query<ListStatusQuery>,
2424) -> RepoResult<AppResponseData<CommitStatusPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc
2629 .list_commit_statuses_by_ref(claims.sub, repo_id, &git_ref, q)
2730 .await?;
Modified lib/repo/handler/compare/compare.rs lib/repo/handler/compare/compare.rs +5 −2 View lib/repo/handler/compare/compare.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/compare/{base}...{head}",
13 path = "/repos/{space_name}/{repo_id}/compare/{base}...{head}",
1414 tag = "repo",
1515 responses((status = 200, description = "Compare two refs", body = AppResponseData<CompareView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, base_dot_head)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, base_dot_head)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<CompareView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let (base, head) = base_dot_head
2427 .split_once("...")
2528 .ok_or_else(|| crate::error::RepoError::BadRequest("expected '<base>...<head>'".into()))?;
Modified lib/repo/handler/contents/change_files.rs lib/repo/handler/contents/change_files.rs +5 −2 View lib/repo/handler/contents/change_files.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/contents/change",
13 path = "/repos/{space_name}/{repo_id}/contents/change",
1414 tag = "repo",
1515 request_body = AppRequestData<ChangeFilesOptions>,
1616 responses((status = 200, description = "Multi-file change", body = AppResponseData<ContentsListResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<ChangeFilesOptions>,
2424) -> RepoResult<AppResponseData<ContentsListResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc
2629 .change_files(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/contents/create.rs lib/repo/handler/contents/create.rs +5 −2 View lib/repo/handler/contents/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/contents/{path}",
13 path = "/repos/{space_name}/{repo_id}/contents/{path}",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateFileOption>,
1616 responses((status = 201, description = "Create a file", body = AppResponseData<ContentsResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, path)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, path)): Path<(String, Uuid, String)>,
2323 input: AppRequest<CreateFileOption>,
2424) -> RepoResult<AppResponseData<ContentsResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc
2629 .create_file(claims.sub, repo_id, &path, input.into_inner())
2730 .await?;
Modified lib/repo/handler/contents/delete.rs lib/repo/handler/contents/delete.rs +5 −2 View lib/repo/handler/contents/delete.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 delete,
13 path = "/repo/{channel_id}/{repo_id}/contents/{path}",
13 path = "/repos/{space_name}/{repo_id}/contents/{path}",
1414 tag = "repo",
1515 request_body = AppRequestData<DeleteFileOption>,
1616 responses((status = 204, description = "Delete a file")),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, path)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, path)): Path<(String, Uuid, String)>,
2323 input: AppRequest<DeleteFileOption>,
2424) -> RepoResult<AppResponseData<NoData>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 svc.delete_file(claims.sub, repo_id, &path, input.into_inner())
2629 .await?;
2730 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/contents/diff_patch.rs lib/repo/handler/contents/diff_patch.rs +5 −2 View lib/repo/handler/contents/diff_patch.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/diffpatch",
13 path = "/repos/{space_name}/{repo_id}/diffpatch",
1414 tag = "repo",
1515 request_body = AppRequestData<ApplyDiffPatchFileOptions>,
1616 responses((status = 200, description = "Apply a diff patch", body = AppResponseData<ContentsResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<ApplyDiffPatchFileOptions>,
2424) -> RepoResult<AppResponseData<ContentsResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc
2629 .apply_diff_patch(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/contents/get.rs lib/repo/handler/contents/get.rs +5 −2 View lib/repo/handler/contents/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/contents/{path}",
13 path = "/repos/{space_name}/{repo_id}/contents/{path}",
1414 tag = "repo",
1515 params(ContentsQuery),
1616 responses((status = 200, description = "Get a file or directory", body = AppResponseData<ContentsResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, path)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, path)): Path<(String, Uuid, String)>,
2323 Query(q): Query<ContentsQuery>,
2424) -> RepoResult<AppResponseData<ContentsResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc.get_contents(claims.sub, repo_id, &path, q).await?;
2629 Ok(AppResponseData::ok(resp))
2730}
Modified lib/repo/handler/contents/get_list.rs lib/repo/handler/contents/get_list.rs +5 −2 View lib/repo/handler/contents/get_list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/contents",
13 path = "/repos/{space_name}/{repo_id}/contents",
1414 tag = "repo",
1515 params(ContentsQuery),
1616 responses((status = 200, description = "List contents at root", body = AppResponseData<ContentsListResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ContentsQuery>,
2424) -> RepoResult<AppResponseData<ContentsListResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc.list_contents(claims.sub, repo_id, "", q).await?;
2629 Ok(AppResponseData::ok(resp))
2730}
Modified lib/repo/handler/contents/update.rs lib/repo/handler/contents/update.rs +5 −2 View lib/repo/handler/contents/update.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 put,
13 path = "/repo/{channel_id}/{repo_id}/contents/{path}",
13 path = "/repos/{space_name}/{repo_id}/contents/{path}",
1414 tag = "repo",
1515 request_body = AppRequestData<UpdateFileOption>,
1616 responses((status = 200, description = "Update a file", body = AppResponseData<ContentsResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, path)): Path<(Uuid, Uuid, String)>,
22 Path((space_name, repo_id, path)): Path<(String, Uuid, String)>,
2323 input: AppRequest<UpdateFileOption>,
2424) -> RepoResult<AppResponseData<ContentsResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let resp = svc
2629 .update_file(claims.sub, repo_id, &path, input.into_inner())
2730 .await?;
Modified lib/repo/handler/deploy_key/create.rs lib/repo/handler/deploy_key/create.rs +5 −2 View lib/repo/handler/deploy_key/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/keys",
13 path = "/repos/{space_name}/{repo_id}/keys",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateDeployKeyOption>,
1616 responses((status = 201, description = "Create a deploy key", body = AppResponseData<DeployKeyView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreateDeployKeyOption>,
2424) -> RepoResult<AppResponseData<DeployKeyView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_deploy_key(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/deploy_key/delete.rs lib/repo/handler/deploy_key/delete.rs +5 −2 View lib/repo/handler/deploy_key/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/keys/{key_id}",
12 path = "/repos/{space_name}/{repo_id}/keys/{key_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a deploy key")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, key_id)): Path<(Uuid, Uuid, Uuid)>,
20 Path((space_name, repo_id, key_id)): Path<(String, Uuid, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_deploy_key(claims.sub, repo_id, key_id).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/deploy_key/get.rs lib/repo/handler/deploy_key/get.rs +5 −2 View lib/repo/handler/deploy_key/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/keys/{key_id}",
13 path = "/repos/{space_name}/{repo_id}/keys/{key_id}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a deploy key", body = AppResponseData<DeployKeyView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, key_id)): Path<(Uuid, Uuid, Uuid)>,
21 Path((space_name, repo_id, key_id)): Path<(String, Uuid, Uuid)>,
2222) -> RepoResult<AppResponseData<DeployKeyView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_deploy_key(claims.sub, repo_id, key_id).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/deploy_key/list.rs lib/repo/handler/deploy_key/list.rs +5 −2 View lib/repo/handler/deploy_key/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/keys",
13 path = "/repos/{space_name}/{repo_id}/keys",
1414 tag = "repo",
1515 params(ListDeployKeyQuery),
1616 responses((status = 200, description = "List deploy keys", body = AppResponseData<DeployKeyPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListDeployKeyQuery>,
2424) -> RepoResult<AppResponseData<DeployKeyPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_deploy_keys(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/extras/assigns.rs lib/repo/handler/extras/assigns.rs +5 −2 View lib/repo/handler/extras/assigns.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 get,
12 path = "/repo/{channel_id}/{repo_id}/assignees/{assignee}",
12 path = "/repos/{space_name}/{repo_id}/assignees/{assignee}",
1313 tag = "repo",
1414 responses((status = 204, description = "User is a valid assignee")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn check_handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, user)): Path<(Uuid, Uuid, String)>,
20 Path((space_name, repo_id, user)): Path<(String, Uuid, String)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 let ok = svc.check_assignee(claims.sub, repo_id, &user).await?;
2326 if ok {
2427 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/extras/avatar.rs lib/repo/handler/extras/avatar.rs +10 −4 View lib/repo/handler/extras/avatar.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/avatar",
13 path = "/repos/{space_name}/{repo_id}/avatar",
1414 tag = "repo",
1515 request_body = AppRequestData<UpdateAvatarOption>,
1616 responses((status = 204, description = "Update repo avatar")),
@@ -19,9 +19,12 @@
1919pub(crate) async fn post_handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<UpdateAvatarOption>,
2424) -> RepoResult<AppResponseData<NoData>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 svc.update_repo_avatar(claims.sub, repo_id, input.into_inner())
2629 .await?;
2730 Ok(AppResponseData::<NoData>::empty())
@@ -29,7 +32,7 @@
2932
3033#[utoipa::path(
3134 delete,
32 path = "/repo/{channel_id}/{repo_id}/avatar",
35 path = "/repos/{space_name}/{repo_id}/avatar",
3336 tag = "repo",
3437 responses((status = 204, description = "Delete repo avatar")),
3538 security(("bearer_auth" = []))
@@ -37,8 +40,11 @@
3740pub(crate) async fn delete_handler(
3841 State(svc): State<RepoService>,
3942 AuthUser { claims }: AuthUser,
40 Path((_, repo_id)): Path<(Uuid, Uuid)>,
43 Path((space_name, repo_id)): Path<(String, Uuid)>,
4144) -> RepoResult<AppResponseData<NoData>> {
45 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
46 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
47 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4248 svc.delete_repo_avatar(claims.sub, repo_id).await?;
4349 Ok(AppResponseData::<NoData>::empty())
4450}
Modified lib/repo/handler/extras/commit_status_ref.rs lib/repo/handler/extras/commit_status_ref.rs +10 −4 View lib/repo/handler/extras/commit_status_ref.rs
@@ -12,7 +12,7 @@
1212
1313#[utoipa::path(
1414 get,
15 path = "/repo/{channel_id}/{repo_id}/commits/{ref}/statuses",
15 path = "/repos/{space_name}/{repo_id}/commits/{ref}/statuses",
1616 tag = "repo",
1717 params(ListStatusQuery),
1818 responses((status = 200, description = "List commit statuses by ref", body = AppResponseData<CommitStatusPage>)),
@@ -22,9 +22,12 @@
2222pub(crate) async fn list_by_ref_handler(
2323 State(svc): State<RepoService>,
2424 AuthUser { claims }: AuthUser,
25 Path((_, repo_id, git_ref)): Path<(Uuid, Uuid, String)>,
25 Path((space_name, repo_id, git_ref)): Path<(String, Uuid, String)>,
2626 Query(q): Query<ListStatusQuery>,
2727) -> RepoResult<AppResponseData<CommitStatusPage>> {
28 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
29 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
30 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2831 let out = svc
2932 .list_commit_statuses_by_ref(claims.sub, repo_id, &git_ref, q)
3033 .await?;
@@ -33,7 +36,7 @@
3336
3437#[utoipa::path(
3538 get,
36 path = "/repo/{channel_id}/{repo_id}/commits/{ref}/status",
39 path = "/repos/{space_name}/{repo_id}/commits/{ref}/status",
3740 tag = "repo",
3841 responses((status = 200, description = "Get combined commit status by ref", body = AppResponseData<CombinedStatusView>)),
3942 security(("bearer_auth" = []))
@@ -42,8 +45,11 @@
4245pub(crate) async fn combined_handler(
4346 State(svc): State<RepoService>,
4447 AuthUser { claims }: AuthUser,
45 Path((_, repo_id, git_ref)): Path<(Uuid, Uuid, String)>,
48 Path((space_name, repo_id, git_ref)): Path<(String, Uuid, String)>,
4649) -> RepoResult<AppResponseData<CombinedStatusView>> {
50 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
51 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
52 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4753 let out = svc
4854 .combined_status_by_ref(claims.sub, repo_id, &git_ref)
4955 .await?;
Modified lib/repo/handler/extras/commits.rs lib/repo/handler/extras/commits.rs +15 −6 View lib/repo/handler/extras/commits.rs
@@ -14,7 +14,7 @@
1414
1515#[utoipa::path(
1616 get,
17 path = "/repo/{channel_id}/{repo_id}/commits",
17 path = "/repos/{space_name}/{repo_id}/commits",
1818 tag = "repo",
1919 params(CommitsQuery),
2020 responses((status = 200, description = "List commits", body = AppResponseData<CommitsResponse>)),
@@ -23,16 +23,19 @@
2323pub(crate) async fn list_handler(
2424 State(svc): State<RepoService>,
2525 AuthUser { claims }: AuthUser,
26 Path((_, repo_id)): Path<(Uuid, Uuid)>,
26 Path((space_name, repo_id)): Path<(String, Uuid)>,
2727 Query(q): Query<CommitsQuery>,
2828) -> RepoResult<AppResponseData<CommitsResponse>> {
29 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
30 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
31 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2932 let out = svc.list_commits(claims.sub, repo_id, q).await?;
3033 Ok(AppResponseData::ok(out))
3134}
3235
3336#[utoipa::path(
3437 get,
35 path = "/repo/{channel_id}/{repo_id}/git/commits/{sha}",
38 path = "/repos/{space_name}/{repo_id}/git/commits/{sha}",
3639 tag = "repo",
3740 responses((status = 200, description = "Get a commit", body = AppResponseData<CommitSummary>)),
3841 security(("bearer_auth" = []))
@@ -41,15 +44,18 @@
4144pub(crate) async fn get_handler(
4245 State(svc): State<RepoService>,
4346 AuthUser { claims }: AuthUser,
44 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
47 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
4548) -> RepoResult<AppResponseData<CommitSummary>> {
49 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
50 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
51 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4652 let out = svc.get_commit(claims.sub, repo_id, &sha).await?;
4753 Ok(AppResponseData::ok(out))
4854}
4955
5056#[utoipa::path(
5157 get,
52 path = "/repo/{channel_id}/{repo_id}/git/commits/diff/{sha}",
58 path = "/repos/{space_name}/{repo_id}/git/commits/diff/{sha}",
5359 tag = "repo",
5460 responses((status = 200, description = "Get commit diff or patch", content_type = "text/plain")),
5561 security(("bearer_auth" = []))
@@ -57,8 +63,11 @@
5763pub(crate) async fn diff_handler(
5864 State(svc): State<RepoService>,
5965 AuthUser { claims }: AuthUser,
60 Path((_, repo_id, sha_dot_type)): Path<(Uuid, Uuid, String)>,
66 Path((space_name, repo_id, sha_dot_type)): Path<(String, Uuid, String)>,
6167) -> RepoResult<Response> {
68 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
69 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
70 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
6271 let (sha, diff_type) = sha_dot_type
6372 .rsplit_once('.')
6473 .ok_or_else(|| crate::error::RepoError::BadRequest("expected '<sha>.diff|patch'".into()))?;
Modified lib/repo/handler/extras/contents_ext.rs lib/repo/handler/extras/contents_ext.rs +12 −6 View lib/repo/handler/extras/contents_ext.rs
@@ -10,18 +10,21 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/contents-ext",
13 path = "/repos/{space_name}/{repo_id}/contents-ext",
1414 tag = "repo",
1515 params(ContentsQuery),
1616 responses((status = 200, description = "List contents (ext form)", body = ContentsExtResponse)),
1717 security(("bearer_auth" = []))
1818)]
1919pub(crate) async fn list_handler(
20 State(_svc): State<RepoService>,
20 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, _repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(_q): Query<ContentsQuery>,
2424) -> RepoResult<AppResponseData<ContentsExtResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let _ = claims;
2629 Ok(AppResponseData::ok(ContentsExtResponse {
2730 file_contents: None,
@@ -31,18 +34,21 @@
3134
3235#[utoipa::path(
3336 get,
34 path = "/repo/{channel_id}/{repo_id}/contents-ext/{path:path}",
37 path = "/repos/{space_name}/{repo_id}/contents-ext/{path:path}",
3538 tag = "repo",
3639 params(ContentsQuery),
3740 responses((status = 200, description = "Get contents (ext form)", body = ContentsExtResponse)),
3841 security(("bearer_auth" = []))
3942)]
4043pub(crate) async fn get_handler(
41 State(_svc): State<RepoService>,
44 State(svc): State<RepoService>,
4245 AuthUser { claims }: AuthUser,
43 Path((_, _repo_id, _path)): Path<(Uuid, Uuid, String)>,
46 Path((space_name, repo_id, _path)): Path<(String, Uuid, String)>,
4447 Query(_q): Query<ContentsQuery>,
4548) -> RepoResult<AppResponseData<ContentsExtResponse>> {
49 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
50 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
51 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4652 let _ = claims;
4753 Ok(AppResponseData::ok(ContentsExtResponse {
4854 file_contents: None,
Modified lib/repo/handler/extras/editorconfig.rs lib/repo/handler/extras/editorconfig.rs +5 −2 View lib/repo/handler/extras/editorconfig.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/editorconfig/{filename:path}",
13 path = "/repos/{space_name}/{repo_id}/editorconfig/{filename:path}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get EditorConfig", content_type = "text/plain")),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, filename)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, filename)): Path<(String, Uuid, String)>,
2222) -> RepoResult<Response> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let body = svc
2427 .get_editorconfig(claims.sub, repo_id, &filename, None)
2528 .await?;
Modified lib/repo/handler/extras/file_contents.rs lib/repo/handler/extras/file_contents.rs +10 −4 View lib/repo/handler/extras/file_contents.rs
@@ -11,7 +11,7 @@
1111
1212#[utoipa::path(
1313 get,
14 path = "/repo/{channel_id}/{repo_id}/file-contents",
14 path = "/repos/{space_name}/{repo_id}/file-contents",
1515 tag = "repo",
1616 responses((status = 200, description = "Batch read files", body = AppResponseData<FilesResponse>)),
1717 security(("bearer_auth" = []))
@@ -19,8 +19,11 @@
1919pub(crate) async fn get_handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323) -> RepoResult<AppResponseData<FilesResponse>> {
24 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
25 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
26 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2427 let out = svc
2528 .get_file_contents(claims.sub, repo_id, Vec::new())
2629 .await?;
@@ -56,7 +59,7 @@
5659
5760#[utoipa::path(
5861 post,
59 path = "/repo/{channel_id}/{repo_id}/file-contents",
62 path = "/repos/{space_name}/{repo_id}/file-contents",
6063 tag = "repo",
6164 request_body = AppRequestData<Vec<String>>,
6265 responses((status = 200, description = "Batch read files", body = AppResponseData<FileDeleteResponse>)),
@@ -65,9 +68,12 @@
6568pub(crate) async fn post_handler(
6669 State(svc): State<RepoService>,
6770 AuthUser { claims }: AuthUser,
68 Path((_, repo_id)): Path<(Uuid, Uuid)>,
71 Path((space_name, repo_id)): Path<(String, Uuid)>,
6972 files: AppRequest<Vec<String>>,
7073) -> RepoResult<AppResponseData<FileDeleteResponse>> {
74 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
75 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
76 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
7177 let out = svc
7278 .get_file_contents(claims.sub, repo_id, files.into_inner())
7379 .await?;
Modified lib/repo/handler/extras/fork.rs lib/repo/handler/extras/fork.rs +5 −2 View lib/repo/handler/extras/fork.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/forks",
13 path = "/repos/{space_name}/{repo_id}/forks",
1414 tag = "repo",
1515 params(ForksQuery),
1616 responses((status = 200, description = "List forks", body = AppResponseData<ForksResponse>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn list_handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ForksQuery>,
2424) -> RepoResult<AppResponseData<ForksResponse>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let out = svc.list_forks(claims.sub, repo_id, q.page, q.limit).await?;
2629 Ok(AppResponseData::ok(out))
2730}
Modified lib/repo/handler/extras/issue_template.rs lib/repo/handler/extras/issue_template.rs +5 −2 View lib/repo/handler/extras/issue_template.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/issue_templates",
13 path = "/repos/{space_name}/{repo_id}/issue_templates",
1414 tag = "repo",
1515 responses((status = 200, description = "List issue templates", body = AppResponseData<Vec<IssueTemplate>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<Vec<IssueTemplate>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc.list_issue_templates(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(out))
2528}
Modified lib/repo/handler/extras/language.rs lib/repo/handler/extras/language.rs +5 −2 View lib/repo/handler/extras/language.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/languages",
13 path = "/repos/{space_name}/{repo_id}/languages",
1414 tag = "repo",
1515 responses((status = 200, description = "Get repo language stats", body = AppResponseData<LanguagesResponse>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<LanguagesResponse>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc.get_languages(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(out))
2528}
Modified lib/repo/handler/extras/license.rs lib/repo/handler/extras/license.rs +5 −2 View lib/repo/handler/extras/license.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/licenses",
13 path = "/repos/{space_name}/{repo_id}/licenses",
1414 tag = "repo",
1515 responses((status = 200, description = "List detected licenses", body = AppResponseData<LicensesResponse>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<LicensesResponse>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc.get_licenses(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(out))
2528}
Modified lib/repo/handler/extras/media.rs lib/repo/handler/extras/media.rs +5 −2 View lib/repo/handler/extras/media.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/media/{filepath:path}",
13 path = "/repos/{space_name}/{repo_id}/media/{filepath:path}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get media (raw or LFS pointer)", content_type = "application/octet-stream")),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, path)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, path)): Path<(String, Uuid, String)>,
2222) -> RepoResult<Response> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let bytes = svc.get_media(claims.sub, repo_id, &path, None).await?;
2427 let resp = (
2528 [(
Modified lib/repo/handler/extras/pin.rs lib/repo/handler/extras/pin.rs +5 −2 View lib/repo/handler/extras/pin.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/new_pin_allowed",
13 path = "/repos/{space_name}/{repo_id}/new_pin_allowed",
1414 tag = "repo",
1515 responses((status = 200, description = "Whether new issue pins are allowed", body = AppResponseData<NewPinAllowedResponse>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<NewPinAllowedResponse>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc.check_new_pin_allowed(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(out))
2528}
Modified lib/repo/handler/extras/raw.rs lib/repo/handler/extras/raw.rs +5 −2 View lib/repo/handler/extras/raw.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/raw/{filepath:path}",
13 path = "/repos/{space_name}/{repo_id}/raw/{filepath:path}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get raw file content", content_type = "application/octet-stream")),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, path)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, path)): Path<(String, Uuid, String)>,
2222) -> RepoResult<Response> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let bytes = svc.get_raw_file(claims.sub, repo_id, &path, None).await?;
2427 let resp = (
2528 [(
Modified lib/repo/handler/extras/release_attachment.rs lib/repo/handler/extras/release_attachment.rs +10 −4 View lib/repo/handler/extras/release_attachment.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/releases/{release_id}/assets",
13 path = "/repos/{space_name}/{repo_id}/releases/{release_id}/assets",
1414 tag = "repo",
1515 responses((status = 200, description = "List release attachments", body = AppResponseData<ReleaseAttachmentListResponse>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn list_handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, release_id)): Path<(Uuid, Uuid, Uuid)>,
21 Path((space_name, repo_id, release_id)): Path<(String, Uuid, Uuid)>,
2222) -> RepoResult<AppResponseData<ReleaseAttachmentListResponse>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc
2427 .list_release_attachments(claims.sub, repo_id, release_id)
2528 .await?;
@@ -28,7 +31,7 @@
2831
2932#[utoipa::path(
3033 get,
31 path = "/repo/{channel_id}/{repo_id}/releases/{release_id}/assets/{attachment_id}",
34 path = "/repos/{space_name}/{repo_id}/releases/{release_id}/assets/{attachment_id}",
3235 tag = "repo",
3336 responses((status = 200, description = "Get a release attachment", body = AppResponseData<ReleaseAttachmentView>)),
3437 security(("bearer_auth" = []))
@@ -36,8 +39,11 @@
3639pub(crate) async fn get_handler(
3740 State(svc): State<RepoService>,
3841 AuthUser { claims }: AuthUser,
39 Path((_, repo_id, release_id, attachment_id)): Path<(Uuid, Uuid, Uuid, Uuid)>,
42 Path((space_name, repo_id, release_id, attachment_id)): Path<(String, Uuid, Uuid, Uuid)>,
4043) -> RepoResult<AppResponseData<ReleaseAttachmentView>> {
44 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
45 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
46 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4147 let out = svc
4248 .get_release_attachment(claims.sub, repo_id, release_id, attachment_id)
4349 .await?;
Modified lib/repo/handler/extras/repo_extra.rs lib/repo/handler/extras/repo_extra.rs +10 −4 View lib/repo/handler/extras/repo_extra.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/issue_config",
13 path = "/repos/{space_name}/{repo_id}/issue_config",
1414 tag = "repo",
1515 responses((status = 200, description = "Get issue config", body = AppResponseData<IssueConfig>)),
1616 security(("bearer_auth" = []))
@@ -18,15 +18,18 @@
1818pub(crate) async fn get_handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<IssueConfig>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc.get_issue_config(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(out))
2528}
2629
2730#[utoipa::path(
2831 get,
29 path = "/repo/{channel_id}/{repo_id}/issue_config/validate",
32 path = "/repos/{space_name}/{repo_id}/issue_config/validate",
3033 tag = "repo",
3134 responses((status = 200, description = "Validate issue config", body = AppResponseData<IssueConfigValidation>)),
3235 security(("bearer_auth" = []))
@@ -34,8 +37,11 @@
3437pub(crate) async fn validate_handler(
3538 State(svc): State<RepoService>,
3639 AuthUser { claims }: AuthUser,
37 Path((_, repo_id)): Path<(Uuid, Uuid)>,
40 Path((space_name, repo_id)): Path<(String, Uuid)>,
3841) -> RepoResult<AppResponseData<IssueConfigValidation>> {
42 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
43 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
44 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
3945 let out = svc.validate_issue_config(claims.sub, repo_id).await?;
4046 Ok(AppResponseData::ok(out))
4147}
Modified lib/repo/handler/extras/reviews.rs lib/repo/handler/extras/reviews.rs +5 −2 View lib/repo/handler/extras/reviews.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/reviewers",
13 path = "/repos/{space_name}/{repo_id}/reviewers",
1414 tag = "repo",
1515 responses((status = 200, description = "List reviewers", body = AppResponseData<Vec<UserMini>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<Vec<UserMini>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let out = svc.list_reviewers(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(out))
2528}
Modified lib/repo/handler/extras/signing_key.rs lib/repo/handler/extras/signing_key.rs +10 −4 View lib/repo/handler/extras/signing_key.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/signing-key.gpg",
13 path = "/repos/{space_name}/{repo_id}/signing-key.gpg",
1414 tag = "repo",
1515 responses((status = 200, description = "GPG signing key", content_type = "text/plain")),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn gpg_handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<Response> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let body = svc.get_signing_key_gpg(claims.sub, repo_id).await?;
2427 let resp = (
2528 [(
@@ -34,7 +37,7 @@
3437
3538#[utoipa::path(
3639 get,
37 path = "/repo/{channel_id}/{repo_id}/signing-key.pub",
40 path = "/repos/{space_name}/{repo_id}/signing-key.pub",
3841 tag = "repo",
3942 responses((status = 200, description = "SSH signing key", content_type = "text/plain")),
4043 security(("bearer_auth" = []))
@@ -42,8 +45,11 @@
4245pub(crate) async fn ssh_handler(
4346 State(svc): State<RepoService>,
4447 AuthUser { claims }: AuthUser,
45 Path((_, repo_id)): Path<(Uuid, Uuid)>,
48 Path((space_name, repo_id)): Path<(String, Uuid)>,
4649) -> RepoResult<Response> {
50 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
51 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
52 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4753 let body = svc.get_signing_key_ssh(claims.sub, repo_id).await?;
4854 let resp = (
4955 [(
Modified lib/repo/handler/extras/stargazer.rs lib/repo/handler/extras/stargazer.rs +5 −2 View lib/repo/handler/extras/stargazer.rs
@@ -16,7 +16,7 @@
1616
1717#[utoipa::path(
1818 get,
19 path = "/repo/{channel_id}/{repo_id}/stargazers",
19 path = "/repos/{space_name}/{repo_id}/stargazers",
2020 tag = "repo",
2121 params(StargazerQuery),
2222 responses((status = 200, description = "List stargazers", body = AppResponseData<Vec<UserMini>>)),
@@ -25,9 +25,12 @@
2525pub(crate) async fn handler(
2626 State(svc): State<RepoService>,
2727 AuthUser { claims }: AuthUser,
28 Path((_, repo_id)): Path<(Uuid, Uuid)>,
28 Path((space_name, repo_id)): Path<(String, Uuid)>,
2929 Query(q): Query<StargazerQuery>,
3030) -> RepoResult<AppResponseData<Vec<UserMini>>> {
31 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
32 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
33 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
3134 let out = svc
3235 .list_stargazers(claims.sub, repo_id, q.page, q.limit)
3336 .await?;
Modified lib/repo/handler/extras/subscription.rs lib/repo/handler/extras/subscription.rs +16 −7 View lib/repo/handler/extras/subscription.rs
@@ -10,16 +10,19 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/subscription",
13 path = "/repos/{space_name}/{repo_id}/subscription",
1414 tag = "repo",
1515 responses((status = 200, description = "Get current user's subscription", body = AppResponseData<Subscription>)),
1616 security(("bearer_auth" = []))
1717)]
1818pub(crate) async fn get_handler(
19 State(_svc): State<RepoService>,
19 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<Subscription>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 Ok(AppResponseData::ok(Subscription {
2427 user_id: claims.sub,
2528 repo_id,
@@ -30,7 +33,7 @@
3033
3134#[utoipa::path(
3235 put,
33 path = "/repo/{channel_id}/{repo_id}/subscription",
36 path = "/repos/{space_name}/{repo_id}/subscription",
3437 tag = "repo",
3538 responses((status = 204, description = "Watch the repo")),
3639 security(("bearer_auth" = []))
@@ -38,15 +41,18 @@
3841pub(crate) async fn put_handler(
3942 State(svc): State<RepoService>,
4043 AuthUser { claims }: AuthUser,
41 Path((_, repo_id)): Path<(Uuid, Uuid)>,
44 Path((space_name, repo_id)): Path<(String, Uuid)>,
4245) -> RepoResult<AppResponseData<NoData>> {
46 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
47 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
48 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
4349 svc.watch_repo(claims.sub, repo_id).await?;
4450 Ok(AppResponseData::<NoData>::empty())
4551}
4652
4753#[utoipa::path(
4854 delete,
49 path = "/repo/{channel_id}/{repo_id}/subscription",
55 path = "/repos/{space_name}/{repo_id}/subscription",
5056 tag = "repo",
5157 responses((status = 204, description = "Unwatch the repo")),
5258 security(("bearer_auth" = []))
@@ -54,8 +60,11 @@
5460pub(crate) async fn delete_handler(
5561 State(svc): State<RepoService>,
5662 AuthUser { claims }: AuthUser,
57 Path((_, repo_id)): Path<(Uuid, Uuid)>,
63 Path((space_name, repo_id)): Path<(String, Uuid)>,
5864) -> RepoResult<AppResponseData<NoData>> {
65 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
66 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
67 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
5968 svc.unwatch_repo(claims.sub, repo_id).await?;
6069 Ok(AppResponseData::<NoData>::empty())
6170}
Modified lib/repo/handler/git_ref/annotated_tag.rs lib/repo/handler/git_ref/annotated_tag.rs +5 −2 View lib/repo/handler/git_ref/annotated_tag.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/tags/{sha}",
13 path = "/repos/{space_name}/{repo_id}/git/tags/{sha}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get an annotated tag", body = AppResponseData<CommitView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<CommitView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_commit(claims.sub, repo_id, &sha).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/git_ref/blob.rs lib/repo/handler/git_ref/blob.rs +5 −2 View lib/repo/handler/git_ref/blob.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/blobs/{sha}",
13 path = "/repos/{space_name}/{repo_id}/git/blobs/{sha}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a blob", body = AppResponseData<BlobView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<BlobView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_blob(claims.sub, repo_id, &sha).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/git_ref/commit.rs lib/repo/handler/git_ref/commit.rs +5 −2 View lib/repo/handler/git_ref/commit.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/commits/{sha}",
13 path = "/repos/{space_name}/{repo_id}/git/commits/{sha}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a commit", body = AppResponseData<CommitView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<CommitView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_commit(claims.sub, repo_id, &sha).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/git_ref/commit_diff.rs lib/repo/handler/git_ref/commit_diff.rs +5 −2 View lib/repo/handler/git_ref/commit_diff.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/commits/{sha}",
13 path = "/repos/{space_name}/{repo_id}/git/commits/{sha}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a commit", body = AppResponseData<CommitView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<CommitView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_commit(claims.sub, repo_id, &sha).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/git_ref/diff.rs lib/repo/handler/git_ref/diff.rs +5 −2 View lib/repo/handler/git_ref/diff.rs
@@ -11,7 +11,7 @@
1111
1212#[utoipa::path(
1313 get,
14 path = "/repo/{channel_id}/{repo_id}/git/commits/{sha}.{diff_type}",
14 path = "/repos/{space_name}/{repo_id}/git/commits/{sha}.{diff_type}",
1515 tag = "repo",
1616 responses((status = 200, description = "Get commit diff or patch", body = CommitDiffPayload)),
1717 security(("bearer_auth" = []))
@@ -20,8 +20,11 @@
2020pub(crate) async fn handler(
2121 State(svc): State<RepoService>,
2222 AuthUser { claims }: AuthUser,
23 Path((_, repo_id, sha_dot_type)): Path<(Uuid, Uuid, String)>,
23 Path((space_name, repo_id, sha_dot_type)): Path<(String, Uuid, String)>,
2424) -> RepoResult<Response> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let (sha, diff_type) = sha_dot_type
2629 .rsplit_once('.')
2730 .ok_or_else(|| crate::error::RepoError::BadRequest("expected '<sha>.diff|patch'".into()))?;
Modified lib/repo/handler/git_ref/notes.rs lib/repo/handler/git_ref/notes.rs +5 −2 View lib/repo/handler/git_ref/notes.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/notes/{sha}",
13 path = "/repos/{space_name}/{repo_id}/git/notes/{sha}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a note", body = AppResponseData<NoteView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<NoteView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_note(claims.sub, repo_id, &sha).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/git_ref/refs.rs lib/repo/handler/git_ref/refs.rs +5 −2 View lib/repo/handler/git_ref/refs.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/refs",
13 path = "/repos/{space_name}/{repo_id}/git/refs",
1414 tag = "repo",
1515 responses((status = 200, description = "List git refs", body = AppResponseData<Vec<GitRef>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<Vec<GitRef>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let refs = svc.list_git_refs(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(refs))
2528}
Modified lib/repo/handler/git_ref/refs_filter.rs lib/repo/handler/git_ref/refs_filter.rs +5 −2 View lib/repo/handler/git_ref/refs_filter.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/git/refs/{filter}",
13 path = "/repos/{space_name}/{repo_id}/git/refs/{filter}",
1414 tag = "repo",
1515 responses((status = 200, description = "Filter git refs", body = AppResponseData<Vec<GitRef>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, filter)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, filter)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<Vec<GitRef>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let refs = svc.filter_git_refs(claims.sub, repo_id, &filter).await?;
2427 Ok(AppResponseData::ok(refs))
2528}
Modified lib/repo/handler/git_ref/tree.rs lib/repo/handler/git_ref/tree.rs +5 −2 View lib/repo/handler/git_ref/tree.rs
@@ -15,7 +15,7 @@
1515
1616#[utoipa::path(
1717 get,
18 path = "/repo/{channel_id}/{repo_id}/git/trees/{sha}",
18 path = "/repos/{space_name}/{repo_id}/git/trees/{sha}",
1919 tag = "repo",
2020 params(TreeQuery),
2121 responses((status = 200, description = "Get a tree", body = AppResponseData<TreeView>)),
@@ -24,9 +24,12 @@
2424pub(crate) async fn handler(
2525 State(svc): State<RepoService>,
2626 AuthUser { claims }: AuthUser,
27 Path((_, repo_id, sha)): Path<(Uuid, Uuid, String)>,
27 Path((space_name, repo_id, sha)): Path<(String, Uuid, String)>,
2828 Query(q): Query<TreeQuery>,
2929) -> RepoResult<AppResponseData<TreeView>> {
30 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
31 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
32 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
3033 let view = svc
3134 .get_tree(claims.sub, repo_id, &sha, q.recursive.unwrap_or(false))
3235 .await?;
Modified lib/repo/handler/lifecycle/archive.rs lib/repo/handler/lifecycle/archive.rs +5 −2 View lib/repo/handler/lifecycle/archive.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/archive",
13 path = "/repos/{space_name}/{repo_id}/archive",
1414 tag = "repo",
1515 request_body = AppRequestData<ArchiveRepoOption>,
1616 responses((status = 200, description = "Archive / unarchive a repository", body = AppResponseData<RepoView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<ArchiveRepoOption>,
2424) -> RepoResult<AppResponseData<RepoView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .archive_repo(claims.sub, channel_id, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/lifecycle/delete.rs lib/repo/handler/lifecycle/delete.rs +5 −2 View lib/repo/handler/lifecycle/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}",
12 path = "/repos/{space_name}/{repo_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a repository")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
20 Path((space_name, repo_id)): Path<(String, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_repo(claims.sub, channel_id, repo_id).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/lifecycle/fork.rs lib/repo/handler/lifecycle/fork.rs +5 −2 View lib/repo/handler/lifecycle/fork.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/forks",
13 path = "/repos/{space_name}/{repo_id}/forks",
1414 tag = "repo",
1515 request_body = AppRequestData<ForkRepoOption>,
1616 responses((status = 201, description = "Fork a repository", body = AppResponseData<RepoView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<ForkRepoOption>,
2424) -> RepoResult<AppResponseData<RepoView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .fork_repo(claims.sub, channel_id, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/lifecycle/generate.rs lib/repo/handler/lifecycle/generate.rs +5 −2 View lib/repo/handler/lifecycle/generate.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/generate",
13 path = "/repos/{space_name}/{repo_id}/generate",
1414 tag = "repo",
1515 request_body = AppRequestData<GenerateRepoOption>,
1616 responses((status = 201, description = "Generate a repository from template", body = AppResponseData<RepoView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<GenerateRepoOption>,
2424) -> RepoResult<AppResponseData<RepoView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .generate_repo(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/lifecycle/get.rs lib/repo/handler/lifecycle/get.rs +5 −2 View lib/repo/handler/lifecycle/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}",
13 path = "/repos/{space_name}/{repo_id}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a repository", body = AppResponseData<RepoView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<RepoView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_repo(claims.sub, channel_id, repo_id).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/lifecycle/rename.rs lib/repo/handler/lifecycle/rename.rs +5 −2 View lib/repo/handler/lifecycle/rename.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/rename",
13 path = "/repos/{space_name}/{repo_id}/rename",
1414 tag = "repo",
1515 request_body = AppRequestData<RenameRepoOption>,
1616 responses((status = 200, description = "Rename a repository", body = AppResponseData<RepoView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<RenameRepoOption>,
2424) -> RepoResult<AppResponseData<RepoView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .rename_repo(claims.sub, channel_id, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/lifecycle/transfer.rs lib/repo/handler/lifecycle/transfer.rs +5 −2 View lib/repo/handler/lifecycle/transfer.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/transfer",
13 path = "/repos/{space_name}/{repo_id}/transfer",
1414 tag = "repo",
1515 request_body = AppRequestData<TransferRepoOption>,
1616 responses((status = 200, description = "Transfer a repository", body = AppResponseData<RepoView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<TransferRepoOption>,
2424) -> RepoResult<AppResponseData<RepoView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .transfer_repo(claims.sub, channel_id, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/lifecycle/update.rs lib/repo/handler/lifecycle/update.rs +5 −2 View lib/repo/handler/lifecycle/update.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 patch,
13 path = "/repo/{channel_id}/{repo_id}",
13 path = "/repos/{space_name}/{repo_id}",
1414 tag = "repo",
1515 request_body = AppRequestData<UpdateRepoOption>,
1616 responses((status = 200, description = "Update a repository", body = AppResponseData<RepoView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((channel_id, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<UpdateRepoOption>,
2424) -> RepoResult<AppResponseData<RepoView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .update_repo(claims.sub, channel_id, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/pull_request/comment/create.rs lib/repo/handler/pull_request/comment/create.rs +5 −2 View lib/repo/handler/pull_request/comment/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/comments",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/comments",
1414 tag = "repo",
1515 request_body = AppRequestData<CreatePullRequestCommentOption>,
1616 responses((status = 201, description = "Create a pull request comment", body = AppResponseData<PullRequestCommentView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
22 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2323 input: AppRequest<CreatePullRequestCommentOption>,
2424) -> RepoResult<AppResponseData<PullRequestCommentView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_pull_request_comment(claims.sub, repo_id, number, input.into_inner())
2730 .await?;
Modified lib/repo/handler/pull_request/comment/list.rs lib/repo/handler/pull_request/comment/list.rs +5 −2 View lib/repo/handler/pull_request/comment/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/comments",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/comments",
1414 tag = "repo",
1515 responses((status = 200, description = "List pull request comments", body = AppResponseData<Vec<PullRequestCommentView>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<Vec<PullRequestCommentView>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let items = svc
2427 .list_pull_request_comments(claims.sub, repo_id, number)
2528 .await?;
Modified lib/repo/handler/pull_request/review/list.rs lib/repo/handler/pull_request/review/list.rs +5 −2 View lib/repo/handler/pull_request/review/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/reviews",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/reviews",
1414 tag = "repo",
1515 responses((status = 200, description = "List pull request reviews", body = AppResponseData<Vec<PullRequestReviewView>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<Vec<PullRequestReviewView>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let items = svc
2427 .list_pull_request_reviews(claims.sub, repo_id, number)
2528 .await?;
Modified lib/repo/handler/pull_request/review/submit.rs lib/repo/handler/pull_request/review/submit.rs +5 −2 View lib/repo/handler/pull_request/review/submit.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/reviews",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/reviews",
1414 tag = "repo",
1515 request_body = AppRequestData<SubmitPullRequestReviewOption>,
1616 responses((status = 201, description = "Submit a pull request review", body = AppResponseData<PullRequestReviewView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
22 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2323 input: AppRequest<SubmitPullRequestReviewOption>,
2424) -> RepoResult<AppResponseData<PullRequestReviewView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .submit_pull_request_review(claims.sub, repo_id, number, input.into_inner())
2730 .await?;
Modified lib/repo/handler/pull_request/close.rs lib/repo/handler/pull_request/close.rs +5 −2 View lib/repo/handler/pull_request/close.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/close",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/close",
1414 tag = "repo",
1515 responses((status = 200, description = "Close a pull request", body = AppResponseData<PullRequestView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<PullRequestView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.close_pull_request(claims.sub, repo_id, number).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/pull_request/create.rs lib/repo/handler/pull_request/create.rs +5 −2 View lib/repo/handler/pull_request/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls",
13 path = "/repos/{space_name}/{repo_id}/pulls",
1414 tag = "repo",
1515 request_body = AppRequestData<CreatePullRequestOption>,
1616 responses((status = 201, description = "Create a pull request", body = AppResponseData<PullRequestView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreatePullRequestOption>,
2424) -> RepoResult<AppResponseData<PullRequestView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_pull_request(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/pull_request/event.rs lib/repo/handler/pull_request/event.rs +5 −2 View lib/repo/handler/pull_request/event.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/events",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/events",
1414 tag = "repo",
1515 responses((status = 200, description = "List pull request events", body = AppResponseData<Vec<PullRequestEventView>>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<Vec<PullRequestEventView>>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let items = svc
2427 .list_pull_request_events(claims.sub, repo_id, number)
2528 .await?;
Modified lib/repo/handler/pull_request/get.rs lib/repo/handler/pull_request/get.rs +5 −2 View lib/repo/handler/pull_request/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a pull request", body = AppResponseData<PullRequestView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<PullRequestView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_pull_request(claims.sub, repo_id, number).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/pull_request/list.rs lib/repo/handler/pull_request/list.rs +5 −2 View lib/repo/handler/pull_request/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/pulls",
13 path = "/repos/{space_name}/{repo_id}/pulls",
1414 tag = "repo",
1515 params(ListPullRequestQuery),
1616 responses((status = 200, description = "List pull requests", body = AppResponseData<PullRequestPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListPullRequestQuery>,
2424) -> RepoResult<AppResponseData<PullRequestPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_pull_requests(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/pull_request/lock.rs lib/repo/handler/pull_request/lock.rs +5 −2 View lib/repo/handler/pull_request/lock.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/lock",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/lock",
1414 tag = "repo",
1515 responses((status = 200, description = "Lock a pull request", body = AppResponseData<PullRequestView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<PullRequestView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.lock_pull_request(claims.sub, repo_id, number).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/pull_request/merge.rs lib/repo/handler/pull_request/merge.rs +5 −2 View lib/repo/handler/pull_request/merge.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/merge",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/merge",
1414 tag = "repo",
1515 request_body = AppRequestData<MergePullRequestOption>,
1616 responses((status = 200, description = "Merge a pull request", body = AppResponseData<MergeView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
22 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2323 input: AppRequest<MergePullRequestOption>,
2424) -> RepoResult<AppResponseData<MergeView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .merge_pull_request(claims.sub, repo_id, number, input.into_inner())
2730 .await?;
Modified lib/repo/handler/pull_request/reopen.rs lib/repo/handler/pull_request/reopen.rs +5 −2 View lib/repo/handler/pull_request/reopen.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/reopen",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/reopen",
1414 tag = "repo",
1515 responses((status = 200, description = "Reopen a pull request", body = AppResponseData<PullRequestView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<PullRequestView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.reopen_pull_request(claims.sub, repo_id, number).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/pull_request/unlock.rs lib/repo/handler/pull_request/unlock.rs +5 −2 View lib/repo/handler/pull_request/unlock.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}/unlock",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}/unlock",
1414 tag = "repo",
1515 responses((status = 200, description = "Unlock a pull request", body = AppResponseData<PullRequestView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
21 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2222) -> RepoResult<AppResponseData<PullRequestView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.unlock_pull_request(claims.sub, repo_id, number).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/pull_request/update.rs lib/repo/handler/pull_request/update.rs +5 −2 View lib/repo/handler/pull_request/update.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 patch,
13 path = "/repo/{channel_id}/{repo_id}/pulls/{number}",
13 path = "/repos/{space_name}/{repo_id}/pulls/{number}",
1414 tag = "repo",
1515 request_body = AppRequestData<UpdatePullRequestOption>,
1616 responses((status = 200, description = "Update a pull request", body = AppResponseData<PullRequestView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, number)): Path<(Uuid, Uuid, i64)>,
22 Path((space_name, repo_id, number)): Path<(String, Uuid, i64)>,
2323 input: AppRequest<UpdatePullRequestOption>,
2424) -> RepoResult<AppResponseData<PullRequestView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .update_pull_request(claims.sub, repo_id, number, input.into_inner())
2730 .await?;
Modified lib/repo/handler/release/by_tag.rs lib/repo/handler/release/by_tag.rs +5 −2 View lib/repo/handler/release/by_tag.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/releases/tags/{tag}",
13 path = "/repos/{space_name}/{repo_id}/releases/tags/{tag}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a release by tag", body = AppResponseData<ReleaseView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, tag)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, tag)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<ReleaseView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_release_by_tag(claims.sub, repo_id, &tag).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/release/create.rs lib/repo/handler/release/create.rs +5 −2 View lib/repo/handler/release/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/releases",
13 path = "/repos/{space_name}/{repo_id}/releases",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateReleaseOption>,
1616 responses((status = 201, description = "Create a release", body = AppResponseData<ReleaseView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreateReleaseOption>,
2424) -> RepoResult<AppResponseData<ReleaseView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_release(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/release/delete.rs lib/repo/handler/release/delete.rs +5 −2 View lib/repo/handler/release/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/releases/{release_id}",
12 path = "/repos/{space_name}/{repo_id}/releases/{release_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a release")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, release_id)): Path<(Uuid, Uuid, Uuid)>,
20 Path((space_name, repo_id, release_id)): Path<(String, Uuid, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_release(claims.sub, repo_id, release_id).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/release/delete_by_tag.rs lib/repo/handler/release/delete_by_tag.rs +5 −2 View lib/repo/handler/release/delete_by_tag.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/releases/tags/{tag}",
12 path = "/repos/{space_name}/{repo_id}/releases/tags/{tag}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a release by tag")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, tag)): Path<(Uuid, Uuid, String)>,
20 Path((space_name, repo_id, tag)): Path<(String, Uuid, String)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_release_by_tag(claims.sub, repo_id, &tag).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/release/edit.rs lib/repo/handler/release/edit.rs +5 −2 View lib/repo/handler/release/edit.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 patch,
13 path = "/repo/{channel_id}/{repo_id}/releases/{release_id}",
13 path = "/repos/{space_name}/{repo_id}/releases/{release_id}",
1414 tag = "repo",
1515 request_body = AppRequestData<EditReleaseOption>,
1616 responses((status = 200, description = "Edit a release", body = AppResponseData<ReleaseView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, release_id)): Path<(Uuid, Uuid, Uuid)>,
22 Path((space_name, repo_id, release_id)): Path<(String, Uuid, Uuid)>,
2323 input: AppRequest<EditReleaseOption>,
2424) -> RepoResult<AppResponseData<ReleaseView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .edit_release(claims.sub, repo_id, release_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/release/get.rs lib/repo/handler/release/get.rs +5 −2 View lib/repo/handler/release/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/releases/{release_id}",
13 path = "/repos/{space_name}/{repo_id}/releases/{release_id}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a release", body = AppResponseData<ReleaseView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, release_id)): Path<(Uuid, Uuid, Uuid)>,
21 Path((space_name, repo_id, release_id)): Path<(String, Uuid, Uuid)>,
2222) -> RepoResult<AppResponseData<ReleaseView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_release(claims.sub, repo_id, release_id).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/release/latest.rs lib/repo/handler/release/latest.rs +5 −2 View lib/repo/handler/release/latest.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/releases/latest",
13 path = "/repos/{space_name}/{repo_id}/releases/latest",
1414 tag = "repo",
1515 responses((status = 200, description = "Get the latest release", body = AppResponseData<ReleaseView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<ReleaseView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_latest_release(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/release/list.rs lib/repo/handler/release/list.rs +5 −2 View lib/repo/handler/release/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/releases",
13 path = "/repos/{space_name}/{repo_id}/releases",
1414 tag = "repo",
1515 params(ListReleaseQuery),
1616 responses((status = 200, description = "List releases", body = AppResponseData<ReleasePage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListReleaseQuery>,
2424) -> RepoResult<AppResponseData<ReleasePage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_releases(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/subscriber/list.rs lib/repo/handler/subscriber/list.rs +5 −2 View lib/repo/handler/subscriber/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/subscribers",
13 path = "/repos/{space_name}/{repo_id}/subscribers",
1414 tag = "repo",
1515 params(ListSubscriberQuery),
1616 responses((status = 200, description = "List subscribers", body = AppResponseData<SubscriberPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListSubscriberQuery>,
2424) -> RepoResult<AppResponseData<SubscriberPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_subscribers(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/sync/get.rs lib/repo/handler/sync/get.rs +5 −2 View lib/repo/handler/sync/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/sync",
13 path = "/repos/{space_name}/{repo_id}/sync",
1414 tag = "repo",
1515 responses((status = 200, description = "Get repo metadata sync status", body = AppResponseData<SyncStatus>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<SyncStatus>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let status = svc.get_sync_status(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(status))
2528}
Modified lib/repo/handler/sync/run.rs lib/repo/handler/sync/run.rs +5 −2 View lib/repo/handler/sync/run.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/sync/run",
13 path = "/repos/{space_name}/{repo_id}/sync/run",
1414 tag = "repo",
1515 responses((status = 200, description = "Trigger a metadata sync", body = AppResponseData<SyncResult>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<SyncResult>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let result = svc.sync_repo_metadata(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(result))
2528}
Modified lib/repo/handler/tag/create.rs lib/repo/handler/tag/create.rs +5 −2 View lib/repo/handler/tag/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/tags",
13 path = "/repos/{space_name}/{repo_id}/tags",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateTagOption>,
1616 responses((status = 201, description = "Create a tag", body = AppResponseData<TagView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreateTagOption>,
2424) -> RepoResult<AppResponseData<TagView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_tag(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/tag/delete.rs lib/repo/handler/tag/delete.rs +5 −2 View lib/repo/handler/tag/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/tags/{tag_name}",
12 path = "/repos/{space_name}/{repo_id}/tags/{tag_name}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a tag")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, name)): Path<(Uuid, Uuid, String)>,
20 Path((space_name, repo_id, name)): Path<(String, Uuid, String)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_tag(claims.sub, repo_id, &name).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/tag/get.rs lib/repo/handler/tag/get.rs +5 −2 View lib/repo/handler/tag/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/tags/{tag_name}",
13 path = "/repos/{space_name}/{repo_id}/tags/{tag_name}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a tag", body = AppResponseData<TagView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, name)): Path<(Uuid, Uuid, String)>,
21 Path((space_name, repo_id, name)): Path<(String, Uuid, String)>,
2222) -> RepoResult<AppResponseData<TagView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc.get_tag(claims.sub, repo_id, &name).await?;
2427 Ok(AppResponseData::ok(view))
2528}
Modified lib/repo/handler/tag/list.rs lib/repo/handler/tag/list.rs +5 −2 View lib/repo/handler/tag/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/tags",
13 path = "/repos/{space_name}/{repo_id}/tags",
1414 tag = "repo",
1515 params(ListTagQuery),
1616 responses((status = 200, description = "List tags", body = AppResponseData<TagPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListTagQuery>,
2424) -> RepoResult<AppResponseData<TagPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_tags(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/tag_protection/create.rs lib/repo/handler/tag_protection/create.rs +5 −2 View lib/repo/handler/tag_protection/create.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 post,
13 path = "/repo/{channel_id}/{repo_id}/tag_protections",
13 path = "/repos/{space_name}/{repo_id}/tag_protections",
1414 tag = "repo",
1515 request_body = AppRequestData<CreateTagProtectionOption>,
1616 responses((status = 201, description = "Create a tag protection", body = AppResponseData<TagProtectionView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<CreateTagProtectionOption>,
2424) -> RepoResult<AppResponseData<TagProtectionView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .create_tag_protection(claims.sub, repo_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/tag_protection/delete.rs lib/repo/handler/tag_protection/delete.rs +5 −2 View lib/repo/handler/tag_protection/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/tag_protections/{policy_id}",
12 path = "/repos/{space_name}/{repo_id}/tag_protections/{policy_id}",
1313 tag = "repo",
1414 responses((status = 204, description = "Delete a tag protection")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, policy_id)): Path<(Uuid, Uuid, Uuid)>,
20 Path((space_name, repo_id, policy_id)): Path<(String, Uuid, Uuid)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_tag_protection(claims.sub, repo_id, policy_id)
2326 .await?;
2427 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/tag_protection/edit.rs lib/repo/handler/tag_protection/edit.rs +5 −2 View lib/repo/handler/tag_protection/edit.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 patch,
13 path = "/repo/{channel_id}/{repo_id}/tag_protections/{policy_id}",
13 path = "/repos/{space_name}/{repo_id}/tag_protections/{policy_id}",
1414 tag = "repo",
1515 request_body = AppRequestData<EditTagProtectionOption>,
1616 responses((status = 200, description = "Edit a tag protection", body = AppResponseData<TagProtectionView>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id, policy_id)): Path<(Uuid, Uuid, Uuid)>,
22 Path((space_name, repo_id, policy_id)): Path<(String, Uuid, Uuid)>,
2323 input: AppRequest<EditTagProtectionOption>,
2424) -> RepoResult<AppResponseData<TagProtectionView>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let view = svc
2629 .edit_tag_protection(claims.sub, repo_id, policy_id, input.into_inner())
2730 .await?;
Modified lib/repo/handler/tag_protection/get.rs lib/repo/handler/tag_protection/get.rs +5 −2 View lib/repo/handler/tag_protection/get.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/tag_protections/{policy_id}",
13 path = "/repos/{space_name}/{repo_id}/tag_protections/{policy_id}",
1414 tag = "repo",
1515 responses((status = 200, description = "Get a tag protection", body = AppResponseData<TagProtectionView>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id, policy_id)): Path<(Uuid, Uuid, Uuid)>,
21 Path((space_name, repo_id, policy_id)): Path<(String, Uuid, Uuid)>,
2222) -> RepoResult<AppResponseData<TagProtectionView>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let view = svc
2427 .get_tag_protection(claims.sub, repo_id, policy_id)
2528 .await?;
Modified lib/repo/handler/tag_protection/list.rs lib/repo/handler/tag_protection/list.rs +5 −2 View lib/repo/handler/tag_protection/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/tag_protections",
13 path = "/repos/{space_name}/{repo_id}/tag_protections",
1414 tag = "repo",
1515 params(ListTagProtectionQuery),
1616 responses((status = 200, description = "List tag protections", body = AppResponseData<TagProtectionPage>)),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 Query(q): Query<ListTagProtectionQuery>,
2424) -> RepoResult<AppResponseData<TagProtectionPage>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 let page = svc.list_tag_protections(claims.sub, repo_id, q).await?;
2629 Ok(AppResponseData::ok(page))
2730}
Modified lib/repo/handler/topic/add.rs lib/repo/handler/topic/add.rs +5 −2 View lib/repo/handler/topic/add.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 put,
12 path = "/repo/{channel_id}/{repo_id}/topics/{topic}",
12 path = "/repos/{space_name}/{repo_id}/topics/{topic}",
1313 tag = "repo",
1414 responses((status = 204, description = "Add a topic")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, topic)): Path<(Uuid, Uuid, String)>,
20 Path((space_name, repo_id, topic)): Path<(String, Uuid, String)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.add_repo_topic(claims.sub, repo_id, &topic).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/topic/delete.rs lib/repo/handler/topic/delete.rs +5 −2 View lib/repo/handler/topic/delete.rs
@@ -9,7 +9,7 @@
99
1010#[utoipa::path(
1111 delete,
12 path = "/repo/{channel_id}/{repo_id}/topics/{topic}",
12 path = "/repos/{space_name}/{repo_id}/topics/{topic}",
1313 tag = "repo",
1414 responses((status = 204, description = "Remove a topic")),
1515 security(("bearer_auth" = []))
@@ -17,8 +17,11 @@
1717pub(crate) async fn handler(
1818 State(svc): State<RepoService>,
1919 AuthUser { claims }: AuthUser,
20 Path((_, repo_id, topic)): Path<(Uuid, Uuid, String)>,
20 Path((space_name, repo_id, topic)): Path<(String, Uuid, String)>,
2121) -> RepoResult<AppResponseData<NoData>> {
22 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
23 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
24 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2225 svc.delete_repo_topic(claims.sub, repo_id, &topic).await?;
2326 Ok(AppResponseData::<NoData>::empty())
2427}
Modified lib/repo/handler/topic/list.rs lib/repo/handler/topic/list.rs +5 −2 View lib/repo/handler/topic/list.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 get,
13 path = "/repo/{channel_id}/{repo_id}/topics",
13 path = "/repos/{space_name}/{repo_id}/topics",
1414 tag = "repo",
1515 responses((status = 200, description = "List repo topics", body = AppResponseData<TopicList>)),
1616 security(("bearer_auth" = []))
@@ -18,8 +18,11 @@
1818pub(crate) async fn handler(
1919 State(svc): State<RepoService>,
2020 AuthUser { claims }: AuthUser,
21 Path((_, repo_id)): Path<(Uuid, Uuid)>,
21 Path((space_name, repo_id)): Path<(String, Uuid)>,
2222) -> RepoResult<AppResponseData<TopicList>> {
23 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
24 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
25 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2326 let list = svc.list_repo_topics(claims.sub, repo_id).await?;
2427 Ok(AppResponseData::ok(list))
2528}
Modified lib/repo/handler/topic/update.rs lib/repo/handler/topic/update.rs +5 −2 View lib/repo/handler/topic/update.rs
@@ -10,7 +10,7 @@
1010
1111#[utoipa::path(
1212 put,
13 path = "/repo/{channel_id}/{repo_id}/topics",
13 path = "/repos/{space_name}/{repo_id}/topics",
1414 tag = "repo",
1515 request_body = AppRequestData<RepoTopicOptions>,
1616 responses((status = 204, description = "Replace repo topics")),
@@ -19,9 +19,12 @@
1919pub(crate) async fn handler(
2020 State(svc): State<RepoService>,
2121 AuthUser { claims }: AuthUser,
22 Path((_, repo_id)): Path<(Uuid, Uuid)>,
22 Path((space_name, repo_id)): Path<(String, Uuid)>,
2323 input: AppRequest<RepoTopicOptions>,
2424) -> RepoResult<AppResponseData<NoData>> {
25 let space_id = space::features::lookup::lookup_space_by_name(&svc, &space_name).await?;
26 space::features::authz::require_active_member(&svc, claims.sub, space_id).await?;
27 let _channel_id = crate::features::lookup::channel_for_repo(&svc, repo_id).await?;
2528 svc.update_repo_topics(claims.sub, repo_id, input.into_inner())
2629 .await?;
2730 Ok(AppResponseData::<NoData>::empty())
Modified lib/repo/handler/openapi.rs lib/repo/handler/openapi.rs +31 −0 View lib/repo/handler/openapi.rs
@@ -135,6 +135,37 @@
135135
136136 crate::handler::sync::get::handler,
137137 crate::handler::sync::run::handler,
138
139 crate::handler::extras::assigns::check_handler,
140 crate::handler::extras::avatar::post_handler,
141 crate::handler::extras::avatar::delete_handler,
142 crate::handler::extras::commits::list_handler,
143 crate::handler::extras::commits::diff_handler,
144 crate::handler::extras::contents_ext::list_handler,
145 crate::handler::extras::contents_ext::get_handler,
146 crate::handler::extras::editorconfig::handler,
147 crate::handler::extras::file_contents::get_handler,
148 crate::handler::extras::file_contents::post_handler,
149 crate::handler::extras::fork::list_handler,
150 crate::handler::extras::issue_template::handler,
151 crate::handler::extras::language::handler,
152 crate::handler::extras::license::handler,
153 crate::handler::extras::media::handler,
154 crate::handler::extras::pin::handler,
155 crate::handler::extras::raw::handler,
156 crate::handler::extras::release_attachment::list_handler,
157 crate::handler::extras::release_attachment::get_handler,
158 crate::handler::extras::repo_by_id::handler,
159 crate::handler::extras::repo_extra::get_handler,
160 crate::handler::extras::repo_extra::validate_handler,
161 crate::handler::extras::reviews::handler,
162 crate::handler::extras::search::handler,
163 crate::handler::extras::signing_key::gpg_handler,
164 crate::handler::extras::signing_key::ssh_handler,
165 crate::handler::extras::stargazer::handler,
166 crate::handler::extras::subscription::get_handler,
167 crate::handler::extras::subscription::put_handler,
168 crate::handler::extras::subscription::delete_handler,
138169 ),
139170 components(schemas(
140171
Modified lib/repo/handler/routes.rs lib/repo/handler/routes.rs +81 −81 View lib/repo/handler/routes.rs
@@ -11,351 +11,351 @@
1111 .route("/repos", post(super::lifecycle::create::handler))
1212 .route("/repos", get(super::lifecycle::list::handler))
1313 .route(
14 "/repo/{channel_id}/{repo_id}",
14 "/repos/{space_name}/{repo_id}",
1515 get(super::lifecycle::get::handler)
1616 .patch(super::lifecycle::update::handler)
1717 .delete(super::lifecycle::delete::handler),
1818 )
1919 .route(
20 "/repo/{channel_id}/{repo_id}/transfer",
20 "/repos/{space_name}/{repo_id}/transfer",
2121 post(super::lifecycle::transfer::handler),
2222 )
2323 .route(
24 "/repo/{channel_id}/{repo_id}/archive",
24 "/repos/{space_name}/{repo_id}/archive",
2525 post(super::lifecycle::archive::handler),
2626 )
2727 .route(
28 "/repo/{channel_id}/{repo_id}/rename",
28 "/repos/{space_name}/{repo_id}/rename",
2929 post(super::lifecycle::rename::handler),
3030 )
3131 .route(
32 "/repo/{channel_id}/{repo_id}/forks",
32 "/repos/{space_name}/{repo_id}/forks",
3333 post(super::lifecycle::fork::handler),
3434 )
3535 .route(
36 "/repo/{channel_id}/{repo_id}/generate",
36 "/repos/{space_name}/{repo_id}/generate",
3737 post(super::lifecycle::generate::handler),
3838 )
3939 .route(
40 "/repo/{channel_id}/{repo_id}/branches",
40 "/repos/{space_name}/{repo_id}/branches",
4141 get(super::branch::list::handler).post(super::branch::create::handler),
4242 )
4343 .route(
44 "/repo/{channel_id}/{repo_id}/pulls",
44 "/repos/{space_name}/{repo_id}/pulls",
4545 get(super::pull_request::list::handler).post(super::pull_request::create::handler),
4646 )
4747 .route(
48 "/repo/{channel_id}/{repo_id}/pulls/{number}",
48 "/repos/{space_name}/{repo_id}/pulls/{number}",
4949 get(super::pull_request::get::handler).patch(super::pull_request::update::handler),
5050 )
5151 .route(
52 "/repo/{channel_id}/{repo_id}/pulls/{number}/close",
52 "/repos/{space_name}/{repo_id}/pulls/{number}/close",
5353 post(super::pull_request::close::handler),
5454 )
5555 .route(
56 "/repo/{channel_id}/{repo_id}/pulls/{number}/reopen",
56 "/repos/{space_name}/{repo_id}/pulls/{number}/reopen",
5757 post(super::pull_request::reopen::handler),
5858 )
5959 .route(
60 "/repo/{channel_id}/{repo_id}/pulls/{number}/lock",
60 "/repos/{space_name}/{repo_id}/pulls/{number}/lock",
6161 post(super::pull_request::lock::handler),
6262 )
6363 .route(
64 "/repo/{channel_id}/{repo_id}/pulls/{number}/unlock",
64 "/repos/{space_name}/{repo_id}/pulls/{number}/unlock",
6565 post(super::pull_request::unlock::handler),
6666 )
6767 .route(
68 "/repo/{channel_id}/{repo_id}/pulls/{number}/merge",
68 "/repos/{space_name}/{repo_id}/pulls/{number}/merge",
6969 post(super::pull_request::merge::handler),
7070 )
7171 .route(
72 "/repo/{channel_id}/{repo_id}/pulls/{number}/comments",
72 "/repos/{space_name}/{repo_id}/pulls/{number}/comments",
7373 get(super::pull_request::comment::list::handler)
7474 .post(super::pull_request::comment::create::handler),
7575 )
7676 .route(
77 "/repo/{channel_id}/{repo_id}/pulls/{number}/reviews",
77 "/repos/{space_name}/{repo_id}/pulls/{number}/reviews",
7878 get(super::pull_request::review::list::handler)
7979 .post(super::pull_request::review::submit::handler),
8080 )
8181 .route(
82 "/repo/{channel_id}/{repo_id}/pulls/{number}/events",
82 "/repos/{space_name}/{repo_id}/pulls/{number}/events",
8383 get(super::pull_request::event::handler),
8484 )
8585 .route(
86 "/repo/{channel_id}/{repo_id}/branches/{name}",
86 "/repos/{space_name}/{repo_id}/branches/{name}",
8787 get(super::branch::get::handler)
8888 .put(super::branch::update::handler)
8989 .delete(super::branch::delete::handler),
9090 )
9191 .route(
92 "/repo/{channel_id}/{repo_id}/branches/{name}/rename",
92 "/repos/{space_name}/{repo_id}/branches/{name}/rename",
9393 patch(super::branch::rename::handler),
9494 )
9595 .route(
96 "/repo/{channel_id}/{repo_id}/merge-upstream",
96 "/repos/{space_name}/{repo_id}/merge-upstream",
9797 post(super::branch::merge_upstream::handler),
9898 )
9999 .route(
100 "/repo/{channel_id}/{repo_id}/branch_protections",
100 "/repos/{space_name}/{repo_id}/branch_protections",
101101 get(super::branch_protection::list::handler)
102102 .post(super::branch_protection::create::handler),
103103 )
104104 .route(
105 "/repo/{channel_id}/{repo_id}/branch_protections/priority",
105 "/repos/{space_name}/{repo_id}/branch_protections/priority",
106106 post(super::branch_protection::priority::handler),
107107 )
108108 .route(
109 "/repo/{channel_id}/{repo_id}/branch_protections/{policy_id}",
109 "/repos/{space_name}/{repo_id}/branch_protections/{policy_id}",
110110 get(super::branch_protection::get::handler)
111111 .patch(super::branch_protection::edit::handler)
112112 .delete(super::branch_protection::delete::handler),
113113 )
114114 .route(
115 "/repo/{channel_id}/{repo_id}/tags",
115 "/repos/{space_name}/{repo_id}/tags",
116116 get(super::tag::list::handler).post(super::tag::create::handler),
117117 )
118118 .route(
119 "/repo/{channel_id}/{repo_id}/tags/{name}",
119 "/repos/{space_name}/{repo_id}/tags/{name}",
120120 get(super::tag::get::handler).delete(super::tag::delete::handler),
121121 )
122122 .route(
123 "/repo/{channel_id}/{repo_id}/tag_protections",
123 "/repos/{space_name}/{repo_id}/tag_protections",
124124 get(super::tag_protection::list::handler).post(super::tag_protection::create::handler),
125125 )
126126 .route(
127 "/repo/{channel_id}/{repo_id}/tag_protections/{policy_id}",
127 "/repos/{space_name}/{repo_id}/tag_protections/{policy_id}",
128128 get(super::tag_protection::get::handler)
129129 .patch(super::tag_protection::edit::handler)
130130 .delete(super::tag_protection::delete::handler),
131131 )
132132 .route(
133 "/repo/{channel_id}/{repo_id}/releases",
133 "/repos/{space_name}/{repo_id}/releases",
134134 get(super::release::list::handler).post(super::release::create::handler),
135135 )
136136 .route(
137 "/repo/{channel_id}/{repo_id}/releases/latest",
137 "/repos/{space_name}/{repo_id}/releases/latest",
138138 get(super::release::latest::handler),
139139 )
140140 .route(
141 "/repo/{channel_id}/{repo_id}/releases/tags/{tag}",
141 "/repos/{space_name}/{repo_id}/releases/tags/{tag}",
142142 get(super::release::by_tag::handler).delete(super::release::delete_by_tag::handler),
143143 )
144144 .route(
145 "/repo/{channel_id}/{repo_id}/releases/{release_id}",
145 "/repos/{space_name}/{repo_id}/releases/{release_id}",
146146 get(super::release::get::handler)
147147 .patch(super::release::edit::handler)
148148 .delete(super::release::delete::handler),
149149 )
150150 .route(
151 "/repo/{channel_id}/{repo_id}/collaborators",
151 "/repos/{space_name}/{repo_id}/collaborators",
152152 get(super::collab::list::handler),
153153 )
154154 .route(
155 "/repo/{channel_id}/{repo_id}/collaborators/{user_id}",
155 "/repos/{space_name}/{repo_id}/collaborators/{user_id}",
156156 get(super::collab::is::handler)
157157 .put(super::collab::add::handler)
158158 .delete(super::collab::delete::handler),
159159 )
160160 .route(
161 "/repo/{channel_id}/{repo_id}/collaborators/{user_id}/permission",
161 "/repos/{space_name}/{repo_id}/collaborators/{user_id}/permission",
162162 get(super::collab::permission::handler),
163163 )
164164 .route(
165 "/repo/{channel_id}/{repo_id}/keys",
165 "/repos/{space_name}/{repo_id}/keys",
166166 get(super::deploy_key::list::handler).post(super::deploy_key::create::handler),
167167 )
168168 .route(
169 "/repo/{channel_id}/{repo_id}/keys/{key_id}",
169 "/repos/{space_name}/{repo_id}/keys/{key_id}",
170170 get(super::deploy_key::get::handler).delete(super::deploy_key::delete::handler),
171171 )
172172 .route(
173 "/repo/{channel_id}/{repo_id}/topics",
173 "/repos/{space_name}/{repo_id}/topics",
174174 get(super::topic::list::handler).put(super::topic::update::handler),
175175 )
176176 .route(
177 "/repo/{channel_id}/{repo_id}/topics/{topic}",
177 "/repos/{space_name}/{repo_id}/topics/{topic}",
178178 put(super::topic::add::handler).delete(super::topic::delete::handler),
179179 )
180180 .route("/topics/search", get(super::topic::search::handler))
181181 .route(
182 "/repo/{channel_id}/{repo_id}/statuses/{sha}",
182 "/repos/{space_name}/{repo_id}/statuses/{sha}",
183183 get(super::commit_status::list::handler).post(super::commit_status::create::handler),
184184 )
185185 .route(
186 "/repo/{channel_id}/{repo_id}/commits/{ref}/statuses",
186 "/repos/{space_name}/{repo_id}/commits/{ref}/statuses",
187187 get(super::commit_status::list_by_ref::handler),
188188 )
189189 .route(
190 "/repo/{channel_id}/{repo_id}/commits/{ref}/status",
190 "/repos/{space_name}/{repo_id}/commits/{ref}/status",
191191 get(super::commit_status::combined::handler),
192192 )
193193 .route(
194 "/repo/{channel_id}/{repo_id}/subscribers",
194 "/repos/{space_name}/{repo_id}/subscribers",
195195 get(super::subscriber::list::handler),
196196 )
197197 .route(
198 "/repo/{channel_id}/{repo_id}/contents",
198 "/repos/{space_name}/{repo_id}/contents",
199199 get(super::contents::get_list::handler),
200200 )
201201 .route(
202 "/repo/{channel_id}/{repo_id}/contents/change",
202 "/repos/{space_name}/{repo_id}/contents/change",
203203 post(super::contents::change_files::handler),
204204 )
205205 .route(
206 "/repo/{channel_id}/{repo_id}/diffpatch",
206 "/repos/{space_name}/{repo_id}/diffpatch",
207207 post(super::contents::diff_patch::handler),
208208 )
209209 .route(
210 "/repo/{channel_id}/{repo_id}/contents/{*path}",
210 "/repos/{space_name}/{repo_id}/contents/{*path}",
211211 get(super::contents::get::handler)
212212 .post(super::contents::create::handler)
213213 .put(super::contents::update::handler)
214214 .delete(super::contents::delete::handler),
215215 )
216216 .route(
217 "/repo/{channel_id}/{repo_id}/archive/{archive_format}/{ref_name}",
217 "/repos/{space_name}/{repo_id}/archive/{archive_format}/{ref_name}",
218218 get(super::archive::get::handler),
219219 )
220220 .route(
221 "/repo/{channel_id}/{repo_id}/compare/{*spec}",
221 "/repos/{space_name}/{repo_id}/compare/{*spec}",
222222 get(super::compare::compare::handler),
223223 )
224224 .route(
225 "/repo/{channel_id}/{repo_id}/git/refs",
225 "/repos/{space_name}/{repo_id}/git/refs",
226226 get(super::git_ref::refs::handler),
227227 )
228228 .route(
229 "/repo/{channel_id}/{repo_id}/git/refs/{*filter}",
229 "/repos/{space_name}/{repo_id}/git/refs/{*filter}",
230230 get(super::git_ref::refs_filter::handler),
231231 )
232232 .route(
233 "/repo/{channel_id}/{repo_id}/git/commits/{*sha}",
233 "/repos/{space_name}/{repo_id}/git/commits/{*sha}",
234234 get(super::git_ref::commit::handler),
235235 )
236236 .route(
237 "/repo/{channel_id}/{repo_id}/git/tags/{*sha}",
237 "/repos/{space_name}/{repo_id}/git/tags/{*sha}",
238238 get(super::git_ref::annotated_tag::handler),
239239 )
240240 .route(
241 "/repo/{channel_id}/{repo_id}/git/trees/{*sha}",
241 "/repos/{space_name}/{repo_id}/git/trees/{*sha}",
242242 get(super::git_ref::tree::handler),
243243 )
244244 .route(
245 "/repo/{channel_id}/{repo_id}/git/blobs/{*sha}",
245 "/repos/{space_name}/{repo_id}/git/blobs/{*sha}",
246246 get(super::git_ref::blob::handler),
247247 )
248248 .route(
249 "/repo/{channel_id}/{repo_id}/git/notes/{*sha}",
249 "/repos/{space_name}/{repo_id}/git/notes/{*sha}",
250250 get(super::git_ref::notes::handler),
251251 )
252252 .route(
253 "/repo/{channel_id}/{repo_id}/sync",
253 "/repos/{space_name}/{repo_id}/sync",
254254 get(super::sync::get::handler),
255255 )
256256 .route(
257 "/repo/{channel_id}/{repo_id}/sync/run",
257 "/repos/{space_name}/{repo_id}/sync/run",
258258 post(super::sync::run::handler),
259259 )
260260 .route("/repos/search", get(super::extras::search::handler))
261261 .route("/repositories/{id}", get(super::extras::repo_by_id::handler))
262262 .route(
263 "/repo/{channel_id}/{repo_id}/avatar",
263 "/repos/{space_name}/{repo_id}/avatar",
264264 post(super::extras::avatar::post_handler).delete(super::extras::avatar::delete_handler),
265265 )
266266 .route(
267 "/repo/{channel_id}/{repo_id}/issue_templates",
267 "/repos/{space_name}/{repo_id}/issue_templates",
268268 get(super::extras::issue_template::handler),
269269 )
270270 .route(
271 "/repo/{channel_id}/{repo_id}/issue_config",
271 "/repos/{space_name}/{repo_id}/issue_config",
272272 get(super::extras::repo_extra::get_handler),
273273 )
274274 .route(
275 "/repo/{channel_id}/{repo_id}/issue_config/validate",
275 "/repos/{space_name}/{repo_id}/issue_config/validate",
276276 get(super::extras::repo_extra::validate_handler),
277277 )
278278 .route(
279 "/repo/{channel_id}/{repo_id}/languages",
279 "/repos/{space_name}/{repo_id}/languages",
280280 get(super::extras::language::handler),
281281 )
282282 .route(
283 "/repo/{channel_id}/{repo_id}/licenses",
283 "/repos/{space_name}/{repo_id}/licenses",
284284 get(super::extras::license::handler),
285285 )
286286 .route(
287 "/repo/{channel_id}/{repo_id}/stargazers",
287 "/repos/{space_name}/{repo_id}/stargazers",
288288 get(super::extras::stargazer::handler),
289289 )
290290 .route(
291 "/repo/{channel_id}/{repo_id}/assignees/{assignee}",
291 "/repos/{space_name}/{repo_id}/assignees/{assignee}",
292292 get(super::extras::assigns::check_handler),
293293 )
294294 .route(
295 "/repo/{channel_id}/{repo_id}/reviewers",
295 "/repos/{space_name}/{repo_id}/reviewers",
296296 get(super::extras::reviews::handler),
297297 )
298298 .route(
299 "/repo/{channel_id}/{repo_id}/new_pin_allowed",
299 "/repos/{space_name}/{repo_id}/new_pin_allowed",
300300 get(super::extras::pin::handler),
301301 )
302302 .route(
303 "/repo/{channel_id}/{repo_id}/file-contents",
303 "/repos/{space_name}/{repo_id}/file-contents",
304304 get(super::extras::file_contents::get_handler)
305305 .post(super::extras::file_contents::post_handler),
306306 )
307307 .route(
308 "/repo/{channel_id}/{repo_id}/contents-ext",
308 "/repos/{space_name}/{repo_id}/contents-ext",
309309 get(super::extras::contents_ext::list_handler),
310310 )
311311 .route(
312 "/repo/{channel_id}/{repo_id}/contents-ext/{*path}",
312 "/repos/{space_name}/{repo_id}/contents-ext/{*path}",
313313 get(super::extras::contents_ext::get_handler),
314314 )
315315 .route(
316 "/repo/{channel_id}/{repo_id}/raw/{*filepath}",
316 "/repos/{space_name}/{repo_id}/raw/{*filepath}",
317317 get(super::extras::raw::handler),
318318 )
319319 .route(
320 "/repo/{channel_id}/{repo_id}/media/{*filepath}",
320 "/repos/{space_name}/{repo_id}/media/{*filepath}",
321321 get(super::extras::media::handler),
322322 )
323323 .route(
324 "/repo/{channel_id}/{repo_id}/editorconfig/{*filename}",
324 "/repos/{space_name}/{repo_id}/editorconfig/{*filename}",
325325 get(super::extras::editorconfig::handler),
326326 )
327327 .route(
328 "/repo/{channel_id}/{repo_id}/commits",
328 "/repos/{space_name}/{repo_id}/commits",
329329 get(super::extras::commits::list_handler),
330330 )
331331 .route(
332 "/repo/{channel_id}/{repo_id}/git/commits/diff/{*sha_diff}",
332 "/repos/{space_name}/{repo_id}/git/commits/diff/{*sha_diff}",
333333 get(super::extras::commits::diff_handler),
334334 )
335335 .route(
336 "/repo/{channel_id}/{repo_id}/forks",
336 "/repos/{space_name}/{repo_id}/forks",
337337 get(super::extras::fork::list_handler),
338338 )
339339 .route(
340 "/repo/{channel_id}/{repo_id}/subscription",
340 "/repos/{space_name}/{repo_id}/subscription",
341341 get(super::extras::subscription::get_handler)
342342 .put(super::extras::subscription::put_handler)
343343 .delete(super::extras::subscription::delete_handler),
344344 )
345345 .route(
346 "/repo/{channel_id}/{repo_id}/signing-key.gpg",
346 "/repos/{space_name}/{repo_id}/signing-key.gpg",
347347 get(super::extras::signing_key::gpg_handler),
348348 )
349349 .route(
350 "/repo/{channel_id}/{repo_id}/signing-key.pub",
350 "/repos/{space_name}/{repo_id}/signing-key.pub",
351351 get(super::extras::signing_key::ssh_handler),
352352 )
353353 .route(
354 "/repo/{channel_id}/{repo_id}/releases/{release_id}/assets",
354 "/repos/{space_name}/{repo_id}/releases/{release_id}/assets",
355355 get(super::extras::release_attachment::list_handler),
356356 )
357357 .route(
358 "/repo/{channel_id}/{repo_id}/releases/{release_id}/assets/{attachment_id}",
358 "/repos/{space_name}/{repo_id}/releases/{release_id}/assets/{attachment_id}",
359359 get(super::extras::release_attachment::get_handler),
360360 )
361361 .layer(from_fn_with_state(
Modified lib/repo/tests/pull_request/close.rs lib/repo/tests/pull_request/close.rs +3 −3 View lib/repo/tests/pull_request/close.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/comment_create.rs lib/repo/tests/pull_request/comment_create.rs +3 −3 View lib/repo/tests/pull_request/comment_create.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/comment_list.rs lib/repo/tests/pull_request/comment_list.rs +3 −3 View lib/repo/tests/pull_request/comment_list.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/create.rs lib/repo/tests/pull_request/create.rs +3 −3 View lib/repo/tests/pull_request/create.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/event.rs lib/repo/tests/pull_request/event.rs +3 −3 View lib/repo/tests/pull_request/event.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/get.rs lib/repo/tests/pull_request/get.rs +3 −3 View lib/repo/tests/pull_request/get.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/list.rs lib/repo/tests/pull_request/list.rs +3 −3 View lib/repo/tests/pull_request/list.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/lock.rs lib/repo/tests/pull_request/lock.rs +3 −3 View lib/repo/tests/pull_request/lock.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/main.rs lib/repo/tests/pull_request/main.rs +2 −2 View lib/repo/tests/pull_request/main.rs
@@ -44,8 +44,8 @@
4444
4545/// A syntactically valid repo UUID used in test URIs.
4646pub(crate) const REPO_ID: &str = "11111111-1111-1111-1111-111111111111";
47/// A syntactically valid channel UUID used in test URIs.
48pub(crate) const CHANNEL_ID: &str = "22222222-2222-2222-2222-222222222222";
47/// A syntactically valid space name used in test URIs.
48pub(crate) const SPACE_NAME: &str = "test-space";
4949
5050/// Build the repo router, or `None` when Redis is not reachable
5151/// (the tests then skip rather than fail).
Modified lib/repo/tests/pull_request/merge.rs lib/repo/tests/pull_request/merge.rs +3 −3 View lib/repo/tests/pull_request/merge.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/reopen.rs lib/repo/tests/pull_request/reopen.rs +3 −3 View lib/repo/tests/pull_request/reopen.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/review_list.rs lib/repo/tests/pull_request/review_list.rs +3 −3 View lib/repo/tests/pull_request/review_list.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/review_submit.rs lib/repo/tests/pull_request/review_submit.rs +3 −3 View lib/repo/tests/pull_request/review_submit.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/unlock.rs lib/repo/tests/pull_request/unlock.rs +3 −3 View lib/repo/tests/pull_request/unlock.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/tests/pull_request/update.rs lib/repo/tests/pull_request/update.rs +3 −3 View lib/repo/tests/pull_request/update.rs
@@ -1,9 +1,9 @@
1use super::{CHANNEL_ID, REPO_ID, expect_unauthorized};
1use super::{SPACE_NAME, REPO_ID, expect_unauthorized};
22
3const BASE: &str = "/repo";
3const BASE: &str = "/repos";
44
55fn repo(uri: &str) -> String {
6 format!("{BASE}/{CHANNEL_ID}/{REPO_ID}{uri}")
6 format!("{BASE}/{SPACE_NAME}/{REPO_ID}{uri}")
77}
88
99#[tokio::test]
Modified lib/repo/service.rs lib/repo/service.rs +6 −0 View lib/repo/service.rs
@@ -9,6 +9,12 @@
99
1010use rate_limit::RateLimitProvider;
1111
12impl space::SpaceDb for RepoService {
13 fn db(&self) -> &db::conn::Db {
14 &self.db
15 }
16}
17
1218#[derive(Clone)]
1319pub struct RepoService {
1420 pub db: Db,
Modified lib/space/features/spaces/usecase.rs lib/space/features/spaces/usecase.rs +31 −8 View lib/space/features/spaces/usecase.rs
@@ -391,7 +391,6 @@
391391 use config::jwt::JwtSettings;
392392 use db::conn::Db;
393393 use db::conn::sea_orm::Database;
394 use db::schema::sync_schema;
395394 use jwt::JwtState;
396395 use jwt::keys::SigningKeyCache;
397396 use tokio::sync::RwLock;
@@ -400,10 +399,13 @@
400399 use super::*;
401400 use crate::features::lookup;
402401
403 /// Build a service over an in-memory sqlite DB with the full schema
404 /// synced (including `space_name_history`). Redis is required to
405 /// construct `SpaceService`; when it is unavailable the tests skip
406 /// themselves (same convention as lib/repo/tests/pull_request).
402 /// Build a service over an in-memory sqlite DB with just the tables the
403 /// rename tests touch (`spaces` + `space_name_history`). The full
404 /// `sync_schema` cannot run on sqlite: `user_oauth_provider.scopes` is a
405 /// `Vec<String>` mapped to an Array column, which sea-query's sqlite
406 /// backend does not support. Redis is required to construct
407 /// `SpaceService`; when it is unavailable the tests skip themselves
408 /// (same convention as lib/repo/tests/pull_request).
407409 async fn test_service() -> Option<(SpaceService, Uuid)> {
408410 let mut cfg = AppRedisSettings::default();
409411 cfg.connection_timeout_ms = Some(300);
@@ -415,15 +417,36 @@
415417 return None;
416418 }
417419 };
418 let db = Database::connect("sqlite::memory:").await.unwrap();
419 sync_schema(&db).await.expect("schema sync");
420 let db = {
421 let mut opts = db::conn::sea_orm::ConnectOptions::new("sqlite::memory:");
422 opts.max_connections(1);
423 let db = Database::connect(opts).await.unwrap();
424 db.execute_unprepared("PRAGMA foreign_keys=OFF")
425 .await
426 .expect("disable foreign keys for test");
427 db
428 };
429 db.execute_unprepared("CREATE TABLE IF NOT EXISTS users (uid TEXT PRIMARY KEY)")
430 .await
431 .expect("create stub users table");
432 let schema = db::conn::sea_orm::Schema::new(db::conn::sea_orm::DatabaseBackend::Sqlite);
433 db.execute(&schema.create_table_from_entity(space_entity::Entity))
434 .await
435 .expect("create spaces table");
436 db.execute_unprepared(include_str!("../../../db/schema_name_history.sql"))
437 .await
438 .expect("create space_name_history table");
420439 let jwt = JwtState::new(
421440 Database::connect("sqlite::memory:").await.unwrap(),
422441 JwtSettings::default(),
423442 Arc::new(RwLock::new(SigningKeyCache::new())),
424443 );
444 let owner = Uuid::now_v7();
445 db.execute_unprepared(&format!("INSERT INTO users (uid) VALUES ('{owner}')"))
446 .await
447 .expect("insert stub user");
425448 let svc = SpaceService::new(Db::from_connection(db), kv, jwt);
426 Some((svc, Uuid::now_v7()))
449 Some((svc, owner))
427450 }
428451
429452 fn create_cmd(name: &str) -> CreateSpaceCmd {
Modified lib/space/features/authz.rs lib/space/features/authz.rs +4 −4 View lib/space/features/authz.rs
@@ -10,7 +10,7 @@
1010use uuid::Uuid;
1111
1212use crate::error::{SpaceError, SpaceResult};
13use crate::features::SpaceService;
13use crate::features::{SpaceDb, SpaceService};
1414
1515pub const VIEW_SPACE: &str = "view_space";
1616pub const READ: &str = "read";
@@ -131,12 +131,12 @@
131131///
132132/// Reuses `effective_permissions`, which already checks the membership
133133/// status and rejects banned / inactive callers.
134pub async fn require_active_member(
135 svc: &SpaceService,
134pub async fn require_active_member<S: SpaceDb>(
135 svc: &S,
136136 caller: Uuid,
137137 space_id: Uuid,
138138) -> SpaceResult<()> {
139 let db = svc.db.reader();
139 let db = svc.db().reader();
140140 effective_permissions(&db, space_id, caller).await?;
141141 Ok(())
142142}
Modified lib/space/features/lookup.rs lib/space/features/lookup.rs +6 −3 View lib/space/features/lookup.rs
@@ -3,7 +3,7 @@
33use uuid::Uuid;
44
55use crate::error::{SpaceError, SpaceResult};
6use crate::features::SpaceService;
6use crate::features::SpaceDb;
77
88/// Resolve a space id from a `lower_name`.
99///
@@ -11,8 +11,11 @@
1111/// `spaces.lower_name`; names retired by a rename live in
1212/// `space_name_history.lower_name`, so old URLs keep resolving to the same
1313/// space.
14pub async fn lookup_space_by_name(svc: &SpaceService, lower_name: &str) -> SpaceResult<Uuid> {
15 let db = svc.db.reader();
14pub async fn lookup_space_by_name<S: SpaceDb>(
15 svc: &S,
16 lower_name: &str,
17) -> SpaceResult<Uuid> {
18 let db = svc.db().reader();
1619 if let Some(space) = space_entity::Entity::find()
1720 .filter(space_entity::Column::LowerName.eq(lower_name))
1821 .one(&db)
Modified lib/space/features/mod.rs lib/space/features/mod.rs +16 −0 View lib/space/features/mod.rs
@@ -16,6 +16,22 @@
1616pub mod roles;
1717pub mod spaces;
1818
19/// Minimal database access surface for the space lookup / authz helpers.
20///
21/// Implemented by `SpaceService` and by sibling service structs (e.g.
22/// `repo::RepoService`) that carry a `db: db::conn::Db` field, so
23/// `lookup_space_by_name` / `require_active_member` stay usable outside
24/// the space crate without a service dependency.
25pub trait SpaceDb {
26 fn db(&self) -> &Db;
27}
28
29impl SpaceDb for SpaceService {
30 fn db(&self) -> &Db {
31 &self.db
32 }
33}
34
1935#[derive(Clone)]
2036pub struct SpaceService {
2137 pub db: Db,
Modified lib/space/lib.rs lib/space/lib.rs +1 −1 View lib/space/lib.rs
@@ -4,6 +4,6 @@
44pub mod metrics;
55
66pub use error::{SpaceError, SpaceResult};
7pub use features::SpaceService;
7pub use features::{SpaceDb, SpaceService};
88pub use handler::SpaceApiDoc;
99pub use handler::router as space_router;
Modified openapi.json openapi.json +1 −1 View openapi.json
@@ -1 +1 @@
1{"openapi":"3.1.0","info":{"title":"Untitled API","description":"Unified HTTP API for the untitled platform","license":{"name":""},"version":"1.94.0"},"paths":{"/api/v1/auth/agreements":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"List of agreement documents (terms, privacy).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_AgreementDoc"}}}}}}},"/api/v1/auth/agreements/accept":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AcceptAgreementCmd"}}},"required":true},"responses":{"200":{"description":"Agreement acceptance recorded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AcceptAgreementResp"}}}},"400":{"description":"Unknown agreement key or version mismatch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Missing or invalid access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/auth/email/reclaim":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ReclaimCmd"}}},"required":true},"responses":{"200":{"description":"A Signup verification code was issued to the mailbox if the account is inactive; otherwise a constant-shaped no-op is returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReclaimResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/email/resend":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ResendCodeCmd"}}},"required":true},"responses":{"200":{"description":"New code issued (or silently no-op if the email is unknown).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ResendCodeResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/email/verify":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_VerifyCodeCmd"}}},"required":true},"responses":{"200":{"description":"Code verified; the verification-code row id is returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_VerifyCodeResult"}}}},"400":{"description":"Invalid code, missing temp_key cookie, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_LoginCmd"}}},"required":true},"responses":{"200":{"description":"Authenticated. Returns access/refresh tokens and a public user view.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LoginResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Account forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_LogoutCmd"}}},"required":true},"responses":{"200":{"description":"Refresh token revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LogoutResp"}}}},"401":{"description":"Invalid or expired refresh token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"Authenticated user profile (full view, including privileged fields).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}},"401":{"description":"Missing or invalid access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/auth/oauth/authorize":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AuthorizeCmd"}}},"required":true},"responses":{"200":{"description":"Authorization URL. The state-cookie carries the OAuth state value for the callback.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AuthorizationUrlResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown provider.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/oauth/callback":{"get":{"tags":["auth"],"operationId":"handler","parameters":[{"name":"provider","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OAuthProvider"}},{"name":"code","in":"path","required":true,"schema":{"type":"string"}},{"name":"state","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OAuth login completed. Returns token pair and the resolved user_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_OAuthLoginResp"}}}},"400":{"description":"Missing state cookie or invalid state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"OAuth flow rejected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/oauth/providers":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"List of enabled OAuth providers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_OAuthProviderInfo"}}}}}}},"/api/v1/auth/password/forgot":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ForgotPasswordCmd"}}},"required":true},"responses":{"200":{"description":"Request accepted. The response shape is constant whether or not the email is known; the temp_key cookie carries the token for the subsequent reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ForgotPasswordResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/password/reset":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ResetPasswordCmd"}}},"required":true},"responses":{"200":{"description":"Password updated; all sessions revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ResetPasswordResp"}}}},"400":{"description":"Missing temp_key cookie, weak password, or invalid token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/pow/challenge":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"A fresh PoW challenge bound to this client.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PowChallengeResp"}}}},"400":{"description":"PoW not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RefreshCmd"}}},"required":true},"responses":{"200":{"description":"Rotated token pair.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RefreshResp"}}}},"401":{"description":"Invalid or expired refresh token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RegisterCmd"}}},"required":true},"responses":{"200":{"description":"Account created (possibly pending email verification).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RegisterResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Email or username already taken.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/health/live":{"get":{"tags":["system"],"operationId":"liveness","responses":{"200":{"description":"Process is alive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}},"/api/v1/health/ready":{"get":{"tags":["system"],"operationId":"readiness","responses":{"200":{"description":"Service is ready","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}},"/api/v1/issues":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List issue boards (collections)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_CollectionView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateCollectionOption"}}},"required":true},"responses":{"201":{"description":"Create an issue board (collection)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CollectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Default issue board OR issue list (when query.state/q/author_id/milestone_id is set)"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateIssueOption"}}},"required":true},"responses":{"201":{"description":"Create an issue in this channel's board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete default issue board"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateCollectionOption"}}},"required":true},"responses":{"200":{"description":"Update default issue board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CollectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/attachments/{owner_type}/{owner_id}":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List attachments"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UploadAttachmentInput"}}},"required":true},"responses":{"201":{"description":"Upload attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AttachmentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/attachments/{owner_type}/{owner_id}/{att_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete attachment"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/labels":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"is_archived","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List labels"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateLabelOption"}}},"required":true},"responses":{"201":{"description":"Create label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LabelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/labels/{label_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LabelView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete label"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateLabelOption"}}},"required":true},"responses":{"200":{"description":"Update label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LabelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/milestones":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"is_closed","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List milestones"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateMilestoneOption"}}},"required":true},"responses":{"201":{"description":"Create milestone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MilestoneView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/milestones/{milestone_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get milestone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MilestoneView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete milestone"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateMilestoneOption"}}},"required":true},"responses":{"200":{"description":"Update milestone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MilestoneView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/pins":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List pinned issues"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreatePinOption"}}},"required":true},"responses":{"201":{"description":"Pin issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PinView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/pins/{pin_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Unpin issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete issue"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateIssueOption"}}},"required":true},"responses":{"200":{"description":"Update issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/close":{"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CloseIssueOption"}}},"required":true},"responses":{"200":{"description":"Open/close issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/comments":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"parent_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List comments"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateCommentOption"}}},"required":true},"responses":{"201":{"description":"Create comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/comments/{comment_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommentView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete comment"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateCommentOption"}}},"required":true},"responses":{"200":{"description":"Update comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/comments/{comment_id}/reactions":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List comment reactions"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateReactionOption"}}},"required":true},"responses":{"201":{"description":"React to comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReactionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/content_history":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List content history"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/dependencies":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List dependencies"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateDependencyOption"}}},"required":true},"responses":{"201":{"description":"Create dependency","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DependencyView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/dependencies/{dep_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete dependency"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/events":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List issue events"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/labels":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List labels for issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/labels/{label_id}":{"post":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Bind label to issue"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Unbind label from issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/members":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List members"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateMemberOption"}}},"required":true},"responses":{"201":{"description":"Create member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/members/{member_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete member"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/reactions":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List issue reactions"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateReactionOption"}}},"required":true},"responses":{"201":{"description":"React to issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReactionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/reactions/{reaction_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete reaction"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/repo_relations":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List repo relations"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateRepoRelOption"}}},"required":true},"responses":{"201":{"description":"Link repo to issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoRelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/repo_relations/{rel_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Unlink repo from issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/stopwatch":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get my stopwatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_StopwatchView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","responses":{"201":{"description":"Start stopwatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_StopwatchView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Stop stopwatch"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/tracked_time":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List tracked time"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/users":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List issue users"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/users/{uid}":{"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateIssueUserOption"}}},"required":true},"responses":{"200":{"description":"Update issue user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueUserView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/watch":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get my watch state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_WatchView"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpsertWatchOption"}}},"required":true},"responses":{"200":{"description":"Upsert watch state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_WatchView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete watch state"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a repository"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateRepoOption"}}},"required":true},"responses":{"200":{"description":"Update a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/archive":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ArchiveRepoOption"}}},"required":true},"responses":{"200":{"description":"Archive / unarchive a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/archive/{archive_format}/{ref_name}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"format","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"ref_name","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Download an archive"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/branch_protections":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List branch protections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateBranchProtectionOption"}}},"required":true},"responses":{"201":{"description":"Create a branch protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/branch_protections/priority":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateBranchProtectionPriorities"}}},"required":true},"responses":{"204":{"description":"Update branch protection priorities"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/branch_protections/{policy_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a branch protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a branch protection"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_EditBranchProtectionOption"}}},"required":true},"responses":{"200":{"description":"Edit a branch protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/branches":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"keyword","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List branches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateBranchOption"}}},"required":true},"responses":{"201":{"description":"Create a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/branches/{branch_name}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateBranchOption"}}},"required":true},"responses":{"200":{"description":"Update a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a branch"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/branches/{branch_name}/rename":{"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RenameBranchOption"}}},"required":true},"responses":{"200":{"description":"Rename a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/collaborators":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List collaborators","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CollaboratorPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/collaborators/{user_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"User is a collaborator"}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddCollaboratorOption"}}},"required":true},"responses":{"204":{"description":"Add or update a collaborator"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Remove a collaborator"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/collaborators/{user_id}/permission":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get collaborator permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoCollaboratorPermission"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/commits/{ref}/status":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get combined status by ref","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CombinedStatusView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/commits/{ref}/statuses":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"sort","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"state","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List commit statuses by ref","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitStatusPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/compare/{base}...{head}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Compare two refs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CompareView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/contents":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List contents at root","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsListResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/contents/change":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ChangeFilesOptions"}}},"required":true},"responses":{"200":{"description":"Multi-file change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsListResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/contents/{path}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Get a file or directory","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateFileOption"}}},"required":true},"responses":{"200":{"description":"Update a file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateFileOption"}}},"required":true},"responses":{"201":{"description":"Create a file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_DeleteFileOption"}}},"required":true},"responses":{"204":{"description":"Delete a file"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/diffpatch":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ApplyDiffPatchFileOptions"}}},"required":true},"responses":{"200":{"description":"Apply a diff patch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/forks":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ForkRepoOption"}}},"required":true},"responses":{"201":{"description":"Fork a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/generate":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_GenerateRepoOption"}}},"required":true},"responses":{"201":{"description":"Generate a repository from template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/blobs/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a blob","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BlobView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/commits/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a commit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/commits/{sha}.{diff_type}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get commit diff or patch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitDiffPayload"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/notes/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a note","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_NoteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/refs":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List git refs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_GitRef"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/refs/{filter}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Filter git refs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_GitRef"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/tags/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get an annotated tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/git/trees/{sha}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"recursive","in":"path","required":true,"schema":{"type":["boolean","null"]}}],"responses":{"200":{"description":"Get a tree","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TreeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/keys":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"fingerprint","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List deploy keys","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeployKeyPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateDeployKeyOption"}}},"required":true},"responses":{"201":{"description":"Create a deploy key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeployKeyView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/keys/{key_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a deploy key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeployKeyView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a deploy key"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/merge-upstream":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_MergeUpstreamRequest"}}},"required":true},"responses":{"200":{"description":"Merge upstream","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MergeUpstreamResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"state","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"keyword","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List pull requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreatePullRequestOption"}}},"required":true},"responses":{"201":{"description":"Create a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdatePullRequestOption"}}},"required":true},"responses":{"200":{"description":"Update a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/close":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Close a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/comments":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List pull request comments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PullRequestCommentView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreatePullRequestCommentOption"}}},"required":true},"responses":{"201":{"description":"Create a pull request comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestCommentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/events":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List pull request events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PullRequestEventView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/lock":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Lock a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/merge":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_MergePullRequestOption"}}},"required":true},"responses":{"200":{"description":"Merge a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MergeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/reopen":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Reopen a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/reviews":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List pull request reviews","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PullRequestReviewView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SubmitPullRequestReviewOption"}}},"required":true},"responses":{"201":{"description":"Submit a pull request review","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestReviewView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/pulls/{number}/unlock":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Unlock a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/releases":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"draft","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"prerelease","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List releases","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleasePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateReleaseOption"}}},"required":true},"responses":{"201":{"description":"Create a release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/releases/latest":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get the latest release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/releases/tags/{tag}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a release by tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a release by tag"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/releases/{release_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a release"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_EditReleaseOption"}}},"required":true},"responses":{"200":{"description":"Edit a release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/rename":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RenameRepoOption"}}},"required":true},"responses":{"200":{"description":"Rename a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/statuses/{sha}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"sort","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"state","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List commit statuses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitStatusPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateStatusOption"}}},"required":true},"responses":{"201":{"description":"Create a commit status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitStatusView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/subscribers":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List subscribers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SubscriberPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/sync":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get repo metadata sync status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SyncStatus"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/sync/run":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Trigger a metadata sync","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SyncResult"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/tag_protections":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List tag protections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateTagProtectionOption"}}},"required":true},"responses":{"201":{"description":"Create a tag protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/tag_protections/{policy_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a tag protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a tag protection"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_EditTagProtectionOption"}}},"required":true},"responses":{"200":{"description":"Edit a tag protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/tags":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List tags","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateTagOption"}}},"required":true},"responses":{"201":{"description":"Create a tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/tags/{tag_name}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a tag"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/topics":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List repo topics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TopicList"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RepoTopicOptions"}}},"required":true},"responses":{"204":{"description":"Replace repo topics"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/topics/{topic}":{"put":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Add a topic"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Remove a topic"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repo/{channel_id}/{repo_id}/transfer":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_TransferRepoOption"}}},"required":true},"responses":{"200":{"description":"Transfer a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"owner_user_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"is_private","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"is_archived","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List repositories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateRepoOption"}}},"required":true},"responses":{"201":{"description":"Create a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List spaces owned by the caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpacePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateSpaceCmd"}}},"required":true},"responses":{"200":{"description":"Create a new space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/invites/accept":{"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AcceptInviteCmd"}}},"required":true},"responses":{"200":{"description":"Accept an invite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceView"}}}}}},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Delete a space"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateSpaceCmd"}}},"required":true},"responses":{"200":{"description":"Update a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/bans":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List bans in a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateBanCmd"}}},"required":true},"responses":{"200":{"description":"Ban a user from a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/bans/{uid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a ban","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Unban a user from a space"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateBanCmd"}}},"required":true},"responses":{"200":{"description":"Update a ban","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List channels in a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ChannelPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a channel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ChannelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/roles":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"List role overwrites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_RoleOverwriteView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SetRoleOverwriteCmd"}}},"required":true},"responses":{"200":{"description":"Set a role overwrite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleOverwriteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/roles/{rid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Remove a role overwrite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/users":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"List user overwrites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_UserOverwriteView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SetUserOverwriteCmd"}}},"required":true},"responses":{"200":{"description":"Set a user overwrite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserOverwriteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/users/{uid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Remove a user overwrite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/invites":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List invites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceInvitePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateInviteCmd"}}},"required":true},"responses":{"200":{"description":"Create an invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceInviteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/invites/{iid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Revoke an invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceInviteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List members of a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddMemberCmd"}}},"required":true},"responses":{"200":{"description":"Add a member to a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members/{uid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a space member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Remove a member from a space"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateMemberCmd"}}},"required":true},"responses":{"200":{"description":"Update a space member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members/{uid}/roles":{"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AssignRoleCmd"}}},"required":true},"responses":{"200":{"description":"Assign a role to a member"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members/{uid}/roles/{rid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Unassign a role from a member"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/roles":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List roles in a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RolePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateRoleCmd"}}},"required":true},"responses":{"200":{"description":"Create a role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/roles/{rid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleView"}}}}}},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Delete a role"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateRoleCmd"}}},"required":true},"responses":{"200":{"description":"Update a role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List projects","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateProjectCmd"}}},"required":true},"responses":{"201":{"description":"Create a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Delete a project"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateProjectCmd"}}},"required":true},"responses":{"200":{"description":"Update a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/activities":{"get":{"tags":["project"],"operationId":"handler","parameters":[{"name":"verb","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"per_page","in":"path","required":true,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"List activities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ActivityPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/documents":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List documents","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateDocumentCmd"}}},"required":true},"responses":{"201":{"description":"Create a document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/documents/{doc_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Delete a document"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateDocumentCmd"}}},"required":true},"responses":{"200":{"description":"Update a document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/favorites":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List favorites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_FavoritePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddFavoriteCmd"}}},"required":true},"responses":{"201":{"description":"Add a favorite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_FavoriteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/favorites/{favorite_id}":{"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Remove a favorite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/links":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List links","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LinkPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddLinkCmd"}}},"required":true},"responses":{"201":{"description":"Add a link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LinkView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/links/{link_id}":{"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Remove a link"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/members":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddMemberCmd"}}},"required":true},"responses":{"201":{"description":"Add a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/members/{user_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Remove a member"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateMemberCmd"}}},"required":true},"responses":{"200":{"description":"Update a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/views":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List views","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateViewCmd"}}},"required":true},"responses":{"201":{"description":"Create a view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/views/{view_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Delete a view"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateViewCmd"}}},"required":true},"responses":{"200":{"description":"Update a view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/topics/search":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"Search topics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TopicSearchResult"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/deletions":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List pending and scheduled deletion requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_DeletionRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/deletions/{id}/complete":{"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Deletion request id.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Deletion completed; sessions revoked."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/suspensions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"include_revoked","in":"query","description":"Include revoked suspensions (default false).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"All suspensions (admin view).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/suspensions/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Suspension id.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RevokeSuspensionCmd"}}},"required":true},"responses":{"204":{"description":"Suspension revoked."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/users/{uid}/profile":{"patch":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateProfileCmd"}}},"required":true},"responses":{"200":{"description":"Admin-updated profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/users/{uid}/suspensions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include_revoked","in":"query","description":"Include revoked suspensions (default false).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Suspensions for the given user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SuspendCmd"}}},"required":true},"responses":{"200":{"description":"Suspension created (also sets users.is_restricted = true).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Authenticated user profile (privileged view).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/access-keys":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List access keys for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_AccessKeyView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateAccessKeyCmd"}}},"required":true},"responses":{"200":{"description":"Access key created (token returned only once).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CreateAccessKeyResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/access-keys/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Access key identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Access key deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/avatar":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Current avatar metadata (200 with empty body if none).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Option_AvatarView"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UploadAvatarCmd"}}},"required":true},"responses":{"200":{"description":"Avatar uploaded and bound to caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AvatarView"}}}},"400":{"description":"Invalid content_type or base64 payload."}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","responses":{"204":{"description":"Avatar removed."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/blocks":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of blocked users.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_BlockedSummary"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/blocks/{uid}":{"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Block succeeded (idempotent; also unfollows both directions)."},"404":{"description":"Target user not found."}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Unblock succeeded."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/deletion":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RequestDeletionCmd"}}},"required":true},"responses":{"200":{"description":"Deletion request created or returned (idempotent).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeletionRequestView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","responses":{"204":{"description":"Active deletion request cancelled."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/deletion/confirm":{"post":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Deletion request scheduled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeletionRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/devices":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List devices registered to the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_DeviceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/devices/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Device identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Device removed."}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Device identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateDeviceCmd"}}},"required":true},"responses":{"200":{"description":"Device updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeviceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/email-change":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RequestChangeBody"}}},"required":true},"responses":{"200":{"description":"Email change ticket created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_EmailChangeTicketView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/email-change/confirm":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ConfirmEmailChangeCmd"}}},"required":true},"responses":{"200":{"description":"Ticket status advanced.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_EmailChangeTicketView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/email-change/{ticket_id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"ticket_id","in":"path","description":"Ticket identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Ticket cancelled."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/emails":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List active emails for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_EmailView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddEmailCmd"}}},"required":true},"responses":{"200":{"description":"Email added (unverified).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AddEmailResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/emails/{email_id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"email_id","in":"path","description":"Email identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Email soft-deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/emails/{email_id}/primary":{"patch":{"tags":["user"],"operationId":"handler","parameters":[{"name":"email_id","in":"path","description":"Email identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Primary email changed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SetPrimaryEmailResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/memes":{"get":{"tags":["user"],"operationId":"list_handler","parameters":[{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"List the caller's favorite memes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_MemeView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"create_handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpsertMemeCmd"}}},"required":true},"responses":{"200":{"description":"Meme created or updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/memes/{id}":{"delete":{"tags":["user"],"operationId":"delete_handler","parameters":[{"name":"id","in":"path","description":"Meme identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Meme deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/saved":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Saved messages for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SavedMessageView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SaveMessageCmd"}}},"required":true},"responses":{"200":{"description":"Message saved (idempotent).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SavedMessageView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/saved/{message_id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"message_id","in":"path","description":"Message identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Message removed from saved list."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/scheduled":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Scheduled messages for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_ScheduledMessageView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/scheduled/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Scheduled message identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Scheduled message cancelled."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/notifications":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"unread_only","in":"query","description":"Only return unread notifications.","required":false,"schema":{"type":"boolean"}},{"name":"notification_type","in":"query","description":"Filter by notification type.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Notifications for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_NotificationView"}}}}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_MarkReadCmd"}}},"required":true},"responses":{"200":{"description":"Notifications marked as read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MarkReadResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/notifications/mark-all-read":{"post":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"All notifications marked as read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MarkAllReadResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/notifications/unread-count":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Number of unread notifications for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UnreadCountResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/preferences":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"User preferences (auto-created if missing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserPreferences"}}}}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdatePreferencesCmd"}}},"required":true},"responses":{"200":{"description":"Updated preferences.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserPreferences"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/profile":{"patch":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateProfileCmd"}}},"required":true},"responses":{"200":{"description":"Updated self profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/push-subscriptions":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List push subscriptions for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PushSubscriptionView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpsertPushCmd"}}},"required":true},"responses":{"200":{"description":"Push subscription upserted (endpoint-keyed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PushSubscriptionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/push-subscriptions/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Push subscription id.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Push subscription deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/recent-mentions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Recent mentions for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_RecentMentionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/recovery-codes":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List recovery codes for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_RecoveryCodeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/recovery-codes/regenerate":{"post":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Recovery codes regenerated (plaintext returned once).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RegenerateRecoveryResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/reports":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Reports submitted by the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_ReportView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/sessions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"app_id","in":"query","description":"Filter by app id.","required":false,"schema":{"type":"string"}},{"name":"include_revoked","in":"query","description":"Include revoked sessions (default false).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"List active sessions for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SessionView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"All sessions revoked for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RevokeAllResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/sessions/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Session identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Session revoked."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/ssh-keys":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List SSH keys for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SshKeyView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddSshKeyCmd"}}},"required":true},"responses":{"200":{"description":"SSH key added.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SshKeyView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/ssh-keys/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"SSH key identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"SSH key deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/suspensions":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Active suspensions affecting the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/reports":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SubmitReportCmd"}}},"required":true},"responses":{"200":{"description":"Report submitted (status = Open).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReportView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/users/{uid}":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"User identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Public view of the user (visibility-filtered).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserPublic"}}}},"404":{"description":"User not found."}}}},"/api/v1/user/users/{uid}/follow":{"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Follow succeeded (idempotent)."},"404":{"description":"Target user not found."}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Unfollow succeeded."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/users/{uid}/followers":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of followers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_FollowerSummary"}}}}}}},"/api/v1/user/users/{uid}/following":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of accounts the user follows.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_FollowerSummary"}}}}}}},"/api/v1/user/users/{uid}/profile-detail":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"User identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Extended profile record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProfileView"}}}},"404":{"description":"Profile not found."}}}}},"components":{"schemas":{"AcceptAgreementCmd":{"type":"object","required":["user_id","agreement_key","agreement_version"],"properties":{"agreement_key":{"type":"string"},"agreement_version":{"type":"string"},"user_id":{"type":"string"}}},"AcceptAgreementResp":{"type":"object","required":["recorded"],"properties":{"recorded":{"type":"boolean"}}},"AcceptInviteCmd":{"type":"object","required":["accept_code"],"properties":{"accept_code":{"type":"string"}}},"AccessKeyScope":{"type":"string","enum":["read","write","repo","admin","all"]},"AccessKeyView":{"type":"object","required":["id","name","token_last_eight","scope","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"},"token_last_eight":{"type":"string"},"updated_at":{"type":"string"}}},"ActivityPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ActivityView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ActivityView":{"type":"object","required":["id","project_id","actor_id","verb","target_kind","created_at"],"properties":{"actor_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"payload":{},"project_id":{"type":"string","format":"uuid"},"target_id":{"type":["string","null"],"format":"uuid"},"target_kind":{"type":"string"},"verb":{"type":"string"}}},"AddCollaboratorOption":{"type":"object","required":["permission"],"properties":{"permission":{"type":"string"}}},"AddEmailCmd":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}},"AddEmailResp":{"type":"object","required":["email_id"],"properties":{"email_id":{"type":"string","format":"uuid"}}},"AddFavoriteCmd":{"type":"object","properties":{"folder":{"type":["string","null"]}}},"AddLinkCmd":{"type":"object","required":["related_project_id","kind"],"properties":{"kind":{"$ref":"#/components/schemas/LinkKind"},"related_project_id":{"type":"string","format":"uuid"}}},"AddMemberCmd":{"type":"object","required":["user_id"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"},"user_id":{"type":"string","format":"uuid"}}},"AddSshKeyCmd":{"type":"object","required":["name","content"],"properties":{"content":{"type":"string"},"key_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SshKeyType"}]},"name":{"type":"string"}}},"AgreementDoc":{"type":"object","required":["key","version","updated_at","title","content_md"],"properties":{"content_md":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"string"}}},"AppRequestData_AcceptAgreementCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id","agreement_key","agreement_version"],"properties":{"agreement_key":{"type":"string"},"agreement_version":{"type":"string"},"user_id":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AcceptInviteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["accept_code"],"properties":{"accept_code":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AddCollaboratorOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["permission"],"properties":{"permission":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AddEmailCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AddFavoriteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"folder":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_AddLinkCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["related_project_id","kind"],"properties":{"kind":{"$ref":"#/components/schemas/LinkKind"},"related_project_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_AddMemberCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_AddSshKeyCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","content"],"properties":{"content":{"type":"string"},"key_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SshKeyType"}]},"name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_ApplyDiffPatchFileOptions":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"sha":{"type":["string","null"]}}}]},"request_id":{"type":"string"}}},"AppRequestData_ArchiveRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["archived"],"properties":{"archived":{"type":"boolean"}}},"request_id":{"type":"string"}}},"AppRequestData_AssignRoleCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role_id"],"properties":{"role_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_AuthorizeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["provider","code_verifier"],"properties":{"app_id":{"type":["string","null"]},"code_verifier":{"type":"string"},"provider":{"$ref":"#/components/schemas/OAuthProvider"}}},"request_id":{"type":"string"}}},"AppRequestData_ChangeFilesOptions":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/ChangeFileEntry"}}}}]},"request_id":{"type":"string"}}},"AppRequestData_CloseIssueOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["closed"],"properties":{"closed":{"type":"boolean"}}},"request_id":{"type":"string"}}},"AppRequestData_ConfirmEmailChangeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["ticket_id"],"properties":{"ticket_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateAccessKeyCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","scope"],"properties":{"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateBanCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id"],"properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateBranchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_branch_name"],"properties":{"new_branch_name":{"type":"string"},"old_branch_name":{"type":["string","null"]},"old_ref_name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateBranchProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["branch_name"],"properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"rule_name":{"type":["string","null"]},"unprotected_file_patterns":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateCollectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["space_id","name"],"properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateCommentOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateDependencyOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["dependency_id"],"properties":{"dependency_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateDeployKeyOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","key"],"properties":{"key":{"type":"string"},"read_only":{"type":["boolean","null"]},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateDocumentCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","slug"],"properties":{"content":{"type":"string"},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateFileOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}}]},"request_id":{"type":"string"}}},"AppRequestData_CreateInviteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role_ids"],"properties":{"email":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"user_id":{"type":["string","null"],"format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateIssueOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","body"],"properties":{"body":{"type":"string"},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateLabelOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","color"],"properties":{"color":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateMemberOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id","kind"],"properties":{"kind":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateMilestoneOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreatePinOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["issue_id","pin_order"],"properties":{"issue_id":{"type":"string","format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateProjectCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["space_id","name"],"properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"},"target_date":{"type":["string","null"],"format":"date"}}},"request_id":{"type":"string"}}},"AppRequestData_CreatePullRequestCommentOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["body"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreatePullRequestOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","head","base"],"properties":{"base":{"type":"string"},"body":{"type":["string","null"]},"head":{"type":"string"},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateReactionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["emoji"],"properties":{"emoji":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateReleaseOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["tag_name","title"],"properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["space_id","name"],"properties":{"auto_init":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"gitignores":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"issue_labels":{"type":["string","null"]},"license_name":{"type":["string","null"]},"name":{"type":"string"},"object_format":{"type":["string","null"]},"parent_dir":{"type":["string","null"],"format":"uuid"},"readme":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateRepoRelOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["repo_id"],"properties":{"repo_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateRoleCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","permissions"],"properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateSpaceCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"public":{"type":"boolean"},"welcome_message":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateStatusOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["state","context"],"properties":{"context":{"type":"string"},"description":{"type":["string","null"]},"state":{"type":"string"},"target_url":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateTagOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["tag_name"],"properties":{"message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateTagProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name_pattern"],"properties":{"name_pattern":{"type":"string"},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_CreateViewCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"sort_by":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_DeleteFileOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["sha"],"properties":{"sha":{"type":"string"}}}]},"request_id":{"type":"string"}}},"AppRequestData_EditBranchProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"unprotected_file_patterns":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_EditReleaseOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_name":{"type":["string","null"]},"target":{"type":["string","null"]},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_EditTagProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"name_pattern":{"type":["string","null"]},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_ForgotPasswordCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"request_id":{"type":"string"}}},"AppRequestData_ForkRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["to_channel_id"],"properties":{"description":{"type":["string","null"]},"name":{"type":["string","null"]},"to_channel_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_GenerateRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["to_channel_id","name"],"properties":{"description":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"name":{"type":"string"},"to_channel_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_LoginCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["identifier","password","pow"],"properties":{"app_id":{"type":["string","null"]},"identifier":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"request_id":{"type":"string"}}},"AppRequestData_LogoutCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["refresh_token"],"properties":{"refresh_token":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_MarkReadCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["notification_ids"],"properties":{"notification_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_MergePullRequestOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["style"],"properties":{"commit_message":{"type":["string","null"]},"commit_title":{"type":["string","null"]},"delete_branch_after_merge":{"type":"boolean"},"style":{"$ref":"#/components/schemas/MergeStyle"}}},"request_id":{"type":"string"}}},"AppRequestData_MergeUpstreamRequest":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["branch"],"properties":{"branch":{"type":"string"},"ff_only":{"type":["boolean","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_ReclaimCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"request_id":{"type":"string"}}},"AppRequestData_RefreshCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["refresh_token"],"properties":{"app_id":{"type":["string","null"]},"refresh_token":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RegisterCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","password","pow"],"properties":{"accept_agreements":{"type":"array","items":{"type":"string"}},"email":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"username":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_RenameBranchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RenameRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RepoTopicOptions":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"request_id":{"type":"string"}}},"AppRequestData_RequestChangeBody":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_email"],"properties":{"new_email":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RequestDeletionCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_ResendCodeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","pow","purpose"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"purpose":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_ResetPasswordCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","token","new_password","temp_key_value"],"properties":{"email":{"type":"string"},"new_password":{"type":"string"},"temp_key_value":{"type":"string"},"token":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RevokeSuspensionCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_SaveMessageCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["channel_id","message_id"],"properties":{"channel_id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SetRoleOverwriteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"role_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SetUserOverwriteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SubmitPullRequestReviewOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["state"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"state":{"$ref":"#/components/schemas/ReviewState"}}},"request_id":{"type":"string"}}},"AppRequestData_SubmitReportCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["reported_uid","reason"],"properties":{"evidence":{"type":["string","null"]},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SuspendCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["suspension_type"],"properties":{"ends_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"}}},"request_id":{"type":"string"}}},"AppRequestData_TransferRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_channel_id"],"properties":{"new_channel_id":{"type":"string","format":"uuid"},"new_name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateBanCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateBranchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_commit_id"],"properties":{"force":{"type":["boolean","null"]},"new_commit_id":{"type":"string"},"old_commit_id":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateBranchProtectionPriorities":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateCollectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateCommentOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateDeviceCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"device_name":{"type":["string","null"]},"is_trusted":{"type":["boolean","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateDocumentCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":["string","null"]},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":["string","null"]},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateFileOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"from_path":{"type":["string","null"]},"sha":{"type":["string","null"]}}}]},"request_id":{"type":"string"}}},"AppRequestData_UpdateIssueOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"body":{"type":["string","null"]},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateIssueUserOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"is_mentioned":{"type":["boolean","null"]},"is_read":{"type":["boolean","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateLabelOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"is_archived":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateMemberCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateMilestoneOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"is_closed":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdatePreferencesCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_dms_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"allow_mentions_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":["boolean","null"]},"email_flags":{"type":["integer","null"],"format":"int32"},"in_app_flags":{"type":["integer","null"],"format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":["integer","null"],"format":"int32"},"show_online_status":{"type":["boolean","null"]},"theme_mode":{"type":["string","null"]},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateProfileCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"avatar":{"type":["string","null"]},"display_name":{"type":["string","null"]},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"profile":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UpdateProfileFields"}]},"timezone":{"type":["string","null"]},"visibility":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateProjectCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectHealth"}]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":["string","null"]},"sort_order":{"type":["integer","null"],"format":"int32"},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectState"}]},"target_date":{"type":["string","null"],"format":"date"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdatePullRequestOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"base":{"type":["string","null"]},"body":{"type":["string","null"]},"head":{"type":["string","null"]},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_fast_forward_only_merge":{"type":["boolean","null"]},"allow_manual_merge":{"type":["boolean","null"]},"allow_merge_commits":{"type":["boolean","null"]},"allow_merge_update":{"type":["boolean","null"]},"allow_rebase":{"type":["boolean","null"]},"allow_rebase_explicit":{"type":["boolean","null"]},"allow_rebase_update":{"type":["boolean","null"]},"allow_squash_merge":{"type":["boolean","null"]},"archived":{"type":["boolean","null"]},"autodetect_manual_merge":{"type":["boolean","null"]},"default_allow_maintainer_edit":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"default_delete_branch_after_merge":{"type":["boolean","null"]},"default_merge_style":{"type":["string","null"]},"default_update_style":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"external_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalTracker"}]},"external_wiki":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalWiki"}]},"has_actions":{"type":["boolean","null"]},"has_code":{"type":["boolean","null"]},"has_issues":{"type":["boolean","null"]},"has_packages":{"type":["boolean","null"]},"has_projects":{"type":["boolean","null"]},"has_pull_requests":{"type":["boolean","null"]},"has_releases":{"type":["boolean","null"]},"has_wiki":{"type":["boolean","null"]},"ignore_whitespace_conflicts":{"type":["boolean","null"]},"internal_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InternalTracker"}]},"is_private":{"type":["boolean","null"]},"license_name":{"type":["string","null"]},"name":{"type":["string","null"]},"projects_mode":{"type":["string","null"]},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateRoleCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":["string","null"]},"permissions":{"type":["array","null"],"items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateSpaceCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_invite":{"type":["boolean","null"]},"allow_join":{"type":["boolean","null"]},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":["boolean","null"]},"name":{"type":["string","null"]},"public":{"type":["boolean","null"]},"welcome_message":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateViewCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":["boolean","null"]},"layout":{"type":["string","null"]},"name":{"type":["string","null"]},"sort_by":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UploadAttachmentInput":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["filename","content_type","data"],"properties":{"content_type":{"type":"string"},"data":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"filename":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UploadAvatarCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["content_type","data_base64"],"properties":{"content_type":{"type":"string"},"data_base64":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UpsertMemeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","content_type","url","size"],"properties":{"content_type":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"request_id":{"type":"string"}}},"AppRequestData_UpsertPushCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["endpoint","p256dh_key","auth_key","platform"],"properties":{"auth_key":{"type":"string"},"endpoint":{"type":"string"},"p256dh_key":{"type":"string"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpsertWatchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_VerifyCodeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","purpose","code","temp_key_value"],"properties":{"code":{"type":"string"},"email":{"type":"string"},"purpose":{"type":"string"},"temp_key_value":{"type":"string"},"user_id":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppResponseData_AcceptAgreementResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["recorded"],"properties":{"recorded":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ActivityPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ActivityView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AddEmailResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["email_id"],"properties":{"email_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AttachmentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","owner_type","owner_id","filename","content_type","size","url","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"filename":{"type":"string"},"id":{"type":"string","format":"uuid"},"owner_id":{"type":"string","format":"uuid"},"owner_type":{"type":"string"},"size":{"type":"integer","format":"int64"},"uploaded_by":{"type":["string","null"],"format":"uuid"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AuthorizationUrlResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["url","temp_key"],"properties":{"temp_key":{"$ref":"#/components/schemas/TempKey"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AvatarView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","url","format","bytes","updated_at"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"format":{"$ref":"#/components/schemas/AvatarFormat"},"uid":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BlobView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","size","encoding","content"],"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchProtectionPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchProtectionView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchProtectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","branch_name","rule_name","priority","enable_push","enable_push_whitelist","push_whitelist_usernames","push_whitelist_teams","push_whitelist_deploy_keys","enable_force_push","enable_force_push_allowlist","force_push_allowlist_usernames","force_push_allowlist_teams","force_push_allowlist_deploy_keys","enable_merge_whitelist","merge_whitelist_usernames","merge_whitelist_teams","enable_bypass_allowlist","bypass_allowlist_usernames","bypass_allowlist_teams","enable_approvals_whitelist","approvals_whitelist_usernames","approvals_whitelist_teams","required_approvals","block_on_rejected_reviews","block_on_change_requested_reviews","block_on_outdated_branch","dismiss_stale_approvals","ignore_stale_approvals","require_signed_commits","block_admin_merge_override","protected_file_patterns","unprotected_file_patterns","created_at","updated_at"],"properties":{"approvals_whitelist_teams":{"type":"array","items":{"type":"string"}},"approvals_whitelist_usernames":{"type":"array","items":{"type":"string"}},"block_admin_merge_override":{"type":"boolean"},"block_on_change_requested_reviews":{"type":"boolean"},"block_on_outdated_branch":{"type":"boolean"},"block_on_rejected_reviews":{"type":"boolean"},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":"array","items":{"type":"string"}},"bypass_allowlist_usernames":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string"},"dismiss_stale_approvals":{"type":"boolean"},"enable_approvals_whitelist":{"type":"boolean"},"enable_bypass_allowlist":{"type":"boolean"},"enable_force_push":{"type":"boolean"},"enable_force_push_allowlist":{"type":"boolean"},"enable_merge_whitelist":{"type":"boolean"},"enable_push":{"type":"boolean"},"enable_push_whitelist":{"type":"boolean"},"force_push_allowlist_deploy_keys":{"type":"boolean"},"force_push_allowlist_teams":{"type":"array","items":{"type":"string"}},"force_push_allowlist_usernames":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"},"ignore_stale_approvals":{"type":"boolean"},"merge_whitelist_teams":{"type":"array","items":{"type":"string"}},"merge_whitelist_usernames":{"type":"array","items":{"type":"string"}},"priority":{"type":"integer","format":"int64"},"protected_file_patterns":{"type":"string"},"push_whitelist_deploy_keys":{"type":"boolean"},"push_whitelist_teams":{"type":"array","items":{"type":"string"}},"push_whitelist_usernames":{"type":"array","items":{"type":"string"}},"repo_id":{"type":"string","format":"uuid"},"require_signed_commits":{"type":"boolean"},"required_approvals":{"type":"integer","format":"int32"},"rule_name":{"type":"string"},"unprotected_file_patterns":{"type":"string"},"updated_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","name","commit_sha","is_protected","protected","required_approvals","enable_status_check","status_check_contexts","user_can_push","user_can_merge","effective_branch_protection_name","is_deleted","created_at","updated_at"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitMeta"}]},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"deleted_at":{"type":["string","null"]},"effective_branch_protection_name":{"type":"string"},"enable_status_check":{"type":"boolean"},"id":{"type":"string","format":"uuid"},"is_deleted":{"type":"boolean"},"is_protected":{"type":"boolean"},"name":{"type":"string"},"protected":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"required_approvals":{"type":"integer","format":"int64"},"status_check_contexts":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"user_can_merge":{"type":"boolean"},"user_can_push":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ChannelPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ChannelView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ChannelView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","kind","position","is_archived","created_at","updated_at","created_by"],"properties":{"archived_at":{"type":["string","null"]},"archived_by":{"type":["string","null"],"format":"uuid"},"color":{"type":["string","null"]},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"},"position":{"type":"integer","format":"int32"},"purpose":{"type":["string","null"]},"space_id":{"type":["string","null"],"format":"uuid"},"topic":{"type":["string","null"]},"updated_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CollaboratorPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CollaboratorView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CollectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","name","nums_open_issue","nums_closed_issue","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"nums_closed_issue":{"type":"integer","format":"int64"},"nums_open_issue":{"type":"integer","format":"int64"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CombinedStatusView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","state","statuses","total_count"],"properties":{"sha":{"type":"string"},"state":{"type":"string"},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total_count":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","poster_id","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"poster_id":{"type":"string","format":"uuid"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitStatusPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitStatusView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","sha","state","context","url","creator","created_at"],"properties":{"context":{"type":"string"},"created_at":{"type":"string"},"creator":{"$ref":"#/components/schemas/CommitUserSummary"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"state":{"type":"string"},"target_url":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","message","parent_shas","tree_sha"],"properties":{"author_email":{"type":["string","null"]},"author_name":{"type":["string","null"]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer_email":{"type":["string","null"]},"committer_name":{"type":["string","null"]},"message":{"type":"string"},"parent_shas":{"type":"array","items":{"type":"string"}},"sha":{"type":"string"},"tree_sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CompareView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["base","head","total_commits","ahead_by","behind_by","files"],"properties":{"ahead_by":{"type":"integer","format":"int64"},"base":{"type":"string"},"behind_by":{"type":"integer","format":"int64"},"files":{"type":"array","items":{"$ref":"#/components/schemas/CompareFileDiff"}},"head":{"type":"string"},"merge_base":{"type":["string","null"]},"total_commits":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ContentsListResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ContentsResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["name","path","sha","type","size"],"properties":{"content":{"type":["string","null"]},"download_url":{"type":["string","null"]},"encoding":{"type":["string","null"]},"git_url":{"type":["string","null"]},"html_url":{"type":["string","null"]},"last_author_date":{"type":["string","null"]},"last_commit_message":{"type":["string","null"]},"last_commit_sha":{"type":["string","null"]},"last_committer_date":{"type":["string","null"]},"lfs_oid":{"type":["string","null"]},"lfs_size":{"type":["integer","null"],"format":"int64"},"links":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FileLinksResponse"}]},"name":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"},"submodule_git_url":{"type":["string","null"]},"target":{"type":["string","null"]},"type":{"type":"string"},"url":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CreateAccessKeyResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["key","token"],"properties":{"key":{"$ref":"#/components/schemas/AccessKeyView"},"token":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeletionRequestView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","status","created_at","updated_at"],"properties":{"cancelled_at":{"type":["string","null"]},"completed_at":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"scheduled_for":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/DeletionStatus"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DependencyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","dependency_id","created_at"],"properties":{"created_at":{"type":"string"},"dependency_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeployKeyPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeployKeyView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeployKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","key_id","repo_id","title","key_type","fingerprint","content","url","read_only","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_id":{"type":"integer","format":"int64"},"key_type":{"type":"string"},"last_used_at":{"type":["string","null"]},"read_only":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"title":{"type":"string"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeviceView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","is_trusted","first_seen_at","last_seen_at","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"device_name":{"type":["string","null"]},"device_type":{"type":["string","null"]},"first_seen_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_trusted":{"type":"boolean"},"last_seen_at":{"type":"string"},"os":{"type":["string","null"]},"updated_at":{"type":"string"},"user_agent":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DocumentPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DocumentView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DocumentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","creator_id","title","slug","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"last_editor_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"project_id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_EmailChangeTicketView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","new_email","status","expires_at","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"new_email":{"type":"string"},"status":{"$ref":"#/components/schemas/EmailChangeTicketStatus"},"used_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_FavoritePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FavoriteView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_FavoriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","user_id","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"folder":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ForgotPasswordResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_IssueUserView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","issue_id","is_read","is_mentioned","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_mentioned":{"type":"boolean"},"is_read":{"type":"boolean"},"issue_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_IssueView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","collection_id","autoincrement_id","author_id","title","body","state","created_at"],"properties":{"author_id":{"type":"string","format":"uuid"},"autoincrement_id":{"type":"integer","format":"int32"},"body":{"type":"string"},"closed_at":{"type":["string","null"]},"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"milestone_id":{"type":["string","null"],"format":"uuid"},"state":{"$ref":"#/components/schemas/IssueState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LabelView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","name","exclusive","exclusive_order","color","is_archived","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"color":{"type":"string"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":"boolean"},"exclusive_order":{"type":"integer","format":"int32"},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"name":{"type":"string"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LinkPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LinkView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LinkView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","related_project_id","kind","created_by","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"kind":{"$ref":"#/components/schemas/LinkKind"},"project_id":{"type":"string","format":"uuid"},"related_project_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LoginResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LogoutResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MarkAllReadResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MarkReadResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MemberPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MemberView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MemberView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","user_id","kind","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"kind":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MemeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","content_type","url","size","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MergeUpstreamResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["merge_type"],"properties":{"merge_type":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MergeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","merged"],"properties":{"merged":{"type":"boolean"},"message":{"type":["string","null"]},"sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MilestoneView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","collection_id","name","is_closed","num_issues","num_closed_issues","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_closed":{"type":"boolean"},"name":{"type":"string"},"num_closed_issues":{"type":"integer","format":"int32"},"num_issues":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_NoteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","message"],"properties":{"message":{"type":"string"},"sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_OAuthLoginResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user_id","auto_registered"],"properties":{"access_token":{"type":"string"},"auto_registered":{"type":"boolean"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user_id":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Option_AvatarView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"oneOf":[{"type":"null"},{"type":"object","required":["uid","url","format","bytes","updated_at"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"format":{"$ref":"#/components/schemas/AvatarFormat"},"uid":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"url":{"type":"string"}}}]},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PinView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","collection_id","pin_order","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PowChallengeResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["challenge","ttl_seconds"],"properties":{"challenge":{"type":"string"},"ttl_seconds":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ProfileView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["user_id","show_email","show_location","show_real_name","show_activity","updated_at"],"properties":{"accent_color":{"type":["string","null"]},"banner_color":{"type":["integer","null"],"format":"int32"},"banner_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"company":{"type":["string","null"]},"date_of_birth":{"type":["string","null"],"format":"date"},"location":{"type":["string","null"]},"pronouns":{"type":["string","null"]},"pronouns_privacy":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]},"real_name":{"type":["string","null"]},"show_activity":{"type":"boolean"},"show_email":{"type":"boolean"},"show_location":{"type":"boolean"},"show_real_name":{"type":"boolean"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"},"website":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ProjectPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ProjectView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","creator_id","name","state","health","sort_order","starred","created_at"],"properties":{"cancelled_at":{"type":["string","null"],"format":"date-time"},"color":{"type":["string","null"]},"completed_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"health":{"$ref":"#/components/schemas/ProjectHealth"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"space_id":{"type":"string","format":"uuid"},"starred":{"type":"integer","format":"int32"},"started_at":{"type":["string","null"],"format":"date-time"},"state":{"$ref":"#/components/schemas/ProjectState"},"target_date":{"type":["string","null"],"format":"date"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestCommentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","pull_request_id","user_id","body","created_at"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]},"pull_request_id":{"type":"string","format":"uuid"},"review_id":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PullRequestView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestReviewView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","pull_request_id","user_id","official","state","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"official":{"type":"boolean"},"pull_request_id":{"type":"string","format":"uuid"},"state":{"$ref":"#/components/schemas/ReviewState"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","number","title","head_branch","base_branch","author_id","state","is_locked","has_merged","created_at","comments_count","reviews_count"],"properties":{"author_id":{"type":"string","format":"uuid"},"base_branch":{"type":"string"},"base_sha":{"type":["string","null"]},"body":{"type":["string","null"]},"closed_at":{"type":["string","null"]},"comments_count":{"type":"integer","format":"int64"},"created_at":{"type":"string"},"has_merged":{"type":"boolean"},"head_branch":{"type":"string"},"head_sha":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_locked":{"type":"boolean"},"mergeable":{"type":["boolean","null"]},"mergeable_state":{"type":["string","null"]},"merged_at":{"type":["string","null"]},"merged_commit_sha":{"type":["string","null"]},"merger_id":{"type":["string","null"]},"number":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"reviews_count":{"type":"integer","format":"int64"},"state":{"$ref":"#/components/schemas/PrState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PushSubscriptionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","platform","endpoint","created_at"],"properties":{"created_at":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"string","format":"uuid"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReactionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","scope","target_id","user_id","emoji","created_at"],"properties":{"created_at":{"type":"string"},"emoji":{"type":"string"},"id":{"type":"string","format":"uuid"},"scope":{"$ref":"#/components/schemas/ReactionScope"},"target_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReclaimResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RefreshResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["access_token","refresh_token","token_type","expires_in"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RegenerateRecoveryResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["codes"],"properties":{"codes":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RegisterResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","pending","temp_key","purpose"],"properties":{"pending":{"type":"boolean"},"purpose":{"type":"string"},"temp_key":{"$ref":"#/components/schemas/TempKey"},"uid":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReleasePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReleaseView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","tag_name","target","title","sha","num_commits","is_draft","is_prerelease","is_tag","url","html_url","tarball_url","zipball_url","upload_url","publisher","attachments","created_at","updated_at"],"properties":{"attachments":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAttachment"}},"content":{"type":["string","null"]},"created_at":{"type":"string"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_draft":{"type":"boolean"},"is_prerelease":{"type":"boolean"},"is_tag":{"type":"boolean"},"num_commits":{"type":"integer","format":"int32"},"publisher":{"$ref":"#/components/schemas/UserSummary"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"tag_name":{"type":"string"},"tarball_url":{"type":"string"},"target":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"upload_url":{"type":"string"},"url":{"type":"string"},"zipball_url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoCollaboratorPermission":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["permission","role","user"],"properties":{"permission":{"type":"string"},"role":{"type":"string"},"user":{"$ref":"#/components/schemas/UserSummary"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RepoView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoRelView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","repo_id","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","space_id","name","lower_name","full_name","default_branch","enable_lfs","is_private","is_archived","is_fork","is_template","is_mirror","empty","size","git_size","lfs_size","nums_watch","nums_star","nums_pr","nums_commits","nums_branches","nums_tags","allow_rebase","allow_rebase_explicit","allow_squash_merge","allow_merge_commits","allow_fast_forward_only_merge","allow_rebase_update","allow_merge_update","allow_manual_merge","autodetect_manual_merge","default_delete_branch_after_merge","default_allow_maintainer_edit","ignore_whitespace_conflicts","object_format","has_code","has_issues","has_wiki","has_pull_requests","has_projects","has_releases","has_packages","has_actions","projects_mode","languages","licenses","topics","html_url","url","link","ssh_url","clone_url","created_at","updated_at"],"properties":{"allow_fast_forward_only_merge":{"type":"boolean"},"allow_manual_merge":{"type":"boolean"},"allow_merge_commits":{"type":"boolean"},"allow_merge_update":{"type":"boolean"},"allow_rebase":{"type":"boolean"},"allow_rebase_explicit":{"type":"boolean"},"allow_rebase_update":{"type":"boolean"},"allow_squash_merge":{"type":"boolean"},"archived_at":{"type":["string","null"]},"autodetect_manual_merge":{"type":"boolean"},"avatar_url":{"type":["string","null"]},"channel":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChannelSummary"}]},"channel_id":{"type":"string","format":"uuid"},"clone_url":{"type":"string"},"created_at":{"type":"string"},"default_allow_maintainer_edit":{"type":"boolean"},"default_branch":{"type":"string"},"default_delete_branch_after_merge":{"type":"boolean"},"description":{"type":["string","null"]},"empty":{"type":"boolean"},"enable_lfs":{"type":"boolean"},"full_name":{"type":"string"},"git_size":{"type":"integer","format":"int64"},"has_actions":{"type":"boolean"},"has_code":{"type":"boolean"},"has_issues":{"type":"boolean"},"has_packages":{"type":"boolean"},"has_projects":{"type":"boolean"},"has_pull_requests":{"type":"boolean"},"has_releases":{"type":"boolean"},"has_wiki":{"type":"boolean"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"ignore_whitespace_conflicts":{"type":"boolean"},"is_archived":{"type":"boolean"},"is_fork":{"type":"boolean"},"is_mirror":{"type":"boolean"},"is_private":{"type":"boolean"},"is_template":{"type":"boolean"},"languages":{"type":"array","items":{"type":"string"}},"last_pushed_at":{"type":["string","null"]},"lfs_size":{"type":"integer","format":"int64"},"license_name":{"type":["string","null"]},"licenses":{"type":"array","items":{"type":"string"}},"link":{"type":"string"},"lower_name":{"type":"string"},"name":{"type":"string"},"nums_branches":{"type":"integer","format":"int32"},"nums_commits":{"type":"integer","format":"int32"},"nums_pr":{"type":"integer","format":"int32"},"nums_star":{"type":"integer","format":"int32"},"nums_tags":{"type":"integer","format":"int32"},"nums_watch":{"type":"integer","format":"int32"},"object_format":{"type":"string"},"parent":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RepoView"}]},"primary_language":{"type":["string","null"]},"projects_mode":{"type":"string"},"size":{"type":"integer","format":"int64"},"space":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceSummary"}]},"space_id":{"type":"string","format":"uuid"},"ssh_url":{"type":"string"},"storage_limit_size":{"type":["integer","null"],"format":"int64"},"topics":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"url":{"type":"string"},"website":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReportView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","reported_uid","reason","status","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"evidence":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"},"reporter_uid":{"type":["string","null"],"format":"uuid"},"resolution_note":{"type":["string","null"]},"resolver_uid":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/ReportStatus"},"updated_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ResendCodeResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ResetPasswordResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RevokeAllResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RoleOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","channel_id","role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"id":{"type":"string","format":"uuid"},"role_id":{"type":"string","format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RolePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RoleView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RoleView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","name","position","color","version","created_at","created_by","permissions"],"properties":{"color":{"type":"string"},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon_hash":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":"integer","format":"int64"},"space_id":{"type":"string","format":"uuid"},"unicode_emoji":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"version":{"type":"integer","format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SavedMessageView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","message_id","saved_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"saved_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SetPrimaryEmailResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["email"],"properties":{"email":{"$ref":"#/components/schemas/EmailView"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceBanPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceBanView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceBanView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["space_id","user_id","banned_by","created_at","updated_at","allow_agent_join","allow_speak","allow_push_repo","allow_comment_any"],"properties":{"allow_agent_join":{"type":"boolean"},"allow_comment_any":{"type":"boolean"},"allow_push_repo":{"type":"boolean"},"allow_speak":{"type":"boolean"},"banned_by":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceInvitePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceInviteView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceInviteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","user_id","email","role_ids","created_at"],"properties":{"accepted_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"revoked_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"space_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceMemberPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceMemberView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceMemberView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["space_id","user_id","status","joined_at","created_at","message_notifications","muted","mobile_push","suppress_everyone","suppress_roles","hide_muted_channels"],"properties":{"alias_avatar_url":{"type":["string","null"]},"alias_name":{"type":["string","null"]},"created_at":{"type":"string"},"hide_muted_channels":{"type":"boolean"},"invited_at":{"type":["string","null"]},"invited_by":{"type":["string","null"],"format":"uuid"},"joined_at":{"type":"string"},"last_active_at":{"type":["string","null"]},"left_at":{"type":["string","null"]},"message_notifications":{"$ref":"#/components/schemas/MessageNotifications"},"mobile_push":{"type":"boolean"},"mute_until":{"type":["string","null"]},"muted":{"type":"boolean"},"space_id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/SpaceMemberStatus"},"suppress_everyone":{"type":"boolean"},"suppress_roles":{"type":"boolean"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpacePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","owner_id","public","is_active","allow_join","allow_invite","member_count","allow_join_level","member_must_enable_2fa","created_at","updated_at"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"$ref":"#/components/schemas/SpaceAllowJoinLevel"},"avatar_url":{"type":["string","null"]},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_active":{"type":"boolean"},"member_count":{"type":"integer","format":"int64"},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"public":{"type":"boolean"},"updated_at":{"type":"string"},"welcome_message":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SshKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","key_type","fingerprint","created_at"],"properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_type":{"$ref":"#/components/schemas/SshKeyType"},"last_used_at":{"type":["string","null"]},"name":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_StopwatchView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","user_id","started_at","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"started_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SubscriberPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriberView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SuspensionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","suspension_type","starts_at","created_at"],"properties":{"created_at":{"type":"string"},"ends_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"revoked_at":{"type":["string","null"]},"revoked_by":{"type":["string","null"],"format":"uuid"},"starts_at":{"type":"string"},"suspended_by":{"type":["string","null"],"format":"uuid"},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SyncResult":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["repo_id","branches_added","tags_added","commits_added","size_bytes"],"properties":{"branches_added":{"type":"integer","format":"int64"},"commits_added":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"size_bytes":{"type":"integer","format":"int64"},"tags_added":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SyncStatus":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["repo_id","branches_total","tags_total","commits_total","size","synced_at"],"properties":{"branches_total":{"type":"integer","format":"int64"},"commits_total":{"type":"integer","format":"int64"},"last_pushed_at":{"type":["string","null"]},"primary_language":{"type":["string","null"]},"repo_id":{"type":"string","format":"uuid"},"size":{"type":"integer","format":"int64"},"synced_at":{"type":"string"},"tags_total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagProtectionPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagProtectionView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagProtectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","name_pattern","whitelist_usernames","whitelist_teams","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name_pattern":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"whitelist_teams":{"type":"array","items":{"type":"string"}},"whitelist_usernames":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","name","tag_type","commit_sha","commit","message","zipball_url","tarball_url","created_at"],"properties":{"commit":{"$ref":"#/components/schemas/CommitMeta"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message":{"type":"string"},"name":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"tag_type":{"type":"string"},"tarball_url":{"type":"string"},"zipball_url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TopicList":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TopicSearchResult":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"$ref":"#/components/schemas/TopicView"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TreeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/TreeEntryView"}},"sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UnreadCountResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserMe":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","username","display_name","avatar","is_active","is_admin","is_restricted"],"properties":{"avatar":{"type":"string"},"display_name":{"type":"string"},"is_active":{"type":"boolean"},"is_admin":{"type":"boolean"},"is_restricted":{"type":"boolean"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"uid":{"type":"string"},"username":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["channel_id","user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserPreferences":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["user_id","theme_mode","in_app_flags","email_flags","push_flags","email_digest","allow_dms_from","allow_mentions_from","show_online_status","created_at","updated_at"],"properties":{"allow_dms_from":{"$ref":"#/components/schemas/Audience"},"allow_mentions_from":{"$ref":"#/components/schemas/Audience"},"created_at":{"type":"string"},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":"boolean"},"email_flags":{"type":"integer","format":"int32"},"in_app_flags":{"type":"integer","format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":"integer","format":"int32"},"show_online_status":{"type":"boolean"},"theme_mode":{"type":"string"},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserPublic":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","username","display_name","avatar","visibility","bot","system","created_at"],"properties":{"avatar":{"type":"string"},"bot":{"type":"boolean"},"created_at":{"type":"string"},"display_name":{"type":"string"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"system":{"type":"boolean"},"timezone":{"type":["string","null"]},"uid":{"type":"string","format":"uuid"},"username":{"type":"string"},"visibility":{"$ref":"#/components/schemas/ProfileVisibility"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_AccessKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","name","token_last_eight","scope","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"},"token_last_eight":{"type":"string"},"updated_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_AgreementDoc":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["key","version","updated_at","title","content_md"],"properties":{"content_md":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_BlockedSummary":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_CollectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","channel_id","name","nums_open_issue","nums_closed_issue","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"nums_closed_issue":{"type":"integer","format":"int64"},"nums_open_issue":{"type":"integer","format":"int64"},"updated_at":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_DeletionRequestView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","user_id","status","created_at","updated_at"],"properties":{"cancelled_at":{"type":["string","null"]},"completed_at":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"scheduled_for":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/DeletionStatus"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_DeviceView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","is_trusted","first_seen_at","last_seen_at","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"device_name":{"type":["string","null"]},"device_type":{"type":["string","null"]},"first_seen_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_trusted":{"type":"boolean"},"last_seen_at":{"type":"string"},"os":{"type":["string","null"]},"updated_at":{"type":"string"},"user_agent":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_EmailView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","email","is_activated","is_primary","created_at","updated_at"],"properties":{"activated_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_activated":{"type":"boolean"},"is_primary":{"type":"boolean"},"updated_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_FollowerSummary":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_GitRef":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["name","sha","type_"],"properties":{"name":{"type":"string"},"sha":{"type":"string"},"type_":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_MemeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","name","content_type","url","size","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_NotificationView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","notification_type","title","created_at"],"properties":{"actor_uid":{"type":["string","null"],"format":"uuid"},"body":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"notification_type":{"$ref":"#/components/schemas/NotificationType"},"read_at":{"type":["string","null"]},"title":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_OAuthProviderInfo":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["name","display_name","authorize_url"],"properties":{"authorize_url":{"type":"string"},"display_name":{"type":"string"},"name":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PullRequestCommentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","pull_request_id","user_id","body","created_at"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]},"pull_request_id":{"type":"string","format":"uuid"},"review_id":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PullRequestEventView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","pull_request_id","user_id","event_type","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"string","format":"uuid"},"pull_request_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PullRequestReviewView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","pull_request_id","user_id","official","state","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"official":{"type":"boolean"},"pull_request_id":{"type":"string","format":"uuid"},"state":{"$ref":"#/components/schemas/ReviewState"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PushSubscriptionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","platform","endpoint","created_at"],"properties":{"created_at":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"string","format":"uuid"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_RecentMentionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","channel_id","message_id","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_RecoveryCodeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"used_at":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_ReportView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","reported_uid","reason","status","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"evidence":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"},"reporter_uid":{"type":["string","null"],"format":"uuid"},"resolution_note":{"type":["string","null"]},"resolver_uid":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/ReportStatus"},"updated_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_RoleOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","space_id","channel_id","role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"id":{"type":"string","format":"uuid"},"role_id":{"type":"string","format":"uuid"},"space_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SavedMessageView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","channel_id","message_id","saved_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"saved_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_ScheduledMessageView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","target_channel_id","payload","scheduled_at","status","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"payload":{"type":"string"},"scheduled_at":{"type":"string"},"status":{"$ref":"#/components/schemas/ScheduledMessageStatus"},"target_channel_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SessionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","kind","is_revoked","created_at","expires_at"],"properties":{"app_id":{"type":["string","null"]},"client_ip_hash":{"type":["string","null"]},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_revoked":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/SessionKind"},"replaced_at":{"type":["string","null"]},"user_agent_hash":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SshKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","name","key_type","fingerprint","created_at"],"properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_type":{"$ref":"#/components/schemas/SshKeyType"},"last_used_at":{"type":["string","null"]},"name":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SuspensionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","user_id","suspension_type","starts_at","created_at"],"properties":{"created_at":{"type":"string"},"ends_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"revoked_at":{"type":["string","null"]},"revoked_by":{"type":["string","null"],"format":"uuid"},"starts_at":{"type":"string"},"suspended_by":{"type":["string","null"],"format":"uuid"},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_UserOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["channel_id","user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_VerifyCodeResult":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["code_row_id"],"properties":{"code_row_id":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ViewPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ViewView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ViewView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","creator_id","name","filter","sort_by","layout","is_shared","sort_order","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"project_id":{"type":"string","format":"uuid"},"sort_by":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_WatchView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"mode":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"ApplyDiffPatchFileOptions":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"sha":{"type":["string","null"]}}}]},"ArchiveFormatQuery":{"type":"object","properties":{"format":{"type":["string","null"]},"ref_name":{"type":["string","null"]}}},"ArchiveRepoOption":{"type":"object","required":["archived"],"properties":{"archived":{"type":"boolean"}}},"AssignRoleCmd":{"type":"object","required":["role_id"],"properties":{"role_id":{"type":"string","format":"uuid"}}},"AttachmentPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentView"}},"total":{"type":"integer","format":"int64"}}},"AttachmentView":{"type":"object","required":["id","owner_type","owner_id","filename","content_type","size","url","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"filename":{"type":"string"},"id":{"type":"string","format":"uuid"},"owner_id":{"type":"string","format":"uuid"},"owner_type":{"type":"string"},"size":{"type":"integer","format":"int64"},"uploaded_by":{"type":["string","null"],"format":"uuid"},"url":{"type":"string"}}},"Audience":{"type":"string","enum":["everyone","following_only","nobody"]},"AuthorizationUrlResp":{"type":"object","required":["url","temp_key"],"properties":{"temp_key":{"$ref":"#/components/schemas/TempKey"},"url":{"type":"string"}}},"AuthorizeCmd":{"type":"object","required":["provider","code_verifier"],"properties":{"app_id":{"type":["string","null"]},"code_verifier":{"type":"string"},"provider":{"$ref":"#/components/schemas/OAuthProvider"}}},"AvatarFormat":{"type":"string","enum":["jpg","png","webp","gif"]},"AvatarView":{"type":"object","required":["uid","url","format","bytes","updated_at"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"format":{"$ref":"#/components/schemas/AvatarFormat"},"uid":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"url":{"type":"string"}}},"BlobView":{"type":"object","required":["sha","size","encoding","content"],"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"BlockedSummary":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"BranchPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchView"}},"total":{"type":"integer","format":"int64"}}},"BranchProtectionPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchProtectionView"}},"total":{"type":"integer","format":"int64"}}},"BranchProtectionView":{"type":"object","required":["id","repo_id","branch_name","rule_name","priority","enable_push","enable_push_whitelist","push_whitelist_usernames","push_whitelist_teams","push_whitelist_deploy_keys","enable_force_push","enable_force_push_allowlist","force_push_allowlist_usernames","force_push_allowlist_teams","force_push_allowlist_deploy_keys","enable_merge_whitelist","merge_whitelist_usernames","merge_whitelist_teams","enable_bypass_allowlist","bypass_allowlist_usernames","bypass_allowlist_teams","enable_approvals_whitelist","approvals_whitelist_usernames","approvals_whitelist_teams","required_approvals","block_on_rejected_reviews","block_on_change_requested_reviews","block_on_outdated_branch","dismiss_stale_approvals","ignore_stale_approvals","require_signed_commits","block_admin_merge_override","protected_file_patterns","unprotected_file_patterns","created_at","updated_at"],"properties":{"approvals_whitelist_teams":{"type":"array","items":{"type":"string"}},"approvals_whitelist_usernames":{"type":"array","items":{"type":"string"}},"block_admin_merge_override":{"type":"boolean"},"block_on_change_requested_reviews":{"type":"boolean"},"block_on_outdated_branch":{"type":"boolean"},"block_on_rejected_reviews":{"type":"boolean"},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":"array","items":{"type":"string"}},"bypass_allowlist_usernames":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string"},"dismiss_stale_approvals":{"type":"boolean"},"enable_approvals_whitelist":{"type":"boolean"},"enable_bypass_allowlist":{"type":"boolean"},"enable_force_push":{"type":"boolean"},"enable_force_push_allowlist":{"type":"boolean"},"enable_merge_whitelist":{"type":"boolean"},"enable_push":{"type":"boolean"},"enable_push_whitelist":{"type":"boolean"},"force_push_allowlist_deploy_keys":{"type":"boolean"},"force_push_allowlist_teams":{"type":"array","items":{"type":"string"}},"force_push_allowlist_usernames":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"},"ignore_stale_approvals":{"type":"boolean"},"merge_whitelist_teams":{"type":"array","items":{"type":"string"}},"merge_whitelist_usernames":{"type":"array","items":{"type":"string"}},"priority":{"type":"integer","format":"int64"},"protected_file_patterns":{"type":"string"},"push_whitelist_deploy_keys":{"type":"boolean"},"push_whitelist_teams":{"type":"array","items":{"type":"string"}},"push_whitelist_usernames":{"type":"array","items":{"type":"string"}},"repo_id":{"type":"string","format":"uuid"},"require_signed_commits":{"type":"boolean"},"required_approvals":{"type":"integer","format":"int32"},"rule_name":{"type":"string"},"unprotected_file_patterns":{"type":"string"},"updated_at":{"type":"string"}}},"BranchView":{"type":"object","required":["id","repo_id","name","commit_sha","is_protected","protected","required_approvals","enable_status_check","status_check_contexts","user_can_push","user_can_merge","effective_branch_protection_name","is_deleted","created_at","updated_at"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitMeta"}]},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"deleted_at":{"type":["string","null"]},"effective_branch_protection_name":{"type":"string"},"enable_status_check":{"type":"boolean"},"id":{"type":"string","format":"uuid"},"is_deleted":{"type":"boolean"},"is_protected":{"type":"boolean"},"name":{"type":"string"},"protected":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"required_approvals":{"type":"integer","format":"int64"},"status_check_contexts":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"user_can_merge":{"type":"boolean"},"user_can_push":{"type":"boolean"}}},"CallbackCmd":{"type":"object","required":["provider","code","state","temp_key_value"],"properties":{"app_id":{"type":["string","null"]},"code":{"type":"string"},"provider":{"$ref":"#/components/schemas/OAuthProvider"},"state":{"type":"string"},"temp_key_value":{"type":"string"}}},"ChangeFileEntry":{"type":"object","required":["operation","path"],"properties":{"content":{"type":["string","null"]},"from_path":{"type":["string","null"]},"operation":{"type":"string"},"path":{"type":"string"},"sha":{"type":["string","null"]}}},"ChangeFilesOptions":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/ChangeFileEntry"}}}}]},"ChannelPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ChannelView"}},"total":{"type":"integer","format":"int64"}}},"ChannelSummary":{"type":"object","required":["id","space_id","name"],"properties":{"display_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"space_id":{"type":"string","format":"uuid"}}},"ChannelView":{"type":"object","required":["id","name","kind","position","is_archived","created_at","updated_at","created_by"],"properties":{"archived_at":{"type":["string","null"]},"archived_by":{"type":["string","null"],"format":"uuid"},"color":{"type":["string","null"]},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"},"position":{"type":"integer","format":"int32"},"purpose":{"type":["string","null"]},"space_id":{"type":["string","null"],"format":"uuid"},"topic":{"type":["string","null"]},"updated_at":{"type":"string"}}},"CloseIssueOption":{"type":"object","required":["closed"],"properties":{"closed":{"type":"boolean"}}},"CollaboratorPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CollaboratorView"}},"total":{"type":"integer","format":"int64"}}},"CollaboratorView":{"type":"object","required":["id","repo_id","user_id","mode","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"mode":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"CollectionPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CollectionView"}},"total":{"type":"integer","format":"int64"}}},"CollectionView":{"type":"object","required":["id","channel_id","name","nums_open_issue","nums_closed_issue","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"nums_closed_issue":{"type":"integer","format":"int64"},"nums_open_issue":{"type":"integer","format":"int64"},"updated_at":{"type":["string","null"]}}},"CombinedStatusView":{"type":"object","required":["sha","state","statuses","total_count"],"properties":{"sha":{"type":"string"},"state":{"type":"string"},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total_count":{"type":"integer","format":"int64"}}},"CommentPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommentView"}},"total":{"type":"integer","format":"int64"}}},"CommentView":{"type":"object","required":["id","poster_id","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"poster_id":{"type":"string","format":"uuid"},"updated_at":{"type":["string","null"]}}},"CommitDateOptions":{"type":"object","properties":{"author":{"type":["string","null"]},"committer":{"type":["string","null"]}}},"CommitDiffPayload":{"type":"object","required":["sha","format","content"],"properties":{"content":{"type":"string"},"format":{"type":"string"},"sha":{"type":"string"}}},"CommitMeta":{"type":"object","required":["sha","message"],"properties":{"author_email":{"type":["string","null"]},"author_name":{"type":["string","null"]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer_email":{"type":["string","null"]},"committer_name":{"type":["string","null"]},"message":{"type":"string"},"sha":{"type":"string"},"tree_sha":{"type":["string","null"]}}},"CommitStatusPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total":{"type":"integer","format":"int64"}}},"CommitStatusView":{"type":"object","required":["id","repo_id","sha","state","context","url","creator","created_at"],"properties":{"context":{"type":"string"},"created_at":{"type":"string"},"creator":{"$ref":"#/components/schemas/CommitUserSummary"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"state":{"type":"string"},"target_url":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"url":{"type":"string"}}},"CommitSummary":{"type":"object","required":["sha","message"],"properties":{"author":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GitIdentity"}]},"committer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GitIdentity"}]},"html_url":{"type":["string","null"]},"message":{"type":"string"},"sha":{"type":"string"},"url":{"type":["string","null"]}}},"CommitUserSummary":{"type":"object","required":["id","login"],"properties":{"avatar_url":{"type":["string","null"]},"full_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"}}},"CommitView":{"type":"object","required":["sha","message","parent_shas","tree_sha"],"properties":{"author_email":{"type":["string","null"]},"author_name":{"type":["string","null"]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer_email":{"type":["string","null"]},"committer_name":{"type":["string","null"]},"message":{"type":"string"},"parent_shas":{"type":"array","items":{"type":"string"}},"sha":{"type":"string"},"tree_sha":{"type":"string"}}},"CompareFileDiff":{"type":"object","required":["path","additions","deletions","status"],"properties":{"additions":{"type":"integer","format":"int64"},"deletions":{"type":"integer","format":"int64"},"path":{"type":"string"},"status":{"type":"string"}}},"CompareView":{"type":"object","required":["base","head","total_commits","ahead_by","behind_by","files"],"properties":{"ahead_by":{"type":"integer","format":"int64"},"base":{"type":"string"},"behind_by":{"type":"integer","format":"int64"},"files":{"type":"array","items":{"$ref":"#/components/schemas/CompareFileDiff"}},"head":{"type":"string"},"merge_base":{"type":["string","null"]},"total_commits":{"type":"integer","format":"int64"}}},"ConfirmEmailChangeCmd":{"type":"object","required":["ticket_id"],"properties":{"ticket_id":{"type":"string","format":"uuid"}}},"ContentHistoryPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentHistoryView"}},"total":{"type":"integer","format":"int64"}}},"ContentHistoryView":{"type":"object","required":["id","issue_id","poster_id","edited_at","created_at"],"properties":{"comment_id":{"type":["string","null"],"format":"uuid"},"content_after":{"type":["string","null"]},"content_before":{"type":["string","null"]},"created_at":{"type":"string"},"edited_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"poster_id":{"type":"string","format":"uuid"}}},"ContentsListResponse":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"ContentsQuery":{"type":"object","properties":{"ref":{"type":["string","null"]}}},"ContentsResponse":{"type":"object","required":["name","path","sha","type","size"],"properties":{"content":{"type":["string","null"]},"download_url":{"type":["string","null"]},"encoding":{"type":["string","null"]},"git_url":{"type":["string","null"]},"html_url":{"type":["string","null"]},"last_author_date":{"type":["string","null"]},"last_commit_message":{"type":["string","null"]},"last_commit_sha":{"type":["string","null"]},"last_committer_date":{"type":["string","null"]},"lfs_oid":{"type":["string","null"]},"lfs_size":{"type":["integer","null"],"format":"int64"},"links":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FileLinksResponse"}]},"name":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"},"submodule_git_url":{"type":["string","null"]},"target":{"type":["string","null"]},"type":{"type":"string"},"url":{"type":["string","null"]}}},"CreateAccessKeyCmd":{"type":"object","required":["name","scope"],"properties":{"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"}}},"CreateAccessKeyResp":{"type":"object","required":["key","token"],"properties":{"key":{"$ref":"#/components/schemas/AccessKeyView"},"token":{"type":"string"}}},"CreateBanCmd":{"type":"object","required":["user_id"],"properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"CreateBranchOption":{"type":"object","required":["new_branch_name"],"properties":{"new_branch_name":{"type":"string"},"old_branch_name":{"type":["string","null"]},"old_ref_name":{"type":["string","null"]}}},"CreateBranchProtectionOption":{"type":"object","required":["branch_name"],"properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"rule_name":{"type":["string","null"]},"unprotected_file_patterns":{"type":["string","null"]}}},"CreateCollectionOption":{"type":"object","required":["space_id","name"],"properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"CreateCommentOption":{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"}}},"CreateDependencyOption":{"type":"object","required":["dependency_id"],"properties":{"dependency_id":{"type":"string","format":"uuid"}}},"CreateDeployKeyOption":{"type":"object","required":["title","key"],"properties":{"key":{"type":"string"},"read_only":{"type":["boolean","null"]},"title":{"type":"string"}}},"CreateDocumentCmd":{"type":"object","required":["title","slug"],"properties":{"content":{"type":"string"},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"}}},"CreateFileOption":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}}]},"CreateInviteCmd":{"type":"object","required":["role_ids"],"properties":{"email":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"user_id":{"type":["string","null"],"format":"uuid"}}},"CreateIssueOption":{"type":"object","required":["title","body"],"properties":{"body":{"type":"string"},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string"}}},"CreateLabelOption":{"type":"object","required":["name","color"],"properties":{"color":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"}}},"CreateMemberOption":{"type":"object","required":["user_id","kind"],"properties":{"kind":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"CreateMilestoneOption":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"name":{"type":"string"}}},"CreatePinOption":{"type":"object","required":["issue_id","pin_order"],"properties":{"issue_id":{"type":"string","format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"CreateProjectCmd":{"type":"object","required":["space_id","name"],"properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"},"target_date":{"type":["string","null"],"format":"date"}}},"CreatePullRequestCommentOption":{"type":"object","required":["body"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]}}},"CreatePullRequestOption":{"type":"object","required":["title","head","base"],"properties":{"base":{"type":"string"},"body":{"type":["string","null"]},"head":{"type":"string"},"title":{"type":"string"}}},"CreateReactionOption":{"type":"object","required":["emoji"],"properties":{"emoji":{"type":"string"}}},"CreateReleaseOption":{"type":"object","required":["tag_name","title"],"properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]},"title":{"type":"string"}}},"CreateRepoOption":{"type":"object","required":["space_id","name"],"properties":{"auto_init":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"gitignores":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"issue_labels":{"type":["string","null"]},"license_name":{"type":["string","null"]},"name":{"type":"string"},"object_format":{"type":["string","null"]},"parent_dir":{"type":["string","null"],"format":"uuid"},"readme":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"CreateRepoRelOption":{"type":"object","required":["repo_id"],"properties":{"repo_id":{"type":"string","format":"uuid"}}},"CreateRoleCmd":{"type":"object","required":["name","permissions"],"properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"CreateSpaceCmd":{"type":"object","required":["name"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"public":{"type":"boolean"},"welcome_message":{"type":["string","null"]}}},"CreateStatusOption":{"type":"object","required":["state","context"],"properties":{"context":{"type":"string"},"description":{"type":["string","null"]},"state":{"type":"string"},"target_url":{"type":["string","null"]}}},"CreateTagOption":{"type":"object","required":["tag_name"],"properties":{"message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]}}},"CreateTagProtectionOption":{"type":"object","required":["name_pattern"],"properties":{"name_pattern":{"type":"string"},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"CreateViewCmd":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"sort_by":{"type":"string"}}},"DeleteFileOption":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["sha"],"properties":{"sha":{"type":"string"}}}]},"DeletionRequestView":{"type":"object","required":["id","user_id","status","created_at","updated_at"],"properties":{"cancelled_at":{"type":["string","null"]},"completed_at":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"scheduled_for":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/DeletionStatus"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"DeletionStatus":{"type":"string","enum":["pending","scheduled","completed","cancelled"]},"DependencyView":{"type":"object","required":["id","issue_id","dependency_id","created_at"],"properties":{"created_at":{"type":"string"},"dependency_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"}}},"DeployKeyPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeployKeyView"}},"total":{"type":"integer","format":"int64"}}},"DeployKeyView":{"type":"object","required":["id","key_id","repo_id","title","key_type","fingerprint","content","url","read_only","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_id":{"type":"integer","format":"int64"},"key_type":{"type":"string"},"last_used_at":{"type":["string","null"]},"read_only":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"title":{"type":"string"},"url":{"type":"string"}}},"DeviceView":{"type":"object","required":["id","is_trusted","first_seen_at","last_seen_at","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"device_name":{"type":["string","null"]},"device_type":{"type":["string","null"]},"first_seen_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_trusted":{"type":"boolean"},"last_seen_at":{"type":"string"},"os":{"type":["string","null"]},"updated_at":{"type":"string"},"user_agent":{"type":["string","null"]}}},"DocumentPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DocumentView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"DocumentView":{"type":"object","required":["id","project_id","creator_id","title","slug","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"last_editor_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"project_id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"EditBranchProtectionOption":{"type":"object","properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"unprotected_file_patterns":{"type":["string","null"]}}},"EditReleaseOption":{"type":"object","properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_name":{"type":["string","null"]},"target":{"type":["string","null"]},"title":{"type":["string","null"]}}},"EditTagProtectionOption":{"type":"object","properties":{"name_pattern":{"type":["string","null"]},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"EmailChangeTicketStatus":{"type":"string","enum":["pending","verified","completed","cancelled"]},"EmailChangeTicketView":{"type":"object","required":["id","new_email","status","expires_at","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"new_email":{"type":"string"},"status":{"$ref":"#/components/schemas/EmailChangeTicketStatus"},"used_at":{"type":["string","null"]}}},"EmailView":{"type":"object","required":["id","email","is_activated","is_primary","created_at","updated_at"],"properties":{"activated_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_activated":{"type":"boolean"},"is_primary":{"type":"boolean"},"updated_at":{"type":"string"}}},"ErrorBody":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"EventPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventView"}},"total":{"type":"integer","format":"int64"}}},"EventView":{"type":"object","required":["id","user_id","event_type","created_at"],"properties":{"comment_id":{"type":["string","null"],"format":"uuid"},"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"new_ref":{"type":["string","null"]},"new_title":{"type":["string","null"]},"old_ref":{"type":["string","null"]},"old_title":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"ExternalTracker":{"type":"object","required":["external_tracker_url","external_tracker_format","external_tracker_style"],"properties":{"external_tracker_format":{"type":"string"},"external_tracker_style":{"type":"string"},"external_tracker_url":{"type":"string"}}},"ExternalWiki":{"type":"object","required":["external_wiki_url"],"properties":{"external_wiki_url":{"type":"string"}}},"FavoritePage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FavoriteView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"FavoriteView":{"type":"object","required":["id","project_id","user_id","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"folder":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"FileLinksResponse":{"type":"object","properties":{"git":{"type":["string","null"]},"html":{"type":["string","null"]},"self":{"type":["string","null"]}}},"FileOptions":{"type":"object","properties":{"author":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GitIdentity"}]},"branch":{"type":["string","null"]},"committer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GitIdentity"}]},"dates":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitDateOptions"}]},"force_push":{"type":["boolean","null"]},"message":{"type":["string","null"]},"new_branch":{"type":["string","null"]},"signoff":{"type":["boolean","null"]}}},"FilesResponse":{"type":"object","required":["files"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitSummary"}]},"files":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"FollowerSummary":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"ForgotPasswordCmd":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"ForgotPasswordResp":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"ForkRepoOption":{"type":"object","required":["to_channel_id"],"properties":{"description":{"type":["string","null"]},"name":{"type":["string","null"]},"to_channel_id":{"type":"string","format":"uuid"}}},"GenerateRepoOption":{"type":"object","required":["to_channel_id","name"],"properties":{"description":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"name":{"type":"string"},"to_channel_id":{"type":"string","format":"uuid"}}},"GitIdentity":{"type":"object","required":["name","email"],"properties":{"date":{"type":["string","null"]},"email":{"type":"string"},"name":{"type":"string"}}},"GitRef":{"type":"object","required":["name","sha","type_"],"properties":{"name":{"type":"string"},"sha":{"type":"string"},"type_":{"type":"string"}}},"HealthStatus":{"type":"object","required":["status","service"],"properties":{"service":{"type":"string"},"status":{"type":"string"}}},"InternalTracker":{"type":"object","required":["enable_time_tracker","allow_only_contributors_to_track_time","enable_issue_dependencies"],"properties":{"allow_only_contributors_to_track_time":{"type":"boolean"},"enable_issue_dependencies":{"type":"boolean"},"enable_time_tracker":{"type":"boolean"}}},"IssuePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/IssueView"}},"total":{"type":"integer","format":"int64"}}},"IssueState":{"type":"string","enum":["open","closed"]},"IssueUserView":{"type":"object","required":["id","user_id","issue_id","is_read","is_mentioned","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_mentioned":{"type":"boolean"},"is_read":{"type":"boolean"},"issue_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"IssueView":{"type":"object","required":["id","collection_id","autoincrement_id","author_id","title","body","state","created_at"],"properties":{"author_id":{"type":"string","format":"uuid"},"autoincrement_id":{"type":"integer","format":"int32"},"body":{"type":"string"},"closed_at":{"type":["string","null"]},"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"milestone_id":{"type":["string","null"],"format":"uuid"},"state":{"$ref":"#/components/schemas/IssueState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"LabelPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LabelView"}},"total":{"type":"integer","format":"int64"}}},"LabelView":{"type":"object","required":["id","channel_id","name","exclusive","exclusive_order","color","is_archived","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"color":{"type":"string"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":"boolean"},"exclusive_order":{"type":"integer","format":"int32"},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"name":{"type":"string"},"updated_at":{"type":["string","null"]}}},"LinkKind":{"type":"string","enum":["related","duplicate","blocks","blocked_by"]},"LinkPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LinkView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"LinkView":{"type":"object","required":["id","project_id","related_project_id","kind","created_by","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"kind":{"$ref":"#/components/schemas/LinkKind"},"project_id":{"type":"string","format":"uuid"},"related_project_id":{"type":"string","format":"uuid"}}},"ListActivityQuery":{"type":"object","properties":{"page":{"type":"integer","format":"int64","minimum":0},"per_page":{"type":"integer","format":"int64","minimum":0},"verb":{"type":["string","null"]}}},"ListAttachmentQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListBlocksQuery":{"type":"object","properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0}}},"ListBranchProtectionQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListBranchQuery":{"type":"object","properties":{"keyword":{"type":["string","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListCollaboratorQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListCollectionQuery":{"type":"object","properties":{"channel_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"ListCommentQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"parent_id":{"type":["string","null"],"format":"uuid"}}},"ListContentHistoryQuery":{"type":"object","properties":{"comment_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListDeployKeyQuery":{"type":"object","properties":{"fingerprint":{"type":["string","null"]},"key_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListEventQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListFollowersQuery":{"type":"object","required":["target_uid"],"properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0},"target_uid":{"type":"string","format":"uuid"}}},"ListFollowingQuery":{"type":"object","required":["user_uid"],"properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0},"user_uid":{"type":"string","format":"uuid"}}},"ListIssueQuery":{"type":"object","properties":{"author_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"milestone_id":{"type":["string","null"],"format":"uuid"},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/IssueState"}]}}},"ListLabelQuery":{"type":"object","properties":{"is_archived":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"ListMemberQuery":{"type":"object","properties":{"kind":{"type":["string","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListMilestoneQuery":{"type":"object","properties":{"is_closed":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"ListNotificationsQuery":{"type":"object","properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0},"notification_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/NotificationType"}]},"unread_only":{"type":["boolean","null"]}}},"ListProjectQuery":{"type":"object","required":["space_id"],"properties":{"lead_id":{"type":["string","null"],"format":"uuid"},"page":{"type":"integer","format":"int64","minimum":0},"per_page":{"type":"integer","format":"int64","minimum":0},"q":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"starred_only":{"type":["boolean","null"]},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectState"}]}}},"ListPullRequestQuery":{"type":"object","properties":{"keyword":{"type":["string","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"state":{"type":["string","null"]}}},"ListReactionQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListReleaseQuery":{"type":"object","properties":{"draft":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"prerelease":{"type":["boolean","null"]}}},"ListRepoQuery":{"type":"object","properties":{"channel_id":{"type":["string","null"],"format":"uuid"},"is_archived":{"type":["boolean","null"]},"is_private":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"owner_user_id":{"type":["string","null"],"format":"uuid"},"q":{"type":["string","null"]}}},"ListSessionsQuery":{"type":"object","properties":{"app_id":{"type":["string","null"]},"include_revoked":{"type":"boolean"}}},"ListStatusQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"sort":{"type":["string","null"]},"state":{"type":["string","null"]}}},"ListSubscriberQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListTagProtectionQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListTagQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListTrackedTimeQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"user_id":{"type":["string","null"],"format":"uuid"}}},"LoginCmd":{"type":"object","required":["identifier","password","pow"],"properties":{"app_id":{"type":["string","null"]},"identifier":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"LoginResp":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"LogoutCmd":{"type":"object","required":["refresh_token"],"properties":{"refresh_token":{"type":"string"}}},"LogoutResp":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"boolean"}}},"MarkAllReadResp":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"MarkReadCmd":{"type":"object","required":["notification_ids"],"properties":{"notification_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"MarkReadResp":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"MemberPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MemberView"}},"total":{"type":"integer","format":"int64"}}},"MemberRole":{"type":"string","enum":["owner","lead","contributor","viewer"]},"MemberView":{"type":"object","required":["id","issue_id","user_id","kind","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"kind":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"MemeView":{"type":"object","required":["id","name","content_type","url","size","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"MergePullRequestOption":{"type":"object","required":["style"],"properties":{"commit_message":{"type":["string","null"]},"commit_title":{"type":["string","null"]},"delete_branch_after_merge":{"type":"boolean"},"style":{"$ref":"#/components/schemas/MergeStyle"}}},"MergeStyle":{"type":"string","enum":["fast_forward","rebase","rebase_merge","squash","merge","manually_merged"]},"MergeUpstreamRequest":{"type":"object","required":["branch"],"properties":{"branch":{"type":"string"},"ff_only":{"type":["boolean","null"]}}},"MergeUpstreamResponse":{"type":"object","required":["merge_type"],"properties":{"merge_type":{"type":"string"}}},"MergeView":{"type":"object","required":["sha","merged"],"properties":{"merged":{"type":"boolean"},"message":{"type":["string","null"]},"sha":{"type":"string"}}},"MessageNotifications":{"type":"string","enum":["all","mentions","nothing"]},"MilestonePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MilestoneView"}},"total":{"type":"integer","format":"int64"}}},"MilestoneView":{"type":"object","required":["id","collection_id","name","is_closed","num_issues","num_closed_issues","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_closed":{"type":"boolean"},"name":{"type":"string"},"num_closed_issues":{"type":"integer","format":"int32"},"num_issues":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"]}}},"NoteView":{"type":"object","required":["sha","message"],"properties":{"message":{"type":"string"},"sha":{"type":"string"}}},"NotificationType":{"type":"string","enum":["mention","reply","follow","invite","assignment","system"]},"NotificationView":{"type":"object","required":["id","notification_type","title","created_at"],"properties":{"actor_uid":{"type":["string","null"],"format":"uuid"},"body":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"notification_type":{"$ref":"#/components/schemas/NotificationType"},"read_at":{"type":["string","null"]},"title":{"type":"string"}}},"OAuthLoginResp":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user_id","auto_registered"],"properties":{"access_token":{"type":"string"},"auto_registered":{"type":"boolean"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user_id":{"type":"string"}}},"OAuthProvider":{"type":"string","enum":["google","github","apple"]},"OAuthProviderInfo":{"type":"object","required":["name","display_name","authorize_url"],"properties":{"authorize_url":{"type":"string"},"display_name":{"type":"string"},"name":{"type":"string"}}},"Permission":{"type":"object","required":["admin","push","pull"],"properties":{"admin":{"type":"boolean"},"pull":{"type":"boolean"},"push":{"type":"boolean"}}},"PinView":{"type":"object","required":["id","collection_id","pin_order","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"PowChallengeResp":{"type":"object","required":["challenge","ttl_seconds"],"properties":{"challenge":{"type":"string"},"ttl_seconds":{"type":"integer","format":"int64","minimum":0}}},"PowProof":{"type":"object","required":["challenge","solution"],"properties":{"challenge":{"type":"string"},"solution":{"type":"string"}}},"PrState":{"type":"string","enum":["open","closed","merged"]},"ProfileView":{"type":"object","required":["user_id","show_email","show_location","show_real_name","show_activity","updated_at"],"properties":{"accent_color":{"type":["string","null"]},"banner_color":{"type":["integer","null"],"format":"int32"},"banner_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"company":{"type":["string","null"]},"date_of_birth":{"type":["string","null"],"format":"date"},"location":{"type":["string","null"]},"pronouns":{"type":["string","null"]},"pronouns_privacy":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]},"real_name":{"type":["string","null"]},"show_activity":{"type":"boolean"},"show_email":{"type":"boolean"},"show_location":{"type":"boolean"},"show_real_name":{"type":"boolean"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"},"website":{"type":["string","null"]}}},"ProfileVisibility":{"type":"string","enum":["public","registered_only","members_only","private"]},"ProjectHealth":{"type":"string","enum":["on_track","at_risk","off_track","none"]},"ProjectPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ProjectState":{"type":"string","enum":["backlog","planned","in_progress","paused","completed","cancelled"]},"ProjectView":{"type":"object","required":["id","space_id","creator_id","name","state","health","sort_order","starred","created_at"],"properties":{"cancelled_at":{"type":["string","null"],"format":"date-time"},"color":{"type":["string","null"]},"completed_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"health":{"$ref":"#/components/schemas/ProjectHealth"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"space_id":{"type":"string","format":"uuid"},"starred":{"type":"integer","format":"int32"},"started_at":{"type":["string","null"],"format":"date-time"},"state":{"$ref":"#/components/schemas/ProjectState"},"target_date":{"type":["string","null"],"format":"date"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"PublisherSummary":{"type":"object","required":["id","name","login"],"properties":{"avatar_url":{"type":["string","null"]},"email":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"},"name":{"type":"string"}}},"PullRequestCommentView":{"type":"object","required":["id","pull_request_id","user_id","body","created_at"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]},"pull_request_id":{"type":"string","format":"uuid"},"review_id":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"PullRequestEventView":{"type":"object","required":["id","pull_request_id","user_id","event_type","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"string","format":"uuid"},"pull_request_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"PullRequestPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PullRequestView"}},"total":{"type":"integer","format":"int64"}}},"PullRequestReviewView":{"type":"object","required":["id","pull_request_id","user_id","official","state","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"official":{"type":"boolean"},"pull_request_id":{"type":"string","format":"uuid"},"state":{"$ref":"#/components/schemas/ReviewState"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"PullRequestView":{"type":"object","required":["id","repo_id","number","title","head_branch","base_branch","author_id","state","is_locked","has_merged","created_at","comments_count","reviews_count"],"properties":{"author_id":{"type":"string","format":"uuid"},"base_branch":{"type":"string"},"base_sha":{"type":["string","null"]},"body":{"type":["string","null"]},"closed_at":{"type":["string","null"]},"comments_count":{"type":"integer","format":"int64"},"created_at":{"type":"string"},"has_merged":{"type":"boolean"},"head_branch":{"type":"string"},"head_sha":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_locked":{"type":"boolean"},"mergeable":{"type":["boolean","null"]},"mergeable_state":{"type":["string","null"]},"merged_at":{"type":["string","null"]},"merged_commit_sha":{"type":["string","null"]},"merger_id":{"type":["string","null"]},"number":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"reviews_count":{"type":"integer","format":"int64"},"state":{"$ref":"#/components/schemas/PrState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"PushPlatform":{"type":"string","enum":["web_push","android_fcm","ios_apns"]},"PushSubscriptionView":{"type":"object","required":["id","platform","endpoint","created_at"],"properties":{"created_at":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"string","format":"uuid"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"ReactionAggView":{"type":"object","required":["emoji","count","user_ids"],"properties":{"count":{"type":"integer","format":"int64"},"emoji":{"type":"string"},"user_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"ReactionScope":{"type":"string","enum":["issue","comment"]},"ReactionView":{"type":"object","required":["id","scope","target_id","user_id","emoji","created_at"],"properties":{"created_at":{"type":"string"},"emoji":{"type":"string"},"id":{"type":"string","format":"uuid"},"scope":{"$ref":"#/components/schemas/ReactionScope"},"target_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"RecentMentionView":{"type":"object","required":["id","channel_id","message_id","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}},"ReclaimCmd":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"ReclaimResp":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"RecoveryCodeView":{"type":"object","required":["id","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"used_at":{"type":["string","null"]}}},"RefreshCmd":{"type":"object","required":["refresh_token"],"properties":{"app_id":{"type":["string","null"]},"refresh_token":{"type":"string"}}},"RefreshResp":{"type":"object","required":["access_token","refresh_token","token_type","expires_in"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"}}},"RegenerateRecoveryResp":{"type":"object","required":["codes"],"properties":{"codes":{"type":"array","items":{"type":"string"}}}},"RegisterCmd":{"type":"object","required":["email","password","pow"],"properties":{"accept_agreements":{"type":"array","items":{"type":"string"}},"email":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"username":{"type":["string","null"]}}},"RegisterResp":{"type":"object","required":["uid","pending","temp_key","purpose"],"properties":{"pending":{"type":"boolean"},"purpose":{"type":"string"},"temp_key":{"$ref":"#/components/schemas/TempKey"},"uid":{"type":"string"}}},"ReleaseAttachment":{"type":"object","required":["id","name","size","download_url","created_at"],"properties":{"created_at":{"type":"string"},"download_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"ReleasePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseView"}},"total":{"type":"integer","format":"int64"}}},"ReleaseView":{"type":"object","required":["id","repo_id","tag_name","target","title","sha","num_commits","is_draft","is_prerelease","is_tag","url","html_url","tarball_url","zipball_url","upload_url","publisher","attachments","created_at","updated_at"],"properties":{"attachments":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAttachment"}},"content":{"type":["string","null"]},"created_at":{"type":"string"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_draft":{"type":"boolean"},"is_prerelease":{"type":"boolean"},"is_tag":{"type":"boolean"},"num_commits":{"type":"integer","format":"int32"},"publisher":{"$ref":"#/components/schemas/UserSummary"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"tag_name":{"type":"string"},"tarball_url":{"type":"string"},"target":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"upload_url":{"type":"string"},"url":{"type":"string"},"zipball_url":{"type":"string"}}},"RenameBranchOption":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"RenameRepoOption":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"RepoCollaboratorPermission":{"type":"object","required":["permission","role","user"],"properties":{"permission":{"type":"string"},"role":{"type":"string"},"user":{"$ref":"#/components/schemas/UserSummary"}}},"RepoPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RepoView"}},"total":{"type":"integer","format":"int64"}}},"RepoRelView":{"type":"object","required":["id","issue_id","repo_id","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"}}},"RepoTopicOptions":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"RepoView":{"type":"object","required":["id","channel_id","space_id","name","lower_name","full_name","default_branch","enable_lfs","is_private","is_archived","is_fork","is_template","is_mirror","empty","size","git_size","lfs_size","nums_watch","nums_star","nums_pr","nums_commits","nums_branches","nums_tags","allow_rebase","allow_rebase_explicit","allow_squash_merge","allow_merge_commits","allow_fast_forward_only_merge","allow_rebase_update","allow_merge_update","allow_manual_merge","autodetect_manual_merge","default_delete_branch_after_merge","default_allow_maintainer_edit","ignore_whitespace_conflicts","object_format","has_code","has_issues","has_wiki","has_pull_requests","has_projects","has_releases","has_packages","has_actions","projects_mode","languages","licenses","topics","html_url","url","link","ssh_url","clone_url","created_at","updated_at"],"properties":{"allow_fast_forward_only_merge":{"type":"boolean"},"allow_manual_merge":{"type":"boolean"},"allow_merge_commits":{"type":"boolean"},"allow_merge_update":{"type":"boolean"},"allow_rebase":{"type":"boolean"},"allow_rebase_explicit":{"type":"boolean"},"allow_rebase_update":{"type":"boolean"},"allow_squash_merge":{"type":"boolean"},"archived_at":{"type":["string","null"]},"autodetect_manual_merge":{"type":"boolean"},"avatar_url":{"type":["string","null"]},"channel":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChannelSummary"}]},"channel_id":{"type":"string","format":"uuid"},"clone_url":{"type":"string"},"created_at":{"type":"string"},"default_allow_maintainer_edit":{"type":"boolean"},"default_branch":{"type":"string"},"default_delete_branch_after_merge":{"type":"boolean"},"description":{"type":["string","null"]},"empty":{"type":"boolean"},"enable_lfs":{"type":"boolean"},"full_name":{"type":"string"},"git_size":{"type":"integer","format":"int64"},"has_actions":{"type":"boolean"},"has_code":{"type":"boolean"},"has_issues":{"type":"boolean"},"has_packages":{"type":"boolean"},"has_projects":{"type":"boolean"},"has_pull_requests":{"type":"boolean"},"has_releases":{"type":"boolean"},"has_wiki":{"type":"boolean"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"ignore_whitespace_conflicts":{"type":"boolean"},"is_archived":{"type":"boolean"},"is_fork":{"type":"boolean"},"is_mirror":{"type":"boolean"},"is_private":{"type":"boolean"},"is_template":{"type":"boolean"},"languages":{"type":"array","items":{"type":"string"}},"last_pushed_at":{"type":["string","null"]},"lfs_size":{"type":"integer","format":"int64"},"license_name":{"type":["string","null"]},"licenses":{"type":"array","items":{"type":"string"}},"link":{"type":"string"},"lower_name":{"type":"string"},"name":{"type":"string"},"nums_branches":{"type":"integer","format":"int32"},"nums_commits":{"type":"integer","format":"int32"},"nums_pr":{"type":"integer","format":"int32"},"nums_star":{"type":"integer","format":"int32"},"nums_tags":{"type":"integer","format":"int32"},"nums_watch":{"type":"integer","format":"int32"},"object_format":{"type":"string"},"parent":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RepoView"}]},"primary_language":{"type":["string","null"]},"projects_mode":{"type":"string"},"size":{"type":"integer","format":"int64"},"space":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceSummary"}]},"space_id":{"type":"string","format":"uuid"},"ssh_url":{"type":"string"},"storage_limit_size":{"type":["integer","null"],"format":"int64"},"topics":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"url":{"type":"string"},"website":{"type":["string","null"]}}},"ReportStatus":{"type":"string","enum":["open","under_review","resolved","dismissed"]},"ReportView":{"type":"object","required":["id","reported_uid","reason","status","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"evidence":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"},"reporter_uid":{"type":["string","null"],"format":"uuid"},"resolution_note":{"type":["string","null"]},"resolver_uid":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/ReportStatus"},"updated_at":{"type":"string"}}},"RequestChangeBody":{"type":"object","required":["new_email"],"properties":{"new_email":{"type":"string"}}},"RequestDeletionCmd":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"ResendCodeCmd":{"type":"object","required":["email","pow","purpose"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"purpose":{"type":"string"}}},"ResendCodeResp":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"ResetPasswordCmd":{"type":"object","required":["email","token","new_password","temp_key_value"],"properties":{"email":{"type":"string"},"new_password":{"type":"string"},"temp_key_value":{"type":"string"},"token":{"type":"string"}}},"ResetPasswordResp":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"}}},"ReviewState":{"type":"string","enum":["approved","changes_requested","commented"]},"RevokeAllResp":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"integer","format":"int64","minimum":0}}},"RevokeSuspensionCmd":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"RoleOverwriteView":{"type":"object","required":["id","space_id","channel_id","role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"id":{"type":"string","format":"uuid"},"role_id":{"type":"string","format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"RolePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RoleView"}},"total":{"type":"integer","format":"int64"}}},"RoleView":{"type":"object","required":["id","space_id","name","position","color","version","created_at","created_by","permissions"],"properties":{"color":{"type":"string"},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon_hash":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":"integer","format":"int64"},"space_id":{"type":"string","format":"uuid"},"unicode_emoji":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"version":{"type":"integer","format":"int32"}}},"SaveMessageCmd":{"type":"object","required":["channel_id","message_id"],"properties":{"channel_id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}},"SavedMessageView":{"type":"object","required":["id","channel_id","message_id","saved_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"saved_at":{"type":"string"}}},"ScheduledMessageStatus":{"type":"string","enum":["pending","sent","cancelled"]},"ScheduledMessageView":{"type":"object","required":["id","target_channel_id","payload","scheduled_at","status","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"payload":{"type":"string"},"scheduled_at":{"type":"string"},"status":{"$ref":"#/components/schemas/ScheduledMessageStatus"},"target_channel_id":{"type":"string","format":"uuid"}}},"SessionKind":{"type":"string","enum":["web_login","bearer_access"]},"SessionView":{"type":"object","required":["id","kind","is_revoked","created_at","expires_at"],"properties":{"app_id":{"type":["string","null"]},"client_ip_hash":{"type":["string","null"]},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_revoked":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/SessionKind"},"replaced_at":{"type":["string","null"]},"user_agent_hash":{"type":["string","null"]}}},"SetPrimaryEmailResp":{"type":"object","required":["email"],"properties":{"email":{"$ref":"#/components/schemas/EmailView"}}},"SetRoleOverwriteCmd":{"type":"object","required":["role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"role_id":{"type":"string","format":"uuid"}}},"SetUserOverwriteCmd":{"type":"object","required":["user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"SpaceAllowJoinLevel":{"type":"string","enum":["none","need_mail_active","need_mail_active_and_last_one_mid","need_mail_active_and_last_one_hours","need_mail_active_and_phone_active"]},"SpaceBanPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceBanView"}},"total":{"type":"integer","format":"int64"}}},"SpaceBanView":{"type":"object","required":["space_id","user_id","banned_by","created_at","updated_at","allow_agent_join","allow_speak","allow_push_repo","allow_comment_any"],"properties":{"allow_agent_join":{"type":"boolean"},"allow_comment_any":{"type":"boolean"},"allow_push_repo":{"type":"boolean"},"allow_speak":{"type":"boolean"},"banned_by":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"SpaceInvitePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceInviteView"}},"total":{"type":"integer","format":"int64"}}},"SpaceInviteView":{"type":"object","required":["id","space_id","user_id","email","role_ids","created_at"],"properties":{"accepted_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"revoked_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"space_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"SpaceMemberPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceMemberView"}},"total":{"type":"integer","format":"int64"}}},"SpaceMemberStatus":{"type":"string","enum":["active","inactive","left","removed"]},"SpaceMemberView":{"type":"object","required":["space_id","user_id","status","joined_at","created_at","message_notifications","muted","mobile_push","suppress_everyone","suppress_roles","hide_muted_channels"],"properties":{"alias_avatar_url":{"type":["string","null"]},"alias_name":{"type":["string","null"]},"created_at":{"type":"string"},"hide_muted_channels":{"type":"boolean"},"invited_at":{"type":["string","null"]},"invited_by":{"type":["string","null"],"format":"uuid"},"joined_at":{"type":"string"},"last_active_at":{"type":["string","null"]},"left_at":{"type":["string","null"]},"message_notifications":{"$ref":"#/components/schemas/MessageNotifications"},"mobile_push":{"type":"boolean"},"mute_until":{"type":["string","null"]},"muted":{"type":"boolean"},"space_id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/SpaceMemberStatus"},"suppress_everyone":{"type":"boolean"},"suppress_roles":{"type":"boolean"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"SpacePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceView"}},"total":{"type":"integer","format":"int64"}}},"SpaceSummary":{"type":"object","required":["id","name"],"properties":{"display_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"SpaceView":{"type":"object","required":["id","name","owner_id","public","is_active","allow_join","allow_invite","member_count","allow_join_level","member_must_enable_2fa","created_at","updated_at"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"$ref":"#/components/schemas/SpaceAllowJoinLevel"},"avatar_url":{"type":["string","null"]},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_active":{"type":"boolean"},"member_count":{"type":"integer","format":"int64"},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"public":{"type":"boolean"},"updated_at":{"type":"string"},"welcome_message":{"type":["string","null"]}}},"SshKeyType":{"type":"string","enum":["ssh_rsa","ssh_ed25519","ecdsa_sha2_nistp256"]},"SshKeyView":{"type":"object","required":["id","name","key_type","fingerprint","created_at"],"properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_type":{"$ref":"#/components/schemas/SshKeyType"},"last_used_at":{"type":["string","null"]},"name":{"type":"string"}}},"StopwatchView":{"type":"object","required":["id","issue_id","user_id","started_at","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"started_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"SubmitPullRequestReviewOption":{"type":"object","required":["state"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"state":{"$ref":"#/components/schemas/ReviewState"}}},"SubmitReportCmd":{"type":"object","required":["reported_uid","reason"],"properties":{"evidence":{"type":["string","null"]},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"}}},"SubscriberPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriberView"}},"total":{"type":"integer","format":"int64"}}},"SubscriberView":{"type":"object","required":["user_id","repo_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"mode":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"SuspendCmd":{"type":"object","required":["suspension_type"],"properties":{"ends_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"}}},"SuspensionType":{"type":"string","enum":["temporary","permanent"]},"SuspensionView":{"type":"object","required":["id","user_id","suspension_type","starts_at","created_at"],"properties":{"created_at":{"type":"string"},"ends_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"revoked_at":{"type":["string","null"]},"revoked_by":{"type":["string","null"],"format":"uuid"},"starts_at":{"type":"string"},"suspended_by":{"type":["string","null"],"format":"uuid"},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"},"user_id":{"type":"string","format":"uuid"}}},"SyncResult":{"type":"object","required":["repo_id","branches_added","tags_added","commits_added","size_bytes"],"properties":{"branches_added":{"type":"integer","format":"int64"},"commits_added":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"size_bytes":{"type":"integer","format":"int64"},"tags_added":{"type":"integer","format":"int64"}}},"SyncStatus":{"type":"object","required":["repo_id","branches_total","tags_total","commits_total","size","synced_at"],"properties":{"branches_total":{"type":"integer","format":"int64"},"commits_total":{"type":"integer","format":"int64"},"last_pushed_at":{"type":["string","null"]},"primary_language":{"type":["string","null"]},"repo_id":{"type":"string","format":"uuid"},"size":{"type":"integer","format":"int64"},"synced_at":{"type":"string"},"tags_total":{"type":"integer","format":"int64"}}},"TagPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagView"}},"total":{"type":"integer","format":"int64"}}},"TagProtectionPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagProtectionView"}},"total":{"type":"integer","format":"int64"}}},"TagProtectionView":{"type":"object","required":["id","repo_id","name_pattern","whitelist_usernames","whitelist_teams","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name_pattern":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"whitelist_teams":{"type":"array","items":{"type":"string"}},"whitelist_usernames":{"type":"array","items":{"type":"string"}}}},"TagView":{"type":"object","required":["id","repo_id","name","tag_type","commit_sha","commit","message","zipball_url","tarball_url","created_at"],"properties":{"commit":{"$ref":"#/components/schemas/CommitMeta"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message":{"type":"string"},"name":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"tag_type":{"type":"string"},"tarball_url":{"type":"string"},"zipball_url":{"type":"string"}}},"TempKey":{"type":"object","required":["name","value","ttl_seconds","secure","http_only","same_site"],"properties":{"domain":{"type":["string","null"]},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":["string","null"]},"same_site":{"type":"string"},"secure":{"type":"boolean"},"ttl_seconds":{"type":"integer","format":"int64","minimum":0},"value":{"type":"string"}}},"TopicList":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"TopicSearchQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"TopicSearchResult":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"$ref":"#/components/schemas/TopicView"}}}},"TopicView":{"type":"object","required":["id","name","repo_count","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"repo_count":{"type":"integer","format":"int32"},"updated_at":{"type":"string"}}},"TrackedTimePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TrackedTimeView"}},"total":{"type":"integer","format":"int64"}}},"TrackedTimeView":{"type":"object","required":["id","issue_id","user_id","seconds","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"seconds":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"TransferRepoOption":{"type":"object","required":["new_channel_id"],"properties":{"new_channel_id":{"type":"string","format":"uuid"},"new_name":{"type":["string","null"]}}},"TreeEntryView":{"type":"object","required":["path","mode","type_","sha"],"properties":{"mode":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":["integer","null"],"format":"int64"},"type_":{"type":"string"}}},"TreeView":{"type":"object","required":["sha","entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/TreeEntryView"}},"sha":{"type":"string"}}},"UnassignRoleCmd":{"type":"object","required":["role_id"],"properties":{"role_id":{"type":"string","format":"uuid"}}},"UnreadCountResp":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64"}}},"UpdateBanCmd":{"type":"object","properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]}}},"UpdateBranchOption":{"type":"object","required":["new_commit_id"],"properties":{"force":{"type":["boolean","null"]},"new_commit_id":{"type":"string"},"old_commit_id":{"type":["string","null"]}}},"UpdateBranchProtectionPriorities":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"UpdateCollectionOption":{"type":"object","properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":["string","null"]}}},"UpdateCommentOption":{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}},"UpdateDeviceCmd":{"type":"object","properties":{"device_name":{"type":["string","null"]},"is_trusted":{"type":["boolean","null"]}}},"UpdateDocumentCmd":{"type":"object","properties":{"content":{"type":["string","null"]},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":["string","null"]},"title":{"type":["string","null"]}}},"UpdateFileOption":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"from_path":{"type":["string","null"]},"sha":{"type":["string","null"]}}}]},"UpdateIssueOption":{"type":"object","properties":{"body":{"type":["string","null"]},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":["string","null"]}}},"UpdateIssueUserOption":{"type":"object","properties":{"is_mentioned":{"type":["boolean","null"]},"is_read":{"type":["boolean","null"]}}},"UpdateLabelOption":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"is_archived":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"UpdateMemberCmd":{"type":"object","required":["role"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"}}},"UpdateMilestoneOption":{"type":"object","properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"is_closed":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"UpdatePreferencesCmd":{"type":"object","properties":{"allow_dms_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"allow_mentions_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":["boolean","null"]},"email_flags":{"type":["integer","null"],"format":"int32"},"in_app_flags":{"type":["integer","null"],"format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":["integer","null"],"format":"int32"},"show_online_status":{"type":["boolean","null"]},"theme_mode":{"type":["string","null"]},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"}}},"UpdateProfileCmd":{"type":"object","properties":{"avatar":{"type":["string","null"]},"display_name":{"type":["string","null"]},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"profile":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UpdateProfileFields"}]},"timezone":{"type":["string","null"]},"visibility":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]}}},"UpdateProfileFields":{"type":"object","properties":{"accent_color":{"type":["string","null"]},"banner_color":{"type":["integer","null"],"format":"int32"},"banner_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"company":{"type":["string","null"]},"date_of_birth":{"type":["string","null"],"format":"date"},"location":{"type":["string","null"]},"pronouns":{"type":["string","null"]},"pronouns_privacy":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]},"real_name":{"type":["string","null"]},"show_activity":{"type":["boolean","null"]},"show_email":{"type":["boolean","null"]},"show_location":{"type":["boolean","null"]},"show_real_name":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"UpdateProjectCmd":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectHealth"}]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":["string","null"]},"sort_order":{"type":["integer","null"],"format":"int32"},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectState"}]},"target_date":{"type":["string","null"],"format":"date"}}},"UpdatePullRequestOption":{"type":"object","properties":{"base":{"type":["string","null"]},"body":{"type":["string","null"]},"head":{"type":["string","null"]},"title":{"type":["string","null"]}}},"UpdateRepoOption":{"type":"object","properties":{"allow_fast_forward_only_merge":{"type":["boolean","null"]},"allow_manual_merge":{"type":["boolean","null"]},"allow_merge_commits":{"type":["boolean","null"]},"allow_merge_update":{"type":["boolean","null"]},"allow_rebase":{"type":["boolean","null"]},"allow_rebase_explicit":{"type":["boolean","null"]},"allow_rebase_update":{"type":["boolean","null"]},"allow_squash_merge":{"type":["boolean","null"]},"archived":{"type":["boolean","null"]},"autodetect_manual_merge":{"type":["boolean","null"]},"default_allow_maintainer_edit":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"default_delete_branch_after_merge":{"type":["boolean","null"]},"default_merge_style":{"type":["string","null"]},"default_update_style":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"external_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalTracker"}]},"external_wiki":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalWiki"}]},"has_actions":{"type":["boolean","null"]},"has_code":{"type":["boolean","null"]},"has_issues":{"type":["boolean","null"]},"has_packages":{"type":["boolean","null"]},"has_projects":{"type":["boolean","null"]},"has_pull_requests":{"type":["boolean","null"]},"has_releases":{"type":["boolean","null"]},"has_wiki":{"type":["boolean","null"]},"ignore_whitespace_conflicts":{"type":["boolean","null"]},"internal_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InternalTracker"}]},"is_private":{"type":["boolean","null"]},"license_name":{"type":["string","null"]},"name":{"type":["string","null"]},"projects_mode":{"type":["string","null"]},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"UpdateReportCmd":{"type":"object","required":["status"],"properties":{"resolution_note":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/ReportStatus"}}},"UpdateRoleCmd":{"type":"object","properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":["string","null"]},"permissions":{"type":["array","null"],"items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"UpdateSpaceCmd":{"type":"object","properties":{"allow_invite":{"type":["boolean","null"]},"allow_join":{"type":["boolean","null"]},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":["boolean","null"]},"name":{"type":["string","null"]},"public":{"type":["boolean","null"]},"welcome_message":{"type":["string","null"]}}},"UpdateViewCmd":{"type":"object","properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":["boolean","null"]},"layout":{"type":["string","null"]},"name":{"type":["string","null"]},"sort_by":{"type":["string","null"]}}},"UploadAttachmentInput":{"type":"object","required":["filename","content_type","data"],"properties":{"content_type":{"type":"string"},"data":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"filename":{"type":"string"}}},"UploadAvatarCmd":{"type":"object","required":["content_type","data_base64"],"properties":{"content_type":{"type":"string"},"data_base64":{"type":"string"}}},"UpsertMemeCmd":{"type":"object","required":["name","content_type","url","size"],"properties":{"content_type":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"UpsertPushCmd":{"type":"object","required":["endpoint","p256dh_key","auth_key","platform"],"properties":{"auth_key":{"type":"string"},"endpoint":{"type":"string"},"p256dh_key":{"type":"string"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"UpsertWatchOption":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string"}}},"UserMe":{"type":"object","required":["uid","username","display_name","avatar","is_active","is_admin","is_restricted"],"properties":{"avatar":{"type":"string"},"display_name":{"type":"string"},"is_active":{"type":"boolean"},"is_admin":{"type":"boolean"},"is_restricted":{"type":"boolean"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"uid":{"type":"string"},"username":{"type":"string"}}},"UserOverwriteView":{"type":"object","required":["channel_id","user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"UserPreferences":{"type":"object","required":["user_id","theme_mode","in_app_flags","email_flags","push_flags","email_digest","allow_dms_from","allow_mentions_from","show_online_status","created_at","updated_at"],"properties":{"allow_dms_from":{"$ref":"#/components/schemas/Audience"},"allow_mentions_from":{"$ref":"#/components/schemas/Audience"},"created_at":{"type":"string"},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":"boolean"},"email_flags":{"type":"integer","format":"int32"},"in_app_flags":{"type":"integer","format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":"integer","format":"int32"},"show_online_status":{"type":"boolean"},"theme_mode":{"type":"string"},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"UserPublic":{"type":"object","required":["uid","username","display_name","avatar"],"properties":{"avatar":{"type":"string"},"display_name":{"type":"string"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"uid":{"type":"string"},"username":{"type":"string"}}},"UserSummary":{"type":"object","required":["id","name","login"],"properties":{"email":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"},"name":{"type":"string"}}},"VerifyCodeCmd":{"type":"object","required":["email","purpose","code","temp_key_value"],"properties":{"code":{"type":"string"},"email":{"type":"string"},"purpose":{"type":"string"},"temp_key_value":{"type":"string"},"user_id":{"type":["string","null"]}}},"VerifyCodeResult":{"type":"object","required":["code_row_id"],"properties":{"code_row_id":{"type":"string"}}},"ViewPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ViewView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ViewView":{"type":"object","required":["id","project_id","creator_id","name","filter","sort_by","layout","is_shared","sort_order","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"project_id":{"type":"string","format":"uuid"},"sort_by":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"WatchView":{"type":"object","required":["id","user_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"mode":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}}}},"tags":[{"name":"auth","description":"Authentication endpoints"},{"name":"issues","description":"Issue tracking (lib/issues)"},{"name":"project","description":"Project lifecycle, members, views, documents, links, favorites, activities."},{"name":"repo","description":"Repository service (lib/repo)"},{"name":"space","description":"Space, membership, roles, invites, bans, channels, channel members and overwrite endpoints."},{"name":"user","description":"User profile, account, sessions and notifications endpoints."}]}
No newline at end of file
1{"openapi":"3.1.0","info":{"title":"Untitled API","description":"Unified HTTP API for the untitled platform","license":{"name":""},"version":"1.94.0"},"paths":{"/api/v1/auth/agreements":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"List of agreement documents (terms, privacy).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_AgreementDoc"}}}}}}},"/api/v1/auth/agreements/accept":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AcceptAgreementCmd"}}},"required":true},"responses":{"200":{"description":"Agreement acceptance recorded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AcceptAgreementResp"}}}},"400":{"description":"Unknown agreement key or version mismatch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Missing or invalid access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/auth/email/reclaim":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ReclaimCmd"}}},"required":true},"responses":{"200":{"description":"A Signup verification code was issued to the mailbox if the account is inactive; otherwise a constant-shaped no-op is returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReclaimResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/email/resend":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ResendCodeCmd"}}},"required":true},"responses":{"200":{"description":"New code issued (or silently no-op if the email is unknown).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ResendCodeResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/email/verify":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_VerifyCodeCmd"}}},"required":true},"responses":{"200":{"description":"Code verified; the verification-code row id is returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_VerifyCodeResult"}}}},"400":{"description":"Invalid code, missing temp_key cookie, or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_LoginCmd"}}},"required":true},"responses":{"200":{"description":"Authenticated. Returns access/refresh tokens and a public user view.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LoginResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Account forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_LogoutCmd"}}},"required":true},"responses":{"200":{"description":"Refresh token revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LogoutResp"}}}},"401":{"description":"Invalid or expired refresh token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"Authenticated user profile (full view, including privileged fields).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}},"401":{"description":"Missing or invalid access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/auth/oauth/authorize":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AuthorizeCmd"}}},"required":true},"responses":{"200":{"description":"Authorization URL. The state-cookie carries the OAuth state value for the callback.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AuthorizationUrlResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown provider.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/oauth/callback":{"get":{"tags":["auth"],"operationId":"handler","parameters":[{"name":"provider","in":"path","required":true,"schema":{"$ref":"#/components/schemas/OAuthProvider"}},{"name":"code","in":"path","required":true,"schema":{"type":"string"}},{"name":"state","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OAuth login completed. Returns token pair and the resolved user_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_OAuthLoginResp"}}}},"400":{"description":"Missing state cookie or invalid state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"OAuth flow rejected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/oauth/providers":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"List of enabled OAuth providers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_OAuthProviderInfo"}}}}}}},"/api/v1/auth/password/forgot":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ForgotPasswordCmd"}}},"required":true},"responses":{"200":{"description":"Request accepted. The response shape is constant whether or not the email is known; the temp_key cookie carries the token for the subsequent reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ForgotPasswordResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/password/reset":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ResetPasswordCmd"}}},"required":true},"responses":{"200":{"description":"Password updated; all sessions revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ResetPasswordResp"}}}},"400":{"description":"Missing temp_key cookie, weak password, or invalid token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/pow/challenge":{"get":{"tags":["auth"],"operationId":"handler","responses":{"200":{"description":"A fresh PoW challenge bound to this client.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PowChallengeResp"}}}},"400":{"description":"PoW not configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RefreshCmd"}}},"required":true},"responses":{"200":{"description":"Rotated token pair.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RefreshResp"}}}},"401":{"description":"Invalid or expired refresh token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["auth"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RegisterCmd"}}},"required":true},"responses":{"200":{"description":"Account created (possibly pending email verification).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RegisterResp"}}}},"400":{"description":"Validation / PoW failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Email or username already taken.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/api/v1/health/live":{"get":{"tags":["system"],"operationId":"liveness","responses":{"200":{"description":"Process is alive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}},"/api/v1/health/ready":{"get":{"tags":["system"],"operationId":"readiness","responses":{"200":{"description":"Service is ready","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}},"/api/v1/issues":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List issue boards (collections)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_CollectionView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateCollectionOption"}}},"required":true},"responses":{"201":{"description":"Create an issue board (collection)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CollectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Default issue board OR issue list (when query.state/q/author_id/milestone_id is set)"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateIssueOption"}}},"required":true},"responses":{"201":{"description":"Create an issue in this channel's board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete default issue board"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateCollectionOption"}}},"required":true},"responses":{"200":{"description":"Update default issue board","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CollectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/attachments/{owner_type}/{owner_id}":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List attachments"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UploadAttachmentInput"}}},"required":true},"responses":{"201":{"description":"Upload attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AttachmentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/attachments/{owner_type}/{owner_id}/{att_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete attachment"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/labels":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"is_archived","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List labels"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateLabelOption"}}},"required":true},"responses":{"201":{"description":"Create label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LabelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/labels/{label_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LabelView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete label"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateLabelOption"}}},"required":true},"responses":{"200":{"description":"Update label","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LabelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/milestones":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"is_closed","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List milestones"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateMilestoneOption"}}},"required":true},"responses":{"201":{"description":"Create milestone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MilestoneView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/milestones/{milestone_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get milestone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MilestoneView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete milestone"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateMilestoneOption"}}},"required":true},"responses":{"200":{"description":"Update milestone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MilestoneView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/pins":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List pinned issues"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreatePinOption"}}},"required":true},"responses":{"201":{"description":"Pin issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PinView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/pins/{pin_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Unpin issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete issue"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateIssueOption"}}},"required":true},"responses":{"200":{"description":"Update issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/close":{"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CloseIssueOption"}}},"required":true},"responses":{"200":{"description":"Open/close issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/comments":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"parent_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List comments"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateCommentOption"}}},"required":true},"responses":{"201":{"description":"Create comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/comments/{comment_id}":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommentView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete comment"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateCommentOption"}}},"required":true},"responses":{"200":{"description":"Update comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/comments/{comment_id}/reactions":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List comment reactions"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateReactionOption"}}},"required":true},"responses":{"201":{"description":"React to comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReactionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/content_history":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List content history"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/dependencies":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List dependencies"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateDependencyOption"}}},"required":true},"responses":{"201":{"description":"Create dependency","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DependencyView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/dependencies/{dep_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete dependency"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/events":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List issue events"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/labels":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List labels for issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/labels/{label_id}":{"post":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Bind label to issue"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Unbind label from issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/members":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List members"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateMemberOption"}}},"required":true},"responses":{"201":{"description":"Create member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/members/{member_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete member"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/reactions":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List issue reactions"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateReactionOption"}}},"required":true},"responses":{"201":{"description":"React to issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReactionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/reactions/{reaction_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete reaction"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/repo_relations":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List repo relations"}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateRepoRelOption"}}},"required":true},"responses":{"201":{"description":"Link repo to issue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoRelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/repo_relations/{rel_id}":{"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Unlink repo from issue"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/stopwatch":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get my stopwatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_StopwatchView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["issues"],"operationId":"handler","responses":{"201":{"description":"Start stopwatch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_StopwatchView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Stop stopwatch"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/tracked_time":{"get":{"tags":["issues"],"operationId":"handler","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List tracked time"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/users":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"List issue users"}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/users/{uid}":{"patch":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateIssueUserOption"}}},"required":true},"responses":{"200":{"description":"Update issue user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueUserView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/issues/{channel_id}/{issue_id}/watch":{"get":{"tags":["issues"],"operationId":"handler","responses":{"200":{"description":"Get my watch state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_WatchView"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["issues"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpsertWatchOption"}}},"required":true},"responses":{"200":{"description":"Upsert watch state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_WatchView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["issues"],"operationId":"handler","responses":{"204":{"description":"Delete watch state"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"owner_user_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"is_private","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"is_archived","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List repositories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateRepoOption"}}},"required":true},"responses":{"201":{"description":"Create a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/search":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"topic","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"include_desc","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"uid","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"priority_owner_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"team_id","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64"}},{"name":"starred_by","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"private","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"is_private","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"template","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"archived","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"mode","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"exclusive","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"sort","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"order","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"Search repositories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SearchResults"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a repository"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateRepoOption"}}},"required":true},"responses":{"200":{"description":"Update a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/archive":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ArchiveRepoOption"}}},"required":true},"responses":{"200":{"description":"Archive / unarchive a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/archive/{archive_format}/{ref_name}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"format","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"ref_name","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Download an archive"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/assignees/{assignee}":{"get":{"tags":["repo"],"operationId":"check_handler","responses":{"204":{"description":"User is a valid assignee"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/avatar":{"post":{"tags":["repo"],"operationId":"post_handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateAvatarOption"}}},"required":true},"responses":{"204":{"description":"Update repo avatar"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"delete_handler","responses":{"204":{"description":"Delete repo avatar"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/branch_protections":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List branch protections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateBranchProtectionOption"}}},"required":true},"responses":{"201":{"description":"Create a branch protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/branch_protections/priority":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateBranchProtectionPriorities"}}},"required":true},"responses":{"204":{"description":"Update branch protection priorities"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/branch_protections/{policy_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a branch protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a branch protection"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_EditBranchProtectionOption"}}},"required":true},"responses":{"200":{"description":"Edit a branch protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/branches":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"keyword","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List branches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateBranchOption"}}},"required":true},"responses":{"201":{"description":"Create a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/branches/{branch_name}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateBranchOption"}}},"required":true},"responses":{"200":{"description":"Update a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a branch"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/branches/{branch_name}/rename":{"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RenameBranchOption"}}},"required":true},"responses":{"200":{"description":"Rename a branch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BranchView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/collaborators":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List collaborators","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CollaboratorPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/collaborators/{user_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"User is a collaborator"}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddCollaboratorOption"}}},"required":true},"responses":{"204":{"description":"Add or update a collaborator"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Remove a collaborator"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/collaborators/{user_id}/permission":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get collaborator permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoCollaboratorPermission"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/commits":{"get":{"tags":["repo"],"operationId":"list_handler","parameters":[{"name":"sha","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"path","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"since","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"until","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"stat","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"verification","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"files","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"not","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List commits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitsResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/commits/{ref}/status":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get combined status by ref","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CombinedStatusView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/commits/{ref}/statuses":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"sort","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"state","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List commit statuses by ref","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitStatusPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/compare/{base}...{head}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Compare two refs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CompareView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/contents":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List contents at root","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsListResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/contents-ext":{"get":{"tags":["repo"],"operationId":"list_handler","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List contents (ext form)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentsExtResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/contents-ext/{path:path}":{"get":{"tags":["repo"],"operationId":"get_handler","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Get contents (ext form)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentsExtResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/contents/change":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ChangeFilesOptions"}}},"required":true},"responses":{"200":{"description":"Multi-file change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsListResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/contents/{path}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Get a file or directory","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateFileOption"}}},"required":true},"responses":{"200":{"description":"Update a file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateFileOption"}}},"required":true},"responses":{"201":{"description":"Create a file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_DeleteFileOption"}}},"required":true},"responses":{"204":{"description":"Delete a file"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/diffpatch":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ApplyDiffPatchFileOptions"}}},"required":true},"responses":{"200":{"description":"Apply a diff patch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ContentsResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/editorconfig/{filename:path}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get EditorConfig","content":{"text/plain":{}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/file-contents":{"get":{"tags":["repo"],"operationId":"get_handler","responses":{"200":{"description":"Batch read files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_FilesResponse"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"post_handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_Vec_String"}}},"required":true},"responses":{"200":{"description":"Batch read files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_FileDeleteResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/forks":{"get":{"tags":["repo"],"operationId":"list_handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List forks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ForksResponse"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ForkRepoOption"}}},"required":true},"responses":{"201":{"description":"Fork a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/generate":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_GenerateRepoOption"}}},"required":true},"responses":{"201":{"description":"Generate a repository from template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/blobs/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a blob","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_BlobView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/commits/diff/{sha}":{"get":{"tags":["repo"],"operationId":"diff_handler","responses":{"200":{"description":"Get commit diff or patch","content":{"text/plain":{}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/commits/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a commit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/commits/{sha}.{diff_type}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get commit diff or patch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitDiffPayload"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/notes/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a note","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_NoteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/refs":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List git refs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_GitRef"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/refs/{filter}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Filter git refs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_GitRef"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/tags/{sha}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get an annotated tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/git/trees/{sha}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"recursive","in":"path","required":true,"schema":{"type":["boolean","null"]}}],"responses":{"200":{"description":"Get a tree","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TreeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/issue_config":{"get":{"tags":["repo"],"operationId":"get_handler","responses":{"200":{"description":"Get issue config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueConfig"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/issue_config/validate":{"get":{"tags":["repo"],"operationId":"validate_handler","responses":{"200":{"description":"Validate issue config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_IssueConfigValidation"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/issue_templates":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List issue templates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_IssueTemplate"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/keys":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":["string","null"],"format":"uuid"}},{"name":"fingerprint","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List deploy keys","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeployKeyPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateDeployKeyOption"}}},"required":true},"responses":{"201":{"description":"Create a deploy key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeployKeyView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/keys/{key_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a deploy key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeployKeyView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a deploy key"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/languages":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get repo language stats","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LanguagesResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/licenses":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List detected licenses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LicensesResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/media/{filepath:path}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get media (raw or LFS pointer)","content":{"application/octet-stream":{}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/merge-upstream":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_MergeUpstreamRequest"}}},"required":true},"responses":{"200":{"description":"Merge upstream","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MergeUpstreamResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/new_pin_allowed":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Whether new issue pins are allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_NewPinAllowedResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"state","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"keyword","in":"path","required":true,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"List pull requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreatePullRequestOption"}}},"required":true},"responses":{"201":{"description":"Create a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdatePullRequestOption"}}},"required":true},"responses":{"200":{"description":"Update a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/close":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Close a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/comments":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List pull request comments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PullRequestCommentView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreatePullRequestCommentOption"}}},"required":true},"responses":{"201":{"description":"Create a pull request comment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestCommentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/events":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List pull request events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PullRequestEventView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/lock":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Lock a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/merge":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_MergePullRequestOption"}}},"required":true},"responses":{"200":{"description":"Merge a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MergeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/reopen":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Reopen a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/reviews":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List pull request reviews","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PullRequestReviewView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SubmitPullRequestReviewOption"}}},"required":true},"responses":{"201":{"description":"Submit a pull request review","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestReviewView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/pulls/{number}/unlock":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Unlock a pull request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PullRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/raw/{filepath:path}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get raw file content","content":{"application/octet-stream":{}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/releases":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"draft","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"prerelease","in":"path","required":true,"schema":{"type":["boolean","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List releases","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleasePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateReleaseOption"}}},"required":true},"responses":{"201":{"description":"Create a release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/releases/latest":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get the latest release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/releases/tags/{tag}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a release by tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a release by tag"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/releases/{release_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a release"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_EditReleaseOption"}}},"required":true},"responses":{"200":{"description":"Edit a release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/releases/{release_id}/assets":{"get":{"tags":["repo"],"operationId":"list_handler","responses":{"200":{"description":"List release attachments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseAttachmentListResponse"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/releases/{release_id}/assets/{attachment_id}":{"get":{"tags":["repo"],"operationId":"get_handler","responses":{"200":{"description":"Get a release attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReleaseAttachmentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/rename":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RenameRepoOption"}}},"required":true},"responses":{"200":{"description":"Rename a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/reviewers":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List reviewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_UserMini"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/signing-key.gpg":{"get":{"tags":["repo"],"operationId":"gpg_handler","responses":{"200":{"description":"GPG signing key","content":{"text/plain":{}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/signing-key.pub":{"get":{"tags":["repo"],"operationId":"ssh_handler","responses":{"200":{"description":"SSH signing key","content":{"text/plain":{}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/stargazers":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List stargazers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_UserMini"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/statuses/{sha}":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"sort","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"state","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List commit statuses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitStatusPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateStatusOption"}}},"required":true},"responses":{"201":{"description":"Create a commit status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CommitStatusView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/subscribers":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List subscribers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SubscriberPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/subscription":{"get":{"tags":["repo"],"operationId":"get_handler","responses":{"200":{"description":"Get current user's subscription","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Subscription"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"put_handler","responses":{"204":{"description":"Watch the repo"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"delete_handler","responses":{"204":{"description":"Unwatch the repo"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/sync":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get repo metadata sync status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SyncStatus"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/sync/run":{"post":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Trigger a metadata sync","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SyncResult"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/tag_protections":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List tag protections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateTagProtectionOption"}}},"required":true},"responses":{"201":{"description":"Create a tag protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/tag_protections/{policy_id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a tag protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a tag protection"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_EditTagProtectionOption"}}},"required":true},"responses":{"200":{"description":"Edit a tag protection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagProtectionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/tags":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List tags","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateTagOption"}}},"required":true},"responses":{"201":{"description":"Create a tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/tags/{tag_name}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a tag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TagView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Delete a tag"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/topics":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"List repo topics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TopicList"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RepoTopicOptions"}}},"required":true},"responses":{"204":{"description":"Replace repo topics"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/topics/{topic}":{"put":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Add a topic"}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["repo"],"operationId":"handler","responses":{"204":{"description":"Remove a topic"}},"security":[{"bearer_auth":[]}]}},"/api/v1/repos/{space_name}/{repo_id}/transfer":{"post":{"tags":["repo"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_TransferRepoOption"}}},"required":true},"responses":{"200":{"description":"Transfer a repository","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/repositories/{id}":{"get":{"tags":["repo"],"operationId":"handler","responses":{"200":{"description":"Get a repository by id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RepoSummary"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List spaces owned by the caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpacePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateSpaceCmd"}}},"required":true},"responses":{"200":{"description":"Create a new space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/invites/accept":{"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AcceptInviteCmd"}}},"required":true},"responses":{"200":{"description":"Accept an invite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceView"}}}}}},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Delete a space"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateSpaceCmd"}}},"required":true},"responses":{"200":{"description":"Update a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/bans":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List bans in a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateBanCmd"}}},"required":true},"responses":{"200":{"description":"Ban a user from a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/bans/{uid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a ban","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Unban a user from a space"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateBanCmd"}}},"required":true},"responses":{"200":{"description":"Update a ban","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceBanView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List channels in a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ChannelPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a channel","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ChannelView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/roles":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"List role overwrites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_RoleOverwriteView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SetRoleOverwriteCmd"}}},"required":true},"responses":{"200":{"description":"Set a role overwrite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleOverwriteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/roles/{rid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Remove a role overwrite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/users":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"List user overwrites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_UserOverwriteView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SetUserOverwriteCmd"}}},"required":true},"responses":{"200":{"description":"Set a user overwrite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserOverwriteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/channels/{cid}/overwrites/users/{uid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Remove a user overwrite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/invites":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List invites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceInvitePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateInviteCmd"}}},"required":true},"responses":{"200":{"description":"Create an invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceInviteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/invites/{iid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Revoke an invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceInviteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List members of a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddMemberCmd"}}},"required":true},"responses":{"200":{"description":"Add a member to a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members/{uid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a space member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Remove a member from a space"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateMemberCmd"}}},"required":true},"responses":{"200":{"description":"Update a space member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SpaceMemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members/{uid}/roles":{"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AssignRoleCmd"}}},"required":true},"responses":{"200":{"description":"Assign a role to a member"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/members/{uid}/roles/{rid}":{"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Unassign a role from a member"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/roles":{"get":{"tags":["space"],"operationId":"handler","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"offset","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"List roles in a space","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RolePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateRoleCmd"}}},"required":true},"responses":{"200":{"description":"Create a role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{sid}/roles/{rid}":{"get":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Get a role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleView"}}}}}},"delete":{"tags":["space"],"operationId":"handler","responses":{"200":{"description":"Delete a role"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["space"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateRoleCmd"}}},"required":true},"responses":{"200":{"description":"Update a role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RoleView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List projects","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateProjectCmd"}}},"required":true},"responses":{"201":{"description":"Create a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Delete a project"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateProjectCmd"}}},"required":true},"responses":{"200":{"description":"Update a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProjectView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/activities":{"get":{"tags":["project"],"operationId":"handler","parameters":[{"name":"verb","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"per_page","in":"path","required":true,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"List activities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ActivityPage"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/documents":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List documents","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateDocumentCmd"}}},"required":true},"responses":{"201":{"description":"Create a document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/documents/{doc_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Delete a document"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateDocumentCmd"}}},"required":true},"responses":{"200":{"description":"Update a document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DocumentView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/favorites":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List favorites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_FavoritePage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddFavoriteCmd"}}},"required":true},"responses":{"201":{"description":"Add a favorite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_FavoriteView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/favorites/{favorite_id}":{"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Remove a favorite"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/links":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List links","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LinkPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddLinkCmd"}}},"required":true},"responses":{"201":{"description":"Add a link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_LinkView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/links/{link_id}":{"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Remove a link"}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/members":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddMemberCmd"}}},"required":true},"responses":{"201":{"description":"Add a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/members/{user_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Remove a member"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateMemberCmd"}}},"required":true},"responses":{"200":{"description":"Update a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemberView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/views":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"List views","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewPage"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateViewCmd"}}},"required":true},"responses":{"201":{"description":"Create a view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/spaces/{space_id}/projects/{project_id}/views/{view_id}":{"get":{"tags":["project"],"operationId":"handler","responses":{"200":{"description":"Get a view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["project"],"operationId":"handler","responses":{"204":{"description":"Delete a view"}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["project"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateViewCmd"}}},"required":true},"responses":{"200":{"description":"Update a view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ViewView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/topics/search":{"get":{"tags":["repo"],"operationId":"handler","parameters":[{"name":"q","in":"path","required":true,"schema":{"type":["string","null"]}},{"name":"page","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"limit","in":"path","required":true,"schema":{"type":["integer","null"],"format":"int64","minimum":0}}],"responses":{"200":{"description":"Search topics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_TopicSearchResult"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/deletions":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List pending and scheduled deletion requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_DeletionRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/deletions/{id}/complete":{"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Deletion request id.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Deletion completed; sessions revoked."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/suspensions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"include_revoked","in":"query","description":"Include revoked suspensions (default false).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"All suspensions (admin view).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/suspensions/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Suspension id.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RevokeSuspensionCmd"}}},"required":true},"responses":{"204":{"description":"Suspension revoked."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/users/{uid}/profile":{"patch":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateProfileCmd"}}},"required":true},"responses":{"200":{"description":"Admin-updated profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/admin/users/{uid}/suspensions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"include_revoked","in":"query","description":"Include revoked suspensions (default false).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Suspensions for the given user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SuspendCmd"}}},"required":true},"responses":{"200":{"description":"Suspension created (also sets users.is_restricted = true).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Authenticated user profile (privileged view).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/access-keys":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List access keys for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_AccessKeyView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_CreateAccessKeyCmd"}}},"required":true},"responses":{"200":{"description":"Access key created (token returned only once).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_CreateAccessKeyResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/access-keys/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Access key identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Access key deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/avatar":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Current avatar metadata (200 with empty body if none).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Option_AvatarView"}}}}},"security":[{"bearer_auth":[]}]},"put":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UploadAvatarCmd"}}},"required":true},"responses":{"200":{"description":"Avatar uploaded and bound to caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AvatarView"}}}},"400":{"description":"Invalid content_type or base64 payload."}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","responses":{"204":{"description":"Avatar removed."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/blocks":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of blocked users.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_BlockedSummary"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/blocks/{uid}":{"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Block succeeded (idempotent; also unfollows both directions)."},"404":{"description":"Target user not found."}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Unblock succeeded."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/deletion":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RequestDeletionCmd"}}},"required":true},"responses":{"200":{"description":"Deletion request created or returned (idempotent).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeletionRequestView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","responses":{"204":{"description":"Active deletion request cancelled."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/deletion/confirm":{"post":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Deletion request scheduled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeletionRequestView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/devices":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List devices registered to the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_DeviceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/devices/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Device identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Device removed."}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Device identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateDeviceCmd"}}},"required":true},"responses":{"200":{"description":"Device updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_DeviceView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/email-change":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_RequestChangeBody"}}},"required":true},"responses":{"200":{"description":"Email change ticket created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_EmailChangeTicketView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/email-change/confirm":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_ConfirmEmailChangeCmd"}}},"required":true},"responses":{"200":{"description":"Ticket status advanced.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_EmailChangeTicketView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/email-change/{ticket_id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"ticket_id","in":"path","description":"Ticket identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Ticket cancelled."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/emails":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List active emails for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_EmailView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddEmailCmd"}}},"required":true},"responses":{"200":{"description":"Email added (unverified).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_AddEmailResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/emails/{email_id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"email_id","in":"path","description":"Email identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Email soft-deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/emails/{email_id}/primary":{"patch":{"tags":["user"],"operationId":"handler","parameters":[{"name":"email_id","in":"path","description":"Email identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Primary email changed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SetPrimaryEmailResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/memes":{"get":{"tags":["user"],"operationId":"list_handler","parameters":[{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"List the caller's favorite memes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_MemeView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"create_handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpsertMemeCmd"}}},"required":true},"responses":{"200":{"description":"Meme created or updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MemeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/memes/{id}":{"delete":{"tags":["user"],"operationId":"delete_handler","parameters":[{"name":"id","in":"path","description":"Meme identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Meme deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/saved":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Saved messages for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SavedMessageView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SaveMessageCmd"}}},"required":true},"responses":{"200":{"description":"Message saved (idempotent).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SavedMessageView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/saved/{message_id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"message_id","in":"path","description":"Message identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Message removed from saved list."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/scheduled":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Scheduled messages for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_ScheduledMessageView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/messages/scheduled/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Scheduled message identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Scheduled message cancelled."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/notifications":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"unread_only","in":"query","description":"Only return unread notifications.","required":false,"schema":{"type":"boolean"}},{"name":"notification_type","in":"query","description":"Filter by notification type.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Notifications for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_NotificationView"}}}}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_MarkReadCmd"}}},"required":true},"responses":{"200":{"description":"Notifications marked as read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MarkReadResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/notifications/mark-all-read":{"post":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"All notifications marked as read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_MarkAllReadResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/notifications/unread-count":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Number of unread notifications for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UnreadCountResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/preferences":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"User preferences (auto-created if missing).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserPreferences"}}}}},"security":[{"bearer_auth":[]}]},"patch":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdatePreferencesCmd"}}},"required":true},"responses":{"200":{"description":"Updated preferences.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserPreferences"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/profile":{"patch":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpdateProfileCmd"}}},"required":true},"responses":{"200":{"description":"Updated self profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserMe"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/push-subscriptions":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List push subscriptions for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_PushSubscriptionView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_UpsertPushCmd"}}},"required":true},"responses":{"200":{"description":"Push subscription upserted (endpoint-keyed).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_PushSubscriptionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/push-subscriptions/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Push subscription id.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Push subscription deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/recent-mentions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Recent mentions for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_RecentMentionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/recovery-codes":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List recovery codes for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_RecoveryCodeView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/recovery-codes/regenerate":{"post":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Recovery codes regenerated (plaintext returned once).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RegenerateRecoveryResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/reports":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Reports submitted by the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_ReportView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/sessions":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"app_id","in":"query","description":"Filter by app id.","required":false,"schema":{"type":"string"}},{"name":"include_revoked","in":"query","description":"Include revoked sessions (default false).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"List active sessions for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SessionView"}}}}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"All sessions revoked for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_RevokeAllResp"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/sessions/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"Session identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Session revoked."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/ssh-keys":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"List SSH keys for the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SshKeyView"}}}}},"security":[{"bearer_auth":[]}]},"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_AddSshKeyCmd"}}},"required":true},"responses":{"200":{"description":"SSH key added.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_SshKeyView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/ssh-keys/{id}":{"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"id","in":"path","description":"SSH key identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"SSH key deleted."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/me/suspensions":{"get":{"tags":["user"],"operationId":"handler","responses":{"200":{"description":"Active suspensions affecting the caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_SuspensionView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/reports":{"post":{"tags":["user"],"operationId":"handler","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRequestData_SubmitReportCmd"}}},"required":true},"responses":{"200":{"description":"Report submitted (status = Open).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ReportView"}}}}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/users/{uid}":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"User identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Public view of the user (visibility-filtered).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_UserPublic"}}}},"404":{"description":"User not found."}}}},"/api/v1/user/users/{uid}/follow":{"post":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Follow succeeded (idempotent)."},"404":{"description":"Target user not found."}},"security":[{"bearer_auth":[]}]},"delete":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Unfollow succeeded."}},"security":[{"bearer_auth":[]}]}},"/api/v1/user/users/{uid}/followers":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of followers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_FollowerSummary"}}}}}}},"/api/v1/user/users/{uid}/following":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"Target user identifier.","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Maximum items (default 20).","required":false,"schema":{"type":"integer","minimum":0}},{"name":"cursor","in":"query","description":"Pagination cursor (id).","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Page of accounts the user follows.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_Vec_FollowerSummary"}}}}}}},"/api/v1/user/users/{uid}/profile-detail":{"get":{"tags":["user"],"operationId":"handler","parameters":[{"name":"uid","in":"path","description":"User identifier.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Extended profile record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponseData_ProfileView"}}}},"404":{"description":"Profile not found."}}}}},"components":{"schemas":{"AcceptAgreementCmd":{"type":"object","required":["user_id","agreement_key","agreement_version"],"properties":{"agreement_key":{"type":"string"},"agreement_version":{"type":"string"},"user_id":{"type":"string"}}},"AcceptAgreementResp":{"type":"object","required":["recorded"],"properties":{"recorded":{"type":"boolean"}}},"AcceptInviteCmd":{"type":"object","required":["accept_code"],"properties":{"accept_code":{"type":"string"}}},"AccessKeyScope":{"type":"string","enum":["read","write","repo","admin","all"]},"AccessKeyView":{"type":"object","required":["id","name","token_last_eight","scope","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"},"token_last_eight":{"type":"string"},"updated_at":{"type":"string"}}},"ActivityPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ActivityView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ActivityView":{"type":"object","required":["id","project_id","actor_id","verb","target_kind","created_at"],"properties":{"actor_id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"id":{"type":"string","format":"uuid"},"payload":{},"project_id":{"type":"string","format":"uuid"},"target_id":{"type":["string","null"],"format":"uuid"},"target_kind":{"type":"string"},"verb":{"type":"string"}}},"AddCollaboratorOption":{"type":"object","required":["permission"],"properties":{"permission":{"type":"string"}}},"AddEmailCmd":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}},"AddEmailResp":{"type":"object","required":["email_id"],"properties":{"email_id":{"type":"string","format":"uuid"}}},"AddFavoriteCmd":{"type":"object","properties":{"folder":{"type":["string","null"]}}},"AddLinkCmd":{"type":"object","required":["related_project_id","kind"],"properties":{"kind":{"$ref":"#/components/schemas/LinkKind"},"related_project_id":{"type":"string","format":"uuid"}}},"AddMemberCmd":{"type":"object","required":["user_id"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"},"user_id":{"type":"string","format":"uuid"}}},"AddSshKeyCmd":{"type":"object","required":["name","content"],"properties":{"content":{"type":"string"},"key_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SshKeyType"}]},"name":{"type":"string"}}},"AgreementDoc":{"type":"object","required":["key","version","updated_at","title","content_md"],"properties":{"content_md":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"string"}}},"AppRequestData_AcceptAgreementCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id","agreement_key","agreement_version"],"properties":{"agreement_key":{"type":"string"},"agreement_version":{"type":"string"},"user_id":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AcceptInviteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["accept_code"],"properties":{"accept_code":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AddCollaboratorOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["permission"],"properties":{"permission":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AddEmailCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_AddFavoriteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"folder":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_AddLinkCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["related_project_id","kind"],"properties":{"kind":{"$ref":"#/components/schemas/LinkKind"},"related_project_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_AddMemberCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_AddSshKeyCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","content"],"properties":{"content":{"type":"string"},"key_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SshKeyType"}]},"name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_ApplyDiffPatchFileOptions":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"sha":{"type":["string","null"]}}}]},"request_id":{"type":"string"}}},"AppRequestData_ArchiveRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["archived"],"properties":{"archived":{"type":"boolean"}}},"request_id":{"type":"string"}}},"AppRequestData_AssignRoleCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role_id"],"properties":{"role_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_AuthorizeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["provider","code_verifier"],"properties":{"app_id":{"type":["string","null"]},"code_verifier":{"type":"string"},"provider":{"$ref":"#/components/schemas/OAuthProvider"}}},"request_id":{"type":"string"}}},"AppRequestData_ChangeFilesOptions":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/ChangeFileEntry"}}}}]},"request_id":{"type":"string"}}},"AppRequestData_CloseIssueOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["closed"],"properties":{"closed":{"type":"boolean"}}},"request_id":{"type":"string"}}},"AppRequestData_ConfirmEmailChangeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["ticket_id"],"properties":{"ticket_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateAccessKeyCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","scope"],"properties":{"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateBanCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id"],"properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateBranchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_branch_name"],"properties":{"new_branch_name":{"type":"string"},"old_branch_name":{"type":["string","null"]},"old_ref_name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateBranchProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["branch_name"],"properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"rule_name":{"type":["string","null"]},"unprotected_file_patterns":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateCollectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["space_id","name"],"properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateCommentOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateDependencyOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["dependency_id"],"properties":{"dependency_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateDeployKeyOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","key"],"properties":{"key":{"type":"string"},"read_only":{"type":["boolean","null"]},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateDocumentCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","slug"],"properties":{"content":{"type":"string"},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateFileOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}}]},"request_id":{"type":"string"}}},"AppRequestData_CreateInviteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role_ids"],"properties":{"email":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"user_id":{"type":["string","null"],"format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateIssueOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","body"],"properties":{"body":{"type":"string"},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateLabelOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","color"],"properties":{"color":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateMemberOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id","kind"],"properties":{"kind":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateMilestoneOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreatePinOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["issue_id","pin_order"],"properties":{"issue_id":{"type":"string","format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateProjectCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["space_id","name"],"properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"},"target_date":{"type":["string","null"],"format":"date"}}},"request_id":{"type":"string"}}},"AppRequestData_CreatePullRequestCommentOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["body"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreatePullRequestOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["title","head","base"],"properties":{"base":{"type":"string"},"body":{"type":["string","null"]},"head":{"type":"string"},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateReactionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["emoji"],"properties":{"emoji":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateReleaseOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["tag_name","title"],"properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]},"title":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["space_id","name"],"properties":{"auto_init":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"gitignores":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"issue_labels":{"type":["string","null"]},"license_name":{"type":["string","null"]},"name":{"type":"string"},"object_format":{"type":["string","null"]},"parent_dir":{"type":["string","null"],"format":"uuid"},"readme":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateRepoRelOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["repo_id"],"properties":{"repo_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_CreateRoleCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","permissions"],"properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateSpaceCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"public":{"type":"boolean"},"welcome_message":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateStatusOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["state","context"],"properties":{"context":{"type":"string"},"description":{"type":["string","null"]},"state":{"type":"string"},"target_url":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateTagOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["tag_name"],"properties":{"message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_CreateTagProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name_pattern"],"properties":{"name_pattern":{"type":"string"},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_CreateViewCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"sort_by":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_DeleteFileOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["sha"],"properties":{"sha":{"type":"string"}}}]},"request_id":{"type":"string"}}},"AppRequestData_EditBranchProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"unprotected_file_patterns":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_EditReleaseOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_name":{"type":["string","null"]},"target":{"type":["string","null"]},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_EditTagProtectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"name_pattern":{"type":["string","null"]},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_ForgotPasswordCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"request_id":{"type":"string"}}},"AppRequestData_ForkRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["to_channel_id"],"properties":{"description":{"type":["string","null"]},"name":{"type":["string","null"]},"to_channel_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_GenerateRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["to_channel_id","name"],"properties":{"description":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"name":{"type":"string"},"to_channel_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_LoginCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["identifier","password","pow"],"properties":{"app_id":{"type":["string","null"]},"identifier":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"request_id":{"type":"string"}}},"AppRequestData_LogoutCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["refresh_token"],"properties":{"refresh_token":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_MarkReadCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["notification_ids"],"properties":{"notification_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_MergePullRequestOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["style"],"properties":{"commit_message":{"type":["string","null"]},"commit_title":{"type":["string","null"]},"delete_branch_after_merge":{"type":"boolean"},"style":{"$ref":"#/components/schemas/MergeStyle"}}},"request_id":{"type":"string"}}},"AppRequestData_MergeUpstreamRequest":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["branch"],"properties":{"branch":{"type":"string"},"ff_only":{"type":["boolean","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_ReclaimCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"request_id":{"type":"string"}}},"AppRequestData_RefreshCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["refresh_token"],"properties":{"app_id":{"type":["string","null"]},"refresh_token":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RegisterCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","password","pow"],"properties":{"accept_agreements":{"type":"array","items":{"type":"string"}},"email":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"username":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_RenameBranchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RenameRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RepoTopicOptions":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"request_id":{"type":"string"}}},"AppRequestData_RequestChangeBody":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_email"],"properties":{"new_email":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RequestDeletionCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_ResendCodeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","pow","purpose"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"purpose":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_ResetPasswordCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","token","new_password","temp_key_value"],"properties":{"email":{"type":"string"},"new_password":{"type":"string"},"temp_key_value":{"type":"string"},"token":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_RevokeSuspensionCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_SaveMessageCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["channel_id","message_id"],"properties":{"channel_id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SetRoleOverwriteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"role_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SetUserOverwriteCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SubmitPullRequestReviewOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["state"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"state":{"$ref":"#/components/schemas/ReviewState"}}},"request_id":{"type":"string"}}},"AppRequestData_SubmitReportCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["reported_uid","reason"],"properties":{"evidence":{"type":["string","null"]},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"}}},"request_id":{"type":"string"}}},"AppRequestData_SuspendCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["suspension_type"],"properties":{"ends_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"}}},"request_id":{"type":"string"}}},"AppRequestData_TransferRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_channel_id"],"properties":{"new_channel_id":{"type":"string","format":"uuid"},"new_name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateAvatarOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["image"],"properties":{"image":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateBanCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateBranchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["new_commit_id"],"properties":{"force":{"type":["boolean","null"]},"new_commit_id":{"type":"string"},"old_commit_id":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateBranchProtectionPriorities":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateCollectionOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateCommentOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateDeviceCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"device_name":{"type":["string","null"]},"is_trusted":{"type":["boolean","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateDocumentCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"content":{"type":["string","null"]},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":["string","null"]},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateFileOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"from_path":{"type":["string","null"]},"sha":{"type":["string","null"]}}}]},"request_id":{"type":"string"}}},"AppRequestData_UpdateIssueOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"body":{"type":["string","null"]},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateIssueUserOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"is_mentioned":{"type":["boolean","null"]},"is_read":{"type":["boolean","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateLabelOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"is_archived":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateMemberCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["role"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateMilestoneOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"is_closed":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdatePreferencesCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_dms_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"allow_mentions_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":["boolean","null"]},"email_flags":{"type":["integer","null"],"format":"int32"},"in_app_flags":{"type":["integer","null"],"format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":["integer","null"],"format":"int32"},"show_online_status":{"type":["boolean","null"]},"theme_mode":{"type":["string","null"]},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateProfileCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"avatar":{"type":["string","null"]},"display_name":{"type":["string","null"]},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"profile":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UpdateProfileFields"}]},"timezone":{"type":["string","null"]},"visibility":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateProjectCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectHealth"}]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":["string","null"]},"sort_order":{"type":["integer","null"],"format":"int32"},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectState"}]},"target_date":{"type":["string","null"],"format":"date"}}},"request_id":{"type":"string"}}},"AppRequestData_UpdatePullRequestOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"base":{"type":["string","null"]},"body":{"type":["string","null"]},"head":{"type":["string","null"]},"title":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateRepoOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_fast_forward_only_merge":{"type":["boolean","null"]},"allow_manual_merge":{"type":["boolean","null"]},"allow_merge_commits":{"type":["boolean","null"]},"allow_merge_update":{"type":["boolean","null"]},"allow_rebase":{"type":["boolean","null"]},"allow_rebase_explicit":{"type":["boolean","null"]},"allow_rebase_update":{"type":["boolean","null"]},"allow_squash_merge":{"type":["boolean","null"]},"archived":{"type":["boolean","null"]},"autodetect_manual_merge":{"type":["boolean","null"]},"default_allow_maintainer_edit":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"default_delete_branch_after_merge":{"type":["boolean","null"]},"default_merge_style":{"type":["string","null"]},"default_update_style":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"external_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalTracker"}]},"external_wiki":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalWiki"}]},"has_actions":{"type":["boolean","null"]},"has_code":{"type":["boolean","null"]},"has_issues":{"type":["boolean","null"]},"has_packages":{"type":["boolean","null"]},"has_projects":{"type":["boolean","null"]},"has_pull_requests":{"type":["boolean","null"]},"has_releases":{"type":["boolean","null"]},"has_wiki":{"type":["boolean","null"]},"ignore_whitespace_conflicts":{"type":["boolean","null"]},"internal_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InternalTracker"}]},"is_private":{"type":["boolean","null"]},"license_name":{"type":["string","null"]},"name":{"type":["string","null"]},"projects_mode":{"type":["string","null"]},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateRoleCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":["string","null"]},"permissions":{"type":["array","null"],"items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateSpaceCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"allow_invite":{"type":["boolean","null"]},"allow_join":{"type":["boolean","null"]},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":["boolean","null"]},"name":{"type":["string","null"]},"public":{"type":["boolean","null"]},"welcome_message":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpdateViewCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":["boolean","null"]},"layout":{"type":["string","null"]},"name":{"type":["string","null"]},"sort_by":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UploadAttachmentInput":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["filename","content_type","data"],"properties":{"content_type":{"type":"string"},"data":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"filename":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UploadAvatarCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["content_type","data_base64"],"properties":{"content_type":{"type":"string"},"data_base64":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_UpsertMemeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["name","content_type","url","size"],"properties":{"content_type":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"request_id":{"type":"string"}}},"AppRequestData_UpsertPushCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["endpoint","p256dh_key","auth_key","platform"],"properties":{"auth_key":{"type":"string"},"endpoint":{"type":"string"},"p256dh_key":{"type":"string"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppRequestData_UpsertWatchOption":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string"}}},"request_id":{"type":"string"}}},"AppRequestData_Vec_String":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"array","items":{"type":"string"}},"request_id":{"type":"string"}}},"AppRequestData_VerifyCodeCmd":{"type":"object","required":["request_id","at"],"properties":{"at":{"type":"string"},"data":{"type":"object","required":["email","purpose","code","temp_key_value"],"properties":{"code":{"type":"string"},"email":{"type":"string"},"purpose":{"type":"string"},"temp_key_value":{"type":"string"},"user_id":{"type":["string","null"]}}},"request_id":{"type":"string"}}},"AppResponseData_AcceptAgreementResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["recorded"],"properties":{"recorded":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ActivityPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ActivityView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AddEmailResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["email_id"],"properties":{"email_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AttachmentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","owner_type","owner_id","filename","content_type","size","url","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"filename":{"type":"string"},"id":{"type":"string","format":"uuid"},"owner_id":{"type":"string","format":"uuid"},"owner_type":{"type":"string"},"size":{"type":"integer","format":"int64"},"uploaded_by":{"type":["string","null"],"format":"uuid"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AuthorizationUrlResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["url","temp_key"],"properties":{"temp_key":{"$ref":"#/components/schemas/TempKey"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_AvatarView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","url","format","bytes","updated_at"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"format":{"$ref":"#/components/schemas/AvatarFormat"},"uid":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BlobView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","size","encoding","content"],"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchProtectionPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchProtectionView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchProtectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","branch_name","rule_name","priority","enable_push","enable_push_whitelist","push_whitelist_usernames","push_whitelist_teams","push_whitelist_deploy_keys","enable_force_push","enable_force_push_allowlist","force_push_allowlist_usernames","force_push_allowlist_teams","force_push_allowlist_deploy_keys","enable_merge_whitelist","merge_whitelist_usernames","merge_whitelist_teams","enable_bypass_allowlist","bypass_allowlist_usernames","bypass_allowlist_teams","enable_approvals_whitelist","approvals_whitelist_usernames","approvals_whitelist_teams","required_approvals","block_on_rejected_reviews","block_on_change_requested_reviews","block_on_outdated_branch","dismiss_stale_approvals","ignore_stale_approvals","require_signed_commits","block_admin_merge_override","protected_file_patterns","unprotected_file_patterns","created_at","updated_at"],"properties":{"approvals_whitelist_teams":{"type":"array","items":{"type":"string"}},"approvals_whitelist_usernames":{"type":"array","items":{"type":"string"}},"block_admin_merge_override":{"type":"boolean"},"block_on_change_requested_reviews":{"type":"boolean"},"block_on_outdated_branch":{"type":"boolean"},"block_on_rejected_reviews":{"type":"boolean"},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":"array","items":{"type":"string"}},"bypass_allowlist_usernames":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string"},"dismiss_stale_approvals":{"type":"boolean"},"enable_approvals_whitelist":{"type":"boolean"},"enable_bypass_allowlist":{"type":"boolean"},"enable_force_push":{"type":"boolean"},"enable_force_push_allowlist":{"type":"boolean"},"enable_merge_whitelist":{"type":"boolean"},"enable_push":{"type":"boolean"},"enable_push_whitelist":{"type":"boolean"},"force_push_allowlist_deploy_keys":{"type":"boolean"},"force_push_allowlist_teams":{"type":"array","items":{"type":"string"}},"force_push_allowlist_usernames":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"},"ignore_stale_approvals":{"type":"boolean"},"merge_whitelist_teams":{"type":"array","items":{"type":"string"}},"merge_whitelist_usernames":{"type":"array","items":{"type":"string"}},"priority":{"type":"integer","format":"int64"},"protected_file_patterns":{"type":"string"},"push_whitelist_deploy_keys":{"type":"boolean"},"push_whitelist_teams":{"type":"array","items":{"type":"string"}},"push_whitelist_usernames":{"type":"array","items":{"type":"string"}},"repo_id":{"type":"string","format":"uuid"},"require_signed_commits":{"type":"boolean"},"required_approvals":{"type":"integer","format":"int32"},"rule_name":{"type":"string"},"unprotected_file_patterns":{"type":"string"},"updated_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_BranchView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","name","commit_sha","is_protected","protected","required_approvals","enable_status_check","status_check_contexts","user_can_push","user_can_merge","effective_branch_protection_name","is_deleted","created_at","updated_at"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitMeta"}]},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"deleted_at":{"type":["string","null"]},"effective_branch_protection_name":{"type":"string"},"enable_status_check":{"type":"boolean"},"id":{"type":"string","format":"uuid"},"is_deleted":{"type":"boolean"},"is_protected":{"type":"boolean"},"name":{"type":"string"},"protected":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"required_approvals":{"type":"integer","format":"int64"},"status_check_contexts":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"user_can_merge":{"type":"boolean"},"user_can_push":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ChannelPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ChannelView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ChannelView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","kind","position","is_archived","created_at","updated_at","created_by"],"properties":{"archived_at":{"type":["string","null"]},"archived_by":{"type":["string","null"],"format":"uuid"},"color":{"type":["string","null"]},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"},"position":{"type":"integer","format":"int32"},"purpose":{"type":["string","null"]},"space_id":{"type":["string","null"],"format":"uuid"},"topic":{"type":["string","null"]},"updated_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CollaboratorPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CollaboratorView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CollectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","name","nums_open_issue","nums_closed_issue","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"nums_closed_issue":{"type":"integer","format":"int64"},"nums_open_issue":{"type":"integer","format":"int64"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CombinedStatusView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","state","statuses","total_count"],"properties":{"sha":{"type":"string"},"state":{"type":"string"},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total_count":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","poster_id","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"poster_id":{"type":"string","format":"uuid"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitStatusPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitStatusView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","sha","state","context","url","creator","created_at"],"properties":{"context":{"type":"string"},"created_at":{"type":"string"},"creator":{"$ref":"#/components/schemas/CommitUserSummary"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"state":{"type":"string"},"target_url":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","message","parent_shas","tree_sha"],"properties":{"author_email":{"type":["string","null"]},"author_name":{"type":["string","null"]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer_email":{"type":["string","null"]},"committer_name":{"type":["string","null"]},"message":{"type":"string"},"parent_shas":{"type":"array","items":{"type":"string"}},"sha":{"type":"string"},"tree_sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CommitsResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommitSummary"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CompareView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["base","head","total_commits","ahead_by","behind_by","files"],"properties":{"ahead_by":{"type":"integer","format":"int64"},"base":{"type":"string"},"behind_by":{"type":"integer","format":"int64"},"files":{"type":"array","items":{"$ref":"#/components/schemas/CompareFileDiff"}},"head":{"type":"string"},"merge_base":{"type":["string","null"]},"total_commits":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ContentsListResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ContentsResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["name","path","sha","type","size"],"properties":{"content":{"type":["string","null"]},"download_url":{"type":["string","null"]},"encoding":{"type":["string","null"]},"git_url":{"type":["string","null"]},"html_url":{"type":["string","null"]},"last_author_date":{"type":["string","null"]},"last_commit_message":{"type":["string","null"]},"last_commit_sha":{"type":["string","null"]},"last_committer_date":{"type":["string","null"]},"lfs_oid":{"type":["string","null"]},"lfs_size":{"type":["integer","null"],"format":"int64"},"links":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FileLinksResponse"}]},"name":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"},"submodule_git_url":{"type":["string","null"]},"target":{"type":["string","null"]},"type":{"type":"string"},"url":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_CreateAccessKeyResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["key","token"],"properties":{"key":{"$ref":"#/components/schemas/AccessKeyView"},"token":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeletionRequestView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","status","created_at","updated_at"],"properties":{"cancelled_at":{"type":["string","null"]},"completed_at":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"scheduled_for":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/DeletionStatus"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DependencyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","dependency_id","created_at"],"properties":{"created_at":{"type":"string"},"dependency_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeployKeyPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeployKeyView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeployKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","key_id","repo_id","title","key_type","fingerprint","content","url","read_only","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_id":{"type":"integer","format":"int64"},"key_type":{"type":"string"},"last_used_at":{"type":["string","null"]},"read_only":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"title":{"type":"string"},"url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DeviceView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","is_trusted","first_seen_at","last_seen_at","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"device_name":{"type":["string","null"]},"device_type":{"type":["string","null"]},"first_seen_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_trusted":{"type":"boolean"},"last_seen_at":{"type":"string"},"os":{"type":["string","null"]},"updated_at":{"type":"string"},"user_agent":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DocumentPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DocumentView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_DocumentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","creator_id","title","slug","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"last_editor_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"project_id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_EmailChangeTicketView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","new_email","status","expires_at","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"new_email":{"type":"string"},"status":{"$ref":"#/components/schemas/EmailChangeTicketStatus"},"used_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_FavoritePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FavoriteView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_FavoriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","user_id","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"folder":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_FileDeleteResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitSummary"}]},"content":{}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_FilesResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["files"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitSummary"}]},"files":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ForgotPasswordResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ForksResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ForkView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_IssueConfig":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["blank_issues_enabled"],"properties":{"blank_issues_enabled":{"type":"boolean"},"contact_links":{}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_IssueConfigValidation":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["valid"],"properties":{"message":{"type":["string","null"]},"valid":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_IssueUserView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","issue_id","is_read","is_mentioned","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_mentioned":{"type":"boolean"},"is_read":{"type":"boolean"},"issue_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_IssueView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","collection_id","autoincrement_id","author_id","title","body","state","created_at"],"properties":{"author_id":{"type":"string","format":"uuid"},"autoincrement_id":{"type":"integer","format":"int32"},"body":{"type":"string"},"closed_at":{"type":["string","null"]},"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"milestone_id":{"type":["string","null"],"format":"uuid"},"state":{"$ref":"#/components/schemas/IssueState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LabelView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","name","exclusive","exclusive_order","color","is_archived","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"color":{"type":"string"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":"boolean"},"exclusive_order":{"type":"integer","format":"int32"},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"name":{"type":"string"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LanguagesResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["languages"],"properties":{"languages":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"propertyNames":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LicensesResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["licenses"],"properties":{"licenses":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LinkPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LinkView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LinkView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","related_project_id","kind","created_by","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"kind":{"$ref":"#/components/schemas/LinkKind"},"project_id":{"type":"string","format":"uuid"},"related_project_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LoginResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_LogoutResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MarkAllReadResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MarkReadResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MemberPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MemberView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MemberView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","user_id","kind","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"kind":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MemeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","content_type","url","size","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MergeUpstreamResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["merge_type"],"properties":{"merge_type":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MergeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","merged"],"properties":{"merged":{"type":"boolean"},"message":{"type":["string","null"]},"sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_MilestoneView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","collection_id","name","is_closed","num_issues","num_closed_issues","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_closed":{"type":"boolean"},"name":{"type":"string"},"num_closed_issues":{"type":"integer","format":"int32"},"num_issues":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_NewPinAllowedResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["allowed"],"properties":{"allowed":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_NoteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","message"],"properties":{"message":{"type":"string"},"sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_OAuthLoginResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user_id","auto_registered"],"properties":{"access_token":{"type":"string"},"auto_registered":{"type":"boolean"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user_id":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Option_AvatarView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"oneOf":[{"type":"null"},{"type":"object","required":["uid","url","format","bytes","updated_at"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"format":{"$ref":"#/components/schemas/AvatarFormat"},"uid":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"url":{"type":"string"}}}]},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PinView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","collection_id","pin_order","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PowChallengeResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["challenge","ttl_seconds"],"properties":{"challenge":{"type":"string"},"ttl_seconds":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ProfileView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["user_id","show_email","show_location","show_real_name","show_activity","updated_at"],"properties":{"accent_color":{"type":["string","null"]},"banner_color":{"type":["integer","null"],"format":"int32"},"banner_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"company":{"type":["string","null"]},"date_of_birth":{"type":["string","null"],"format":"date"},"location":{"type":["string","null"]},"pronouns":{"type":["string","null"]},"pronouns_privacy":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]},"real_name":{"type":["string","null"]},"show_activity":{"type":"boolean"},"show_email":{"type":"boolean"},"show_location":{"type":"boolean"},"show_real_name":{"type":"boolean"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"},"website":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ProjectPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ProjectView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","creator_id","name","state","health","sort_order","starred","created_at"],"properties":{"cancelled_at":{"type":["string","null"],"format":"date-time"},"color":{"type":["string","null"]},"completed_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"health":{"$ref":"#/components/schemas/ProjectHealth"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"space_id":{"type":"string","format":"uuid"},"starred":{"type":"integer","format":"int32"},"started_at":{"type":["string","null"],"format":"date-time"},"state":{"$ref":"#/components/schemas/ProjectState"},"target_date":{"type":["string","null"],"format":"date"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestCommentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","pull_request_id","user_id","body","created_at"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]},"pull_request_id":{"type":"string","format":"uuid"},"review_id":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PullRequestView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestReviewView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","pull_request_id","user_id","official","state","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"official":{"type":"boolean"},"pull_request_id":{"type":"string","format":"uuid"},"state":{"$ref":"#/components/schemas/ReviewState"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PullRequestView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","number","title","head_branch","base_branch","author_id","state","is_locked","has_merged","created_at","comments_count","reviews_count"],"properties":{"author_id":{"type":"string","format":"uuid"},"base_branch":{"type":"string"},"base_sha":{"type":["string","null"]},"body":{"type":["string","null"]},"closed_at":{"type":["string","null"]},"comments_count":{"type":"integer","format":"int64"},"created_at":{"type":"string"},"has_merged":{"type":"boolean"},"head_branch":{"type":"string"},"head_sha":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_locked":{"type":"boolean"},"mergeable":{"type":["boolean","null"]},"mergeable_state":{"type":["string","null"]},"merged_at":{"type":["string","null"]},"merged_commit_sha":{"type":["string","null"]},"merger_id":{"type":["string","null"]},"number":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"reviews_count":{"type":"integer","format":"int64"},"state":{"$ref":"#/components/schemas/PrState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_PushSubscriptionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","platform","endpoint","created_at"],"properties":{"created_at":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"string","format":"uuid"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReactionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","scope","target_id","user_id","emoji","created_at"],"properties":{"created_at":{"type":"string"},"emoji":{"type":"string"},"id":{"type":"string","format":"uuid"},"scope":{"$ref":"#/components/schemas/ReactionScope"},"target_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReclaimResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RefreshResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["access_token","refresh_token","token_type","expires_in"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RegenerateRecoveryResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["codes"],"properties":{"codes":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RegisterResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","pending","temp_key","purpose"],"properties":{"pending":{"type":"boolean"},"purpose":{"type":"string"},"temp_key":{"$ref":"#/components/schemas/TempKey"},"uid":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReleaseAttachmentListResponse":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAttachmentView"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReleaseAttachmentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","size","download_url","created_at"],"properties":{"created_at":{"type":"string"},"download_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReleasePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReleaseView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","tag_name","target","title","sha","num_commits","is_draft","is_prerelease","is_tag","url","html_url","tarball_url","zipball_url","upload_url","publisher","attachments","created_at","updated_at"],"properties":{"attachments":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAttachment"}},"content":{"type":["string","null"]},"created_at":{"type":"string"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_draft":{"type":"boolean"},"is_prerelease":{"type":"boolean"},"is_tag":{"type":"boolean"},"num_commits":{"type":"integer","format":"int32"},"publisher":{"$ref":"#/components/schemas/UserSummary"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"tag_name":{"type":"string"},"tarball_url":{"type":"string"},"target":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"upload_url":{"type":"string"},"url":{"type":"string"},"zipball_url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoCollaboratorPermission":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["permission","role","user"],"properties":{"permission":{"type":"string"},"role":{"type":"string"},"user":{"$ref":"#/components/schemas/UserSummary"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RepoView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoRelView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","repo_id","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoSummary":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","full_name","empty","private","fork","template","mirror","size","stars_count","forks_count","watchers_count","open_issues_count"],"properties":{"description":{"type":["string","null"]},"empty":{"type":"boolean"},"fork":{"type":"boolean"},"forks_count":{"type":"integer","format":"int32"},"full_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"mirror":{"type":"boolean"},"name":{"type":"string"},"open_issues_count":{"type":"integer","format":"int32"},"private":{"type":"boolean"},"size":{"type":"integer","format":"int64"},"stars_count":{"type":"integer","format":"int32"},"template":{"type":"boolean"},"watchers_count":{"type":"integer","format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RepoView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","space_id","name","lower_name","full_name","default_branch","enable_lfs","is_private","is_archived","is_fork","is_template","is_mirror","empty","size","git_size","lfs_size","nums_watch","nums_star","nums_pr","nums_commits","nums_branches","nums_tags","allow_rebase","allow_rebase_explicit","allow_squash_merge","allow_merge_commits","allow_fast_forward_only_merge","allow_rebase_update","allow_merge_update","allow_manual_merge","autodetect_manual_merge","default_delete_branch_after_merge","default_allow_maintainer_edit","ignore_whitespace_conflicts","object_format","has_code","has_issues","has_wiki","has_pull_requests","has_projects","has_releases","has_packages","has_actions","projects_mode","languages","licenses","topics","html_url","url","link","ssh_url","clone_url","created_at","updated_at"],"properties":{"allow_fast_forward_only_merge":{"type":"boolean"},"allow_manual_merge":{"type":"boolean"},"allow_merge_commits":{"type":"boolean"},"allow_merge_update":{"type":"boolean"},"allow_rebase":{"type":"boolean"},"allow_rebase_explicit":{"type":"boolean"},"allow_rebase_update":{"type":"boolean"},"allow_squash_merge":{"type":"boolean"},"archived_at":{"type":["string","null"]},"autodetect_manual_merge":{"type":"boolean"},"avatar_url":{"type":["string","null"]},"channel":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChannelSummary"}]},"channel_id":{"type":"string","format":"uuid"},"clone_url":{"type":"string"},"created_at":{"type":"string"},"default_allow_maintainer_edit":{"type":"boolean"},"default_branch":{"type":"string"},"default_delete_branch_after_merge":{"type":"boolean"},"description":{"type":["string","null"]},"empty":{"type":"boolean"},"enable_lfs":{"type":"boolean"},"full_name":{"type":"string"},"git_size":{"type":"integer","format":"int64"},"has_actions":{"type":"boolean"},"has_code":{"type":"boolean"},"has_issues":{"type":"boolean"},"has_packages":{"type":"boolean"},"has_projects":{"type":"boolean"},"has_pull_requests":{"type":"boolean"},"has_releases":{"type":"boolean"},"has_wiki":{"type":"boolean"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"ignore_whitespace_conflicts":{"type":"boolean"},"is_archived":{"type":"boolean"},"is_fork":{"type":"boolean"},"is_mirror":{"type":"boolean"},"is_private":{"type":"boolean"},"is_template":{"type":"boolean"},"languages":{"type":"array","items":{"type":"string"}},"last_pushed_at":{"type":["string","null"]},"lfs_size":{"type":"integer","format":"int64"},"license_name":{"type":["string","null"]},"licenses":{"type":"array","items":{"type":"string"}},"link":{"type":"string"},"lower_name":{"type":"string"},"name":{"type":"string"},"nums_branches":{"type":"integer","format":"int32"},"nums_commits":{"type":"integer","format":"int32"},"nums_pr":{"type":"integer","format":"int32"},"nums_star":{"type":"integer","format":"int32"},"nums_tags":{"type":"integer","format":"int32"},"nums_watch":{"type":"integer","format":"int32"},"object_format":{"type":"string"},"parent":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RepoView"}]},"primary_language":{"type":["string","null"]},"projects_mode":{"type":"string"},"size":{"type":"integer","format":"int64"},"space":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceSummary"}]},"space_id":{"type":"string","format":"uuid"},"ssh_url":{"type":"string"},"storage_limit_size":{"type":["integer","null"],"format":"int64"},"topics":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"url":{"type":"string"},"website":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ReportView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","reported_uid","reason","status","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"evidence":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"},"reporter_uid":{"type":["string","null"],"format":"uuid"},"resolution_note":{"type":["string","null"]},"resolver_uid":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/ReportStatus"},"updated_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ResendCodeResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ResetPasswordResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RevokeAllResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RoleOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","channel_id","role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"id":{"type":"string","format":"uuid"},"role_id":{"type":"string","format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RolePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RoleView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_RoleView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","name","position","color","version","created_at","created_by","permissions"],"properties":{"color":{"type":"string"},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon_hash":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":"integer","format":"int64"},"space_id":{"type":"string","format":"uuid"},"unicode_emoji":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"version":{"type":"integer","format":"int32"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SavedMessageView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","channel_id","message_id","saved_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"saved_at":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SearchResults":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["data","ok"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RepoSummary"}},"ok":{"type":"boolean"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SetPrimaryEmailResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["email"],"properties":{"email":{"$ref":"#/components/schemas/EmailView"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceBanPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceBanView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceBanView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["space_id","user_id","banned_by","created_at","updated_at","allow_agent_join","allow_speak","allow_push_repo","allow_comment_any"],"properties":{"allow_agent_join":{"type":"boolean"},"allow_comment_any":{"type":"boolean"},"allow_push_repo":{"type":"boolean"},"allow_speak":{"type":"boolean"},"banned_by":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceInvitePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceInviteView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceInviteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","space_id","user_id","email","role_ids","created_at"],"properties":{"accepted_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"revoked_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"space_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceMemberPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceMemberView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceMemberView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["space_id","user_id","status","joined_at","created_at","message_notifications","muted","mobile_push","suppress_everyone","suppress_roles","hide_muted_channels"],"properties":{"alias_avatar_url":{"type":["string","null"]},"alias_name":{"type":["string","null"]},"created_at":{"type":"string"},"hide_muted_channels":{"type":"boolean"},"invited_at":{"type":["string","null"]},"invited_by":{"type":["string","null"],"format":"uuid"},"joined_at":{"type":"string"},"last_active_at":{"type":["string","null"]},"left_at":{"type":["string","null"]},"message_notifications":{"$ref":"#/components/schemas/MessageNotifications"},"mobile_push":{"type":"boolean"},"mute_until":{"type":["string","null"]},"muted":{"type":"boolean"},"space_id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/SpaceMemberStatus"},"suppress_everyone":{"type":"boolean"},"suppress_roles":{"type":"boolean"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpacePage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SpaceView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","owner_id","public","is_active","allow_join","allow_invite","member_count","allow_join_level","member_must_enable_2fa","created_at","updated_at"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"$ref":"#/components/schemas/SpaceAllowJoinLevel"},"avatar_url":{"type":["string","null"]},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_active":{"type":"boolean"},"member_count":{"type":"integer","format":"int64"},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"public":{"type":"boolean"},"updated_at":{"type":"string"},"welcome_message":{"type":["string","null"]}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SshKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","name","key_type","fingerprint","created_at"],"properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_type":{"$ref":"#/components/schemas/SshKeyType"},"last_used_at":{"type":["string","null"]},"name":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_StopwatchView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","issue_id","user_id","started_at","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"started_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SubscriberPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriberView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Subscription":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["user_id","repo_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"mode":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SuspensionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","suspension_type","starts_at","created_at"],"properties":{"created_at":{"type":"string"},"ends_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"revoked_at":{"type":["string","null"]},"revoked_by":{"type":["string","null"],"format":"uuid"},"starts_at":{"type":"string"},"suspended_by":{"type":["string","null"],"format":"uuid"},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SyncResult":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["repo_id","branches_added","tags_added","commits_added","size_bytes"],"properties":{"branches_added":{"type":"integer","format":"int64"},"commits_added":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"size_bytes":{"type":"integer","format":"int64"},"tags_added":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_SyncStatus":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["repo_id","branches_total","tags_total","commits_total","size","synced_at"],"properties":{"branches_total":{"type":"integer","format":"int64"},"commits_total":{"type":"integer","format":"int64"},"last_pushed_at":{"type":["string","null"]},"primary_language":{"type":["string","null"]},"repo_id":{"type":"string","format":"uuid"},"size":{"type":"integer","format":"int64"},"synced_at":{"type":"string"},"tags_total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagProtectionPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagProtectionView"}},"total":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagProtectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","name_pattern","whitelist_usernames","whitelist_teams","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name_pattern":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"whitelist_teams":{"type":"array","items":{"type":"string"}},"whitelist_usernames":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TagView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","repo_id","name","tag_type","commit_sha","commit","message","zipball_url","tarball_url","created_at"],"properties":{"commit":{"$ref":"#/components/schemas/CommitMeta"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message":{"type":"string"},"name":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"tag_type":{"type":"string"},"tarball_url":{"type":"string"},"zipball_url":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TopicList":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TopicSearchResult":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"$ref":"#/components/schemas/TopicView"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_TreeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["sha","entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/TreeEntryView"}},"sha":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UnreadCountResp":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserMe":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","username","display_name","avatar","is_active","is_admin","is_restricted"],"properties":{"avatar":{"type":"string"},"display_name":{"type":"string"},"is_active":{"type":"boolean"},"is_admin":{"type":"boolean"},"is_restricted":{"type":"boolean"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"uid":{"type":"string"},"username":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["channel_id","user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserPreferences":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["user_id","theme_mode","in_app_flags","email_flags","push_flags","email_digest","allow_dms_from","allow_mentions_from","show_online_status","created_at","updated_at"],"properties":{"allow_dms_from":{"$ref":"#/components/schemas/Audience"},"allow_mentions_from":{"$ref":"#/components/schemas/Audience"},"created_at":{"type":"string"},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":"boolean"},"email_flags":{"type":"integer","format":"int32"},"in_app_flags":{"type":"integer","format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":"integer","format":"int32"},"show_online_status":{"type":"boolean"},"theme_mode":{"type":"string"},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_UserPublic":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["uid","username","display_name","avatar","visibility","bot","system","created_at"],"properties":{"avatar":{"type":"string"},"bot":{"type":"boolean"},"created_at":{"type":"string"},"display_name":{"type":"string"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"system":{"type":"boolean"},"timezone":{"type":["string","null"]},"uid":{"type":"string","format":"uuid"},"username":{"type":"string"},"visibility":{"$ref":"#/components/schemas/ProfileVisibility"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_AccessKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","name","token_last_eight","scope","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"},"token_last_eight":{"type":"string"},"updated_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_AgreementDoc":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["key","version","updated_at","title","content_md"],"properties":{"content_md":{"type":"string"},"key":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_BlockedSummary":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_CollectionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","channel_id","name","nums_open_issue","nums_closed_issue","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"nums_closed_issue":{"type":"integer","format":"int64"},"nums_open_issue":{"type":"integer","format":"int64"},"updated_at":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_DeletionRequestView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","user_id","status","created_at","updated_at"],"properties":{"cancelled_at":{"type":["string","null"]},"completed_at":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"scheduled_for":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/DeletionStatus"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_DeviceView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","is_trusted","first_seen_at","last_seen_at","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"device_name":{"type":["string","null"]},"device_type":{"type":["string","null"]},"first_seen_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_trusted":{"type":"boolean"},"last_seen_at":{"type":"string"},"os":{"type":["string","null"]},"updated_at":{"type":"string"},"user_agent":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_EmailView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","email","is_activated","is_primary","created_at","updated_at"],"properties":{"activated_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_activated":{"type":"boolean"},"is_primary":{"type":"boolean"},"updated_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_FollowerSummary":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_GitRef":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["name","sha","type_"],"properties":{"name":{"type":"string"},"sha":{"type":"string"},"type_":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_IssueTemplate":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["name","title","content","fields"],"properties":{"content":{"type":"string"},"description":{"type":["string","null"]},"fields":{"type":"array","items":{"$ref":"#/components/schemas/IssueTemplateField"}},"name":{"type":"string"},"title":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_MemeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","name","content_type","url","size","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_NotificationView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","notification_type","title","created_at"],"properties":{"actor_uid":{"type":["string","null"],"format":"uuid"},"body":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"notification_type":{"$ref":"#/components/schemas/NotificationType"},"read_at":{"type":["string","null"]},"title":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_OAuthProviderInfo":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["name","display_name","authorize_url"],"properties":{"authorize_url":{"type":"string"},"display_name":{"type":"string"},"name":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PullRequestCommentView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","pull_request_id","user_id","body","created_at"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]},"pull_request_id":{"type":"string","format":"uuid"},"review_id":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PullRequestEventView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","pull_request_id","user_id","event_type","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"string","format":"uuid"},"pull_request_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PullRequestReviewView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","pull_request_id","user_id","official","state","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"official":{"type":"boolean"},"pull_request_id":{"type":"string","format":"uuid"},"state":{"$ref":"#/components/schemas/ReviewState"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_PushSubscriptionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","platform","endpoint","created_at"],"properties":{"created_at":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"string","format":"uuid"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_RecentMentionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","channel_id","message_id","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_RecoveryCodeView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"used_at":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_ReportView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","reported_uid","reason","status","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"evidence":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"},"reporter_uid":{"type":["string","null"],"format":"uuid"},"resolution_note":{"type":["string","null"]},"resolver_uid":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/ReportStatus"},"updated_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_RoleOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","space_id","channel_id","role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"id":{"type":"string","format":"uuid"},"role_id":{"type":"string","format":"uuid"},"space_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SavedMessageView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","channel_id","message_id","saved_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"saved_at":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_ScheduledMessageView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","target_channel_id","payload","scheduled_at","status","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"payload":{"type":"string"},"scheduled_at":{"type":"string"},"status":{"$ref":"#/components/schemas/ScheduledMessageStatus"},"target_channel_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SessionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","kind","is_revoked","created_at","expires_at"],"properties":{"app_id":{"type":["string","null"]},"client_ip_hash":{"type":["string","null"]},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_revoked":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/SessionKind"},"replaced_at":{"type":["string","null"]},"user_agent_hash":{"type":["string","null"]}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SshKeyView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","name","key_type","fingerprint","created_at"],"properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_type":{"$ref":"#/components/schemas/SshKeyType"},"last_used_at":{"type":["string","null"]},"name":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_SuspensionView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","user_id","suspension_type","starts_at","created_at"],"properties":{"created_at":{"type":"string"},"ends_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"revoked_at":{"type":["string","null"]},"revoked_by":{"type":["string","null"],"format":"uuid"},"starts_at":{"type":"string"},"suspended_by":{"type":["string","null"],"format":"uuid"},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_UserMini":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["id","login"],"properties":{"avatar_url":{"type":["string","null"]},"email":{"type":["string","null"]},"full_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_Vec_UserOverwriteView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"array","items":{"type":"object","required":["channel_id","user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_VerifyCodeResult":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["code_row_id"],"properties":{"code_row_id":{"type":"string"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ViewPage":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ViewView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_ViewView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","project_id","creator_id","name","filter","sort_by","layout","is_shared","sort_order","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"project_id":{"type":"string","format":"uuid"},"sort_by":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"AppResponseData_WatchView":{"type":"object","required":["code","message","duration","request_id","at","log_id"],"properties":{"at":{"type":"string"},"code":{"type":"integer","format":"int32"},"data":{"type":"object","required":["id","user_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"mode":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"duration":{"type":"string"},"error":{"type":["string","null"]},"log_id":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}},"ApplyDiffPatchFileOptions":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"sha":{"type":["string","null"]}}}]},"ArchiveFormatQuery":{"type":"object","properties":{"format":{"type":["string","null"]},"ref_name":{"type":["string","null"]}}},"ArchiveRepoOption":{"type":"object","required":["archived"],"properties":{"archived":{"type":"boolean"}}},"AssignRoleCmd":{"type":"object","required":["role_id"],"properties":{"role_id":{"type":"string","format":"uuid"}}},"AttachmentPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentView"}},"total":{"type":"integer","format":"int64"}}},"AttachmentView":{"type":"object","required":["id","owner_type","owner_id","filename","content_type","size","url","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"filename":{"type":"string"},"id":{"type":"string","format":"uuid"},"owner_id":{"type":"string","format":"uuid"},"owner_type":{"type":"string"},"size":{"type":"integer","format":"int64"},"uploaded_by":{"type":["string","null"],"format":"uuid"},"url":{"type":"string"}}},"Audience":{"type":"string","enum":["everyone","following_only","nobody"]},"AuthorizationUrlResp":{"type":"object","required":["url","temp_key"],"properties":{"temp_key":{"$ref":"#/components/schemas/TempKey"},"url":{"type":"string"}}},"AuthorizeCmd":{"type":"object","required":["provider","code_verifier"],"properties":{"app_id":{"type":["string","null"]},"code_verifier":{"type":"string"},"provider":{"$ref":"#/components/schemas/OAuthProvider"}}},"AvatarFormat":{"type":"string","enum":["jpg","png","webp","gif"]},"AvatarView":{"type":"object","required":["uid","url","format","bytes","updated_at"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"format":{"$ref":"#/components/schemas/AvatarFormat"},"uid":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"url":{"type":"string"}}},"BlobView":{"type":"object","required":["sha","size","encoding","content"],"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"BlockedSummary":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"BranchPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchView"}},"total":{"type":"integer","format":"int64"}}},"BranchProtectionPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BranchProtectionView"}},"total":{"type":"integer","format":"int64"}}},"BranchProtectionView":{"type":"object","required":["id","repo_id","branch_name","rule_name","priority","enable_push","enable_push_whitelist","push_whitelist_usernames","push_whitelist_teams","push_whitelist_deploy_keys","enable_force_push","enable_force_push_allowlist","force_push_allowlist_usernames","force_push_allowlist_teams","force_push_allowlist_deploy_keys","enable_merge_whitelist","merge_whitelist_usernames","merge_whitelist_teams","enable_bypass_allowlist","bypass_allowlist_usernames","bypass_allowlist_teams","enable_approvals_whitelist","approvals_whitelist_usernames","approvals_whitelist_teams","required_approvals","block_on_rejected_reviews","block_on_change_requested_reviews","block_on_outdated_branch","dismiss_stale_approvals","ignore_stale_approvals","require_signed_commits","block_admin_merge_override","protected_file_patterns","unprotected_file_patterns","created_at","updated_at"],"properties":{"approvals_whitelist_teams":{"type":"array","items":{"type":"string"}},"approvals_whitelist_usernames":{"type":"array","items":{"type":"string"}},"block_admin_merge_override":{"type":"boolean"},"block_on_change_requested_reviews":{"type":"boolean"},"block_on_outdated_branch":{"type":"boolean"},"block_on_rejected_reviews":{"type":"boolean"},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":"array","items":{"type":"string"}},"bypass_allowlist_usernames":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string"},"dismiss_stale_approvals":{"type":"boolean"},"enable_approvals_whitelist":{"type":"boolean"},"enable_bypass_allowlist":{"type":"boolean"},"enable_force_push":{"type":"boolean"},"enable_force_push_allowlist":{"type":"boolean"},"enable_merge_whitelist":{"type":"boolean"},"enable_push":{"type":"boolean"},"enable_push_whitelist":{"type":"boolean"},"force_push_allowlist_deploy_keys":{"type":"boolean"},"force_push_allowlist_teams":{"type":"array","items":{"type":"string"}},"force_push_allowlist_usernames":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"},"ignore_stale_approvals":{"type":"boolean"},"merge_whitelist_teams":{"type":"array","items":{"type":"string"}},"merge_whitelist_usernames":{"type":"array","items":{"type":"string"}},"priority":{"type":"integer","format":"int64"},"protected_file_patterns":{"type":"string"},"push_whitelist_deploy_keys":{"type":"boolean"},"push_whitelist_teams":{"type":"array","items":{"type":"string"}},"push_whitelist_usernames":{"type":"array","items":{"type":"string"}},"repo_id":{"type":"string","format":"uuid"},"require_signed_commits":{"type":"boolean"},"required_approvals":{"type":"integer","format":"int32"},"rule_name":{"type":"string"},"unprotected_file_patterns":{"type":"string"},"updated_at":{"type":"string"}}},"BranchView":{"type":"object","required":["id","repo_id","name","commit_sha","is_protected","protected","required_approvals","enable_status_check","status_check_contexts","user_can_push","user_can_merge","effective_branch_protection_name","is_deleted","created_at","updated_at"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitMeta"}]},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"deleted_at":{"type":["string","null"]},"effective_branch_protection_name":{"type":"string"},"enable_status_check":{"type":"boolean"},"id":{"type":"string","format":"uuid"},"is_deleted":{"type":"boolean"},"is_protected":{"type":"boolean"},"name":{"type":"string"},"protected":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"required_approvals":{"type":"integer","format":"int64"},"status_check_contexts":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"user_can_merge":{"type":"boolean"},"user_can_push":{"type":"boolean"}}},"CallbackCmd":{"type":"object","required":["provider","code","state","temp_key_value"],"properties":{"app_id":{"type":["string","null"]},"code":{"type":"string"},"provider":{"$ref":"#/components/schemas/OAuthProvider"},"state":{"type":"string"},"temp_key_value":{"type":"string"}}},"ChangeFileEntry":{"type":"object","required":["operation","path"],"properties":{"content":{"type":["string","null"]},"from_path":{"type":["string","null"]},"operation":{"type":"string"},"path":{"type":"string"},"sha":{"type":["string","null"]}}},"ChangeFilesOptions":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/ChangeFileEntry"}}}}]},"ChannelPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ChannelView"}},"total":{"type":"integer","format":"int64"}}},"ChannelSummary":{"type":"object","required":["id","space_id","name"],"properties":{"display_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"space_id":{"type":"string","format":"uuid"}}},"ChannelView":{"type":"object","required":["id","name","kind","position","is_archived","created_at","updated_at","created_by"],"properties":{"archived_at":{"type":["string","null"]},"archived_by":{"type":["string","null"],"format":"uuid"},"color":{"type":["string","null"]},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"kind":{"type":"string"},"name":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"},"position":{"type":"integer","format":"int32"},"purpose":{"type":["string","null"]},"space_id":{"type":["string","null"],"format":"uuid"},"topic":{"type":["string","null"]},"updated_at":{"type":"string"}}},"CloseIssueOption":{"type":"object","required":["closed"],"properties":{"closed":{"type":"boolean"}}},"CollaboratorPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CollaboratorView"}},"total":{"type":"integer","format":"int64"}}},"CollaboratorView":{"type":"object","required":["id","repo_id","user_id","mode","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"mode":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"CollectionPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CollectionView"}},"total":{"type":"integer","format":"int64"}}},"CollectionView":{"type":"object","required":["id","channel_id","name","nums_open_issue","nums_closed_issue","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"nums_closed_issue":{"type":"integer","format":"int64"},"nums_open_issue":{"type":"integer","format":"int64"},"updated_at":{"type":["string","null"]}}},"CombinedStatusView":{"type":"object","required":["sha","state","statuses","total_count"],"properties":{"sha":{"type":"string"},"state":{"type":"string"},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total_count":{"type":"integer","format":"int64"}}},"CommentPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommentView"}},"total":{"type":"integer","format":"int64"}}},"CommentView":{"type":"object","required":["id","poster_id","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"poster_id":{"type":"string","format":"uuid"},"updated_at":{"type":["string","null"]}}},"CommitDateOptions":{"type":"object","properties":{"author":{"type":["string","null"]},"committer":{"type":["string","null"]}}},"CommitDiffPayload":{"type":"object","required":["sha","format","content"],"properties":{"content":{"type":"string"},"format":{"type":"string"},"sha":{"type":"string"}}},"CommitMeta":{"type":"object","required":["sha","message"],"properties":{"author_email":{"type":["string","null"]},"author_name":{"type":["string","null"]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer_email":{"type":["string","null"]},"committer_name":{"type":["string","null"]},"message":{"type":"string"},"sha":{"type":"string"},"tree_sha":{"type":["string","null"]}}},"CommitStatusPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommitStatusView"}},"total":{"type":"integer","format":"int64"}}},"CommitStatusView":{"type":"object","required":["id","repo_id","sha","state","context","url","creator","created_at"],"properties":{"context":{"type":"string"},"created_at":{"type":"string"},"creator":{"$ref":"#/components/schemas/CommitUserSummary"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"state":{"type":"string"},"target_url":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"url":{"type":"string"}}},"CommitSummary":{"type":"object","required":["sha","message","parent_shas","tree_sha"],"properties":{"author":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UserMini"}]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UserMini"}]},"message":{"type":"string"},"parent_shas":{"type":"array","items":{"type":"string"}},"sha":{"type":"string"},"tree_sha":{"type":"string"}}},"CommitUserSummary":{"type":"object","required":["id","login"],"properties":{"avatar_url":{"type":["string","null"]},"full_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"}}},"CommitView":{"type":"object","required":["sha","message","parent_shas","tree_sha"],"properties":{"author_email":{"type":["string","null"]},"author_name":{"type":["string","null"]},"authored_at":{"type":["string","null"]},"committed_at":{"type":["string","null"]},"committer_email":{"type":["string","null"]},"committer_name":{"type":["string","null"]},"message":{"type":"string"},"parent_shas":{"type":"array","items":{"type":"string"}},"sha":{"type":"string"},"tree_sha":{"type":"string"}}},"CommitsResponse":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CommitSummary"}},"total":{"type":"integer","format":"int64"}}},"CompareFileDiff":{"type":"object","required":["path","additions","deletions","status"],"properties":{"additions":{"type":"integer","format":"int64"},"deletions":{"type":"integer","format":"int64"},"path":{"type":"string"},"status":{"type":"string"}}},"CompareView":{"type":"object","required":["base","head","total_commits","ahead_by","behind_by","files"],"properties":{"ahead_by":{"type":"integer","format":"int64"},"base":{"type":"string"},"behind_by":{"type":"integer","format":"int64"},"files":{"type":"array","items":{"$ref":"#/components/schemas/CompareFileDiff"}},"head":{"type":"string"},"merge_base":{"type":["string","null"]},"total_commits":{"type":"integer","format":"int64"}}},"ConfirmEmailChangeCmd":{"type":"object","required":["ticket_id"],"properties":{"ticket_id":{"type":"string","format":"uuid"}}},"ContentHistoryPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentHistoryView"}},"total":{"type":"integer","format":"int64"}}},"ContentHistoryView":{"type":"object","required":["id","issue_id","poster_id","edited_at","created_at"],"properties":{"comment_id":{"type":["string","null"],"format":"uuid"},"content_after":{"type":["string","null"]},"content_before":{"type":["string","null"]},"created_at":{"type":"string"},"edited_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"poster_id":{"type":"string","format":"uuid"}}},"ContentsExtResponse":{"type":"object","required":["dir_contents"],"properties":{"dir_contents":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}},"file_contents":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContentsResponse"}]}}},"ContentsListResponse":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"ContentsQuery":{"type":"object","properties":{"ref":{"type":["string","null"]}}},"ContentsResponse":{"type":"object","required":["name","path","sha","type","size"],"properties":{"content":{"type":["string","null"]},"download_url":{"type":["string","null"]},"encoding":{"type":["string","null"]},"git_url":{"type":["string","null"]},"html_url":{"type":["string","null"]},"last_author_date":{"type":["string","null"]},"last_commit_message":{"type":["string","null"]},"last_commit_sha":{"type":["string","null"]},"last_committer_date":{"type":["string","null"]},"lfs_oid":{"type":["string","null"]},"lfs_size":{"type":["integer","null"],"format":"int64"},"links":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FileLinksResponse"}]},"name":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":"integer","format":"int64"},"submodule_git_url":{"type":["string","null"]},"target":{"type":["string","null"]},"type":{"type":"string"},"url":{"type":["string","null"]}}},"CreateAccessKeyCmd":{"type":"object","required":["name","scope"],"properties":{"name":{"type":"string"},"scope":{"$ref":"#/components/schemas/AccessKeyScope"}}},"CreateAccessKeyResp":{"type":"object","required":["key","token"],"properties":{"key":{"$ref":"#/components/schemas/AccessKeyView"},"token":{"type":"string"}}},"CreateBanCmd":{"type":"object","required":["user_id"],"properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"CreateBranchOption":{"type":"object","required":["new_branch_name"],"properties":{"new_branch_name":{"type":"string"},"old_branch_name":{"type":["string","null"]},"old_ref_name":{"type":["string","null"]}}},"CreateBranchProtectionOption":{"type":"object","required":["branch_name"],"properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_name":{"type":"string"},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"rule_name":{"type":["string","null"]},"unprotected_file_patterns":{"type":["string","null"]}}},"CreateCollectionOption":{"type":"object","required":["space_id","name"],"properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"CreateCommentOption":{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"}}},"CreateDependencyOption":{"type":"object","required":["dependency_id"],"properties":{"dependency_id":{"type":"string","format":"uuid"}}},"CreateDeployKeyOption":{"type":"object","required":["title","key"],"properties":{"key":{"type":"string"},"read_only":{"type":["boolean","null"]},"title":{"type":"string"}}},"CreateDocumentCmd":{"type":"object","required":["title","slug"],"properties":{"content":{"type":"string"},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"}}},"CreateFileOption":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}}]},"CreateInviteCmd":{"type":"object","required":["role_ids"],"properties":{"email":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"user_id":{"type":["string","null"],"format":"uuid"}}},"CreateIssueOption":{"type":"object","required":["title","body"],"properties":{"body":{"type":"string"},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string"}}},"CreateLabelOption":{"type":"object","required":["name","color"],"properties":{"color":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"}}},"CreateMemberOption":{"type":"object","required":["user_id","kind"],"properties":{"kind":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"CreateMilestoneOption":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"name":{"type":"string"}}},"CreatePinOption":{"type":"object","required":["issue_id","pin_order"],"properties":{"issue_id":{"type":"string","format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"CreateProjectCmd":{"type":"object","required":["space_id","name"],"properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"parent_dir":{"type":["string","null"],"format":"uuid"},"space_id":{"type":"string","format":"uuid"},"target_date":{"type":["string","null"],"format":"date"}}},"CreatePullRequestCommentOption":{"type":"object","required":["body"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]}}},"CreatePullRequestOption":{"type":"object","required":["title","head","base"],"properties":{"base":{"type":"string"},"body":{"type":["string","null"]},"head":{"type":"string"},"title":{"type":"string"}}},"CreateReactionOption":{"type":"object","required":["emoji"],"properties":{"emoji":{"type":"string"}}},"CreateReleaseOption":{"type":"object","required":["tag_name","title"],"properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]},"title":{"type":"string"}}},"CreateRepoOption":{"type":"object","required":["space_id","name"],"properties":{"auto_init":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"gitignores":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"issue_labels":{"type":["string","null"]},"license_name":{"type":["string","null"]},"name":{"type":"string"},"object_format":{"type":["string","null"]},"parent_dir":{"type":["string","null"],"format":"uuid"},"readme":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"CreateRepoRelOption":{"type":"object","required":["repo_id"],"properties":{"repo_id":{"type":"string","format":"uuid"}}},"CreateRoleCmd":{"type":"object","required":["name","permissions"],"properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"CreateSpaceCmd":{"type":"object","required":["name"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"public":{"type":"boolean"},"welcome_message":{"type":["string","null"]}}},"CreateStatusOption":{"type":"object","required":["state","context"],"properties":{"context":{"type":"string"},"description":{"type":["string","null"]},"state":{"type":"string"},"target_url":{"type":["string","null"]}}},"CreateTagOption":{"type":"object","required":["tag_name"],"properties":{"message":{"type":["string","null"]},"tag_name":{"type":"string"},"target":{"type":["string","null"]}}},"CreateTagProtectionOption":{"type":"object","required":["name_pattern"],"properties":{"name_pattern":{"type":"string"},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"CreateViewCmd":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"sort_by":{"type":"string"}}},"DeleteFileOption":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["sha"],"properties":{"sha":{"type":"string"}}}]},"DeletionRequestView":{"type":"object","required":["id","user_id","status","created_at","updated_at"],"properties":{"cancelled_at":{"type":["string","null"]},"completed_at":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"scheduled_for":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/DeletionStatus"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"DeletionStatus":{"type":"string","enum":["pending","scheduled","completed","cancelled"]},"DependencyView":{"type":"object","required":["id","issue_id","dependency_id","created_at"],"properties":{"created_at":{"type":"string"},"dependency_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"}}},"DeployKeyPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DeployKeyView"}},"total":{"type":"integer","format":"int64"}}},"DeployKeyView":{"type":"object","required":["id","key_id","repo_id","title","key_type","fingerprint","content","url","read_only","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_id":{"type":"integer","format":"int64"},"key_type":{"type":"string"},"last_used_at":{"type":["string","null"]},"read_only":{"type":"boolean"},"repo_id":{"type":"string","format":"uuid"},"title":{"type":"string"},"url":{"type":"string"}}},"DeviceView":{"type":"object","required":["id","is_trusted","first_seen_at","last_seen_at","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"device_name":{"type":["string","null"]},"device_type":{"type":["string","null"]},"first_seen_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_trusted":{"type":"boolean"},"last_seen_at":{"type":"string"},"os":{"type":["string","null"]},"updated_at":{"type":"string"},"user_agent":{"type":["string","null"]}}},"DocumentPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DocumentView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"DocumentView":{"type":"object","required":["id","project_id","creator_id","title","slug","content","created_at"],"properties":{"content":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"last_editor_id":{"type":["string","null"],"format":"uuid"},"parent_id":{"type":["string","null"],"format":"uuid"},"project_id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"EditBranchProtectionOption":{"type":"object","properties":{"approvals_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"approvals_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"block_admin_merge_override":{"type":["boolean","null"]},"block_on_change_requested_reviews":{"type":["boolean","null"]},"block_on_outdated_branch":{"type":["boolean","null"]},"block_on_rejected_reviews":{"type":["boolean","null"]},"branch_pattern":{"type":["string","null"]},"bypass_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"bypass_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"dismiss_stale_approvals":{"type":["boolean","null"]},"enable_approvals_whitelist":{"type":["boolean","null"]},"enable_bypass_allowlist":{"type":["boolean","null"]},"enable_force_push":{"type":["boolean","null"]},"enable_force_push_allowlist":{"type":["boolean","null"]},"enable_merge_whitelist":{"type":["boolean","null"]},"enable_push":{"type":["boolean","null"]},"enable_push_whitelist":{"type":["boolean","null"]},"force_push_allowlist_deploy_keys":{"type":["boolean","null"]},"force_push_allowlist_teams":{"type":["array","null"],"items":{"type":"string"}},"force_push_allowlist_usernames":{"type":["array","null"],"items":{"type":"string"}},"ignore_stale_approvals":{"type":["boolean","null"]},"merge_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"merge_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"priority":{"type":["integer","null"],"format":"int64"},"protected_file_patterns":{"type":["string","null"]},"push_whitelist_deploy_keys":{"type":["boolean","null"]},"push_whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"push_whitelist_usernames":{"type":["array","null"],"items":{"type":"string"}},"require_signed_commits":{"type":["boolean","null"]},"required_approvals":{"type":["integer","null"],"format":"int32"},"unprotected_file_patterns":{"type":["string","null"]}}},"EditReleaseOption":{"type":"object","properties":{"content":{"type":["string","null"]},"is_draft":{"type":["boolean","null"]},"is_prerelease":{"type":["boolean","null"]},"tag_name":{"type":["string","null"]},"target":{"type":["string","null"]},"title":{"type":["string","null"]}}},"EditTagProtectionOption":{"type":"object","properties":{"name_pattern":{"type":["string","null"]},"whitelist_teams":{"type":["array","null"],"items":{"type":"string"}},"whitelist_usernames":{"type":["array","null"],"items":{"type":"string","format":"uuid"}}}},"EmailChangeTicketStatus":{"type":"string","enum":["pending","verified","completed","cancelled"]},"EmailChangeTicketView":{"type":"object","required":["id","new_email","status","expires_at","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"new_email":{"type":"string"},"status":{"$ref":"#/components/schemas/EmailChangeTicketStatus"},"used_at":{"type":["string","null"]}}},"EmailView":{"type":"object","required":["id","email","is_activated","is_primary","created_at","updated_at"],"properties":{"activated_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_activated":{"type":"boolean"},"is_primary":{"type":"boolean"},"updated_at":{"type":"string"}}},"ErrorBody":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"EventPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EventView"}},"total":{"type":"integer","format":"int64"}}},"EventView":{"type":"object","required":["id","user_id","event_type","created_at"],"properties":{"comment_id":{"type":["string","null"],"format":"uuid"},"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"new_ref":{"type":["string","null"]},"new_title":{"type":["string","null"]},"old_ref":{"type":["string","null"]},"old_title":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"ExternalTracker":{"type":"object","required":["external_tracker_url","external_tracker_format","external_tracker_style"],"properties":{"external_tracker_format":{"type":"string"},"external_tracker_style":{"type":"string"},"external_tracker_url":{"type":"string"}}},"ExternalWiki":{"type":"object","required":["external_wiki_url"],"properties":{"external_wiki_url":{"type":"string"}}},"FavoritePage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FavoriteView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"FavoriteView":{"type":"object","required":["id","project_id","user_id","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"folder":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"FileDeleteResponse":{"type":"object","properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitSummary"}]},"content":{}}},"FileLinksResponse":{"type":"object","properties":{"git":{"type":["string","null"]},"html":{"type":["string","null"]},"self":{"type":["string","null"]}}},"FileOptions":{"type":"object","properties":{"author":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GitIdentity"}]},"branch":{"type":["string","null"]},"committer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GitIdentity"}]},"dates":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitDateOptions"}]},"force_push":{"type":["boolean","null"]},"message":{"type":["string","null"]},"new_branch":{"type":["string","null"]},"signoff":{"type":["boolean","null"]}}},"FilesResponse":{"type":"object","required":["files"],"properties":{"commit":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CommitSummary"}]},"files":{"type":"array","items":{"$ref":"#/components/schemas/ContentsResponse"}}}},"FollowerSummary":{"type":"object","required":["user","since"],"properties":{"since":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"ForgotPasswordCmd":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"ForgotPasswordResp":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"ForkRepoOption":{"type":"object","required":["to_channel_id"],"properties":{"description":{"type":["string","null"]},"name":{"type":["string","null"]},"to_channel_id":{"type":"string","format":"uuid"}}},"ForkView":{"type":"object","required":["id","name","full_name","owner","private","fork","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"fork":{"type":"boolean"},"full_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"owner":{"$ref":"#/components/schemas/UserMini"},"private":{"type":"boolean"},"updated_at":{"type":"string"}}},"ForksResponse":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ForkView"}},"total":{"type":"integer","format":"int64"}}},"GenerateRepoOption":{"type":"object","required":["to_channel_id","name"],"properties":{"description":{"type":["string","null"]},"is_private":{"type":["boolean","null"]},"name":{"type":"string"},"to_channel_id":{"type":"string","format":"uuid"}}},"GitIdentity":{"type":"object","required":["name","email"],"properties":{"date":{"type":["string","null"]},"email":{"type":"string"},"name":{"type":"string"}}},"GitRef":{"type":"object","required":["name","sha","type_"],"properties":{"name":{"type":"string"},"sha":{"type":"string"},"type_":{"type":"string"}}},"HealthStatus":{"type":"object","required":["status","service"],"properties":{"service":{"type":"string"},"status":{"type":"string"}}},"InternalTracker":{"type":"object","required":["enable_time_tracker","allow_only_contributors_to_track_time","enable_issue_dependencies"],"properties":{"allow_only_contributors_to_track_time":{"type":"boolean"},"enable_issue_dependencies":{"type":"boolean"},"enable_time_tracker":{"type":"boolean"}}},"IssueConfig":{"type":"object","required":["blank_issues_enabled"],"properties":{"blank_issues_enabled":{"type":"boolean"},"contact_links":{}}},"IssueConfigValidation":{"type":"object","required":["valid"],"properties":{"message":{"type":["string","null"]},"valid":{"type":"boolean"}}},"IssuePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/IssueView"}},"total":{"type":"integer","format":"int64"}}},"IssueState":{"type":"string","enum":["open","closed"]},"IssueTemplate":{"type":"object","required":["name","title","content","fields"],"properties":{"content":{"type":"string"},"description":{"type":["string","null"]},"fields":{"type":"array","items":{"$ref":"#/components/schemas/IssueTemplateField"}},"name":{"type":"string"},"title":{"type":"string"}}},"IssueTemplateField":{"type":"object","required":["type_","id","name"],"properties":{"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"required":{"type":["boolean","null"]},"type_":{"type":"string"},"validations":{}}},"IssueUserView":{"type":"object","required":["id","user_id","issue_id","is_read","is_mentioned","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_mentioned":{"type":"boolean"},"is_read":{"type":"boolean"},"issue_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"IssueView":{"type":"object","required":["id","collection_id","autoincrement_id","author_id","title","body","state","created_at"],"properties":{"author_id":{"type":"string","format":"uuid"},"autoincrement_id":{"type":"integer","format":"int32"},"body":{"type":"string"},"closed_at":{"type":["string","null"]},"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"milestone_id":{"type":["string","null"],"format":"uuid"},"state":{"$ref":"#/components/schemas/IssueState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"LabelPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LabelView"}},"total":{"type":"integer","format":"int64"}}},"LabelView":{"type":"object","required":["id","channel_id","name","exclusive","exclusive_order","color","is_archived","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"color":{"type":"string"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"exclusive":{"type":"boolean"},"exclusive_order":{"type":"integer","format":"int32"},"id":{"type":"string","format":"uuid"},"is_archived":{"type":"boolean"},"name":{"type":"string"},"updated_at":{"type":["string","null"]}}},"LanguagesResponse":{"type":"object","required":["languages"],"properties":{"languages":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"propertyNames":{"type":"string"}}}},"LicensesResponse":{"type":"object","required":["licenses"],"properties":{"licenses":{"type":"array","items":{"type":"string"}}}},"LinkKind":{"type":"string","enum":["related","duplicate","blocks","blocked_by"]},"LinkPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LinkView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"LinkView":{"type":"object","required":["id","project_id","related_project_id","kind","created_by","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"kind":{"$ref":"#/components/schemas/LinkKind"},"project_id":{"type":"string","format":"uuid"},"related_project_id":{"type":"string","format":"uuid"}}},"ListActivityQuery":{"type":"object","properties":{"page":{"type":"integer","format":"int64","minimum":0},"per_page":{"type":"integer","format":"int64","minimum":0},"verb":{"type":["string","null"]}}},"ListAttachmentQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListBlocksQuery":{"type":"object","properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0}}},"ListBranchProtectionQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListBranchQuery":{"type":"object","properties":{"keyword":{"type":["string","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListCollaboratorQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListCollectionQuery":{"type":"object","properties":{"channel_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"ListCommentQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"parent_id":{"type":["string","null"],"format":"uuid"}}},"ListContentHistoryQuery":{"type":"object","properties":{"comment_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListDeployKeyQuery":{"type":"object","properties":{"fingerprint":{"type":["string","null"]},"key_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListEventQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListFollowersQuery":{"type":"object","required":["target_uid"],"properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0},"target_uid":{"type":"string","format":"uuid"}}},"ListFollowingQuery":{"type":"object","required":["user_uid"],"properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0},"user_uid":{"type":"string","format":"uuid"}}},"ListIssueQuery":{"type":"object","properties":{"author_id":{"type":["string","null"],"format":"uuid"},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"milestone_id":{"type":["string","null"],"format":"uuid"},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/IssueState"}]}}},"ListLabelQuery":{"type":"object","properties":{"is_archived":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"ListMemberQuery":{"type":"object","properties":{"kind":{"type":["string","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListMilestoneQuery":{"type":"object","properties":{"is_closed":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"ListNotificationsQuery":{"type":"object","properties":{"cursor":{"type":["string","null"],"format":"uuid"},"limit":{"type":"integer","minimum":0},"notification_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/NotificationType"}]},"unread_only":{"type":["boolean","null"]}}},"ListProjectQuery":{"type":"object","required":["space_id"],"properties":{"lead_id":{"type":["string","null"],"format":"uuid"},"page":{"type":"integer","format":"int64","minimum":0},"per_page":{"type":"integer","format":"int64","minimum":0},"q":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"starred_only":{"type":["boolean","null"]},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectState"}]}}},"ListPullRequestQuery":{"type":"object","properties":{"keyword":{"type":["string","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"state":{"type":["string","null"]}}},"ListReactionQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListReleaseQuery":{"type":"object","properties":{"draft":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"prerelease":{"type":["boolean","null"]}}},"ListRepoQuery":{"type":"object","properties":{"channel_id":{"type":["string","null"],"format":"uuid"},"is_archived":{"type":["boolean","null"]},"is_private":{"type":["boolean","null"]},"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"owner_user_id":{"type":["string","null"],"format":"uuid"},"q":{"type":["string","null"]}}},"ListSessionsQuery":{"type":"object","properties":{"app_id":{"type":["string","null"]},"include_revoked":{"type":"boolean"}}},"ListStatusQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"sort":{"type":["string","null"]},"state":{"type":["string","null"]}}},"ListSubscriberQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListTagProtectionQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListTagQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0}}},"ListTrackedTimeQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"offset":{"type":["integer","null"],"format":"int64","minimum":0},"user_id":{"type":["string","null"],"format":"uuid"}}},"LoginCmd":{"type":"object","required":["identifier","password","pow"],"properties":{"app_id":{"type":["string","null"]},"identifier":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"LoginResp":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user":{"$ref":"#/components/schemas/UserPublic"}}},"LogoutCmd":{"type":"object","required":["refresh_token"],"properties":{"refresh_token":{"type":"string"}}},"LogoutResp":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"boolean"}}},"MarkAllReadResp":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"MarkReadCmd":{"type":"object","required":["notification_ids"],"properties":{"notification_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"MarkReadResp":{"type":"object","required":["marked"],"properties":{"marked":{"type":"integer","format":"int64","minimum":0}}},"MemberPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MemberView"}},"total":{"type":"integer","format":"int64"}}},"MemberRole":{"type":"string","enum":["owner","lead","contributor","viewer"]},"MemberView":{"type":"object","required":["id","issue_id","user_id","kind","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"kind":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"MemeView":{"type":"object","required":["id","name","content_type","url","size","created_at"],"properties":{"content_type":{"type":"string"},"created_at":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"MergePullRequestOption":{"type":"object","required":["style"],"properties":{"commit_message":{"type":["string","null"]},"commit_title":{"type":["string","null"]},"delete_branch_after_merge":{"type":"boolean"},"style":{"$ref":"#/components/schemas/MergeStyle"}}},"MergeStyle":{"type":"string","enum":["fast_forward","rebase","rebase_merge","squash","merge","manually_merged"]},"MergeUpstreamRequest":{"type":"object","required":["branch"],"properties":{"branch":{"type":"string"},"ff_only":{"type":["boolean","null"]}}},"MergeUpstreamResponse":{"type":"object","required":["merge_type"],"properties":{"merge_type":{"type":"string"}}},"MergeView":{"type":"object","required":["sha","merged"],"properties":{"merged":{"type":"boolean"},"message":{"type":["string","null"]},"sha":{"type":"string"}}},"MessageNotifications":{"type":"string","enum":["all","mentions","nothing"]},"MilestonePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MilestoneView"}},"total":{"type":"integer","format":"int64"}}},"MilestoneView":{"type":"object","required":["id","collection_id","name","is_closed","num_issues","num_closed_issues","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_closed":{"type":"boolean"},"name":{"type":"string"},"num_closed_issues":{"type":"integer","format":"int32"},"num_issues":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"]}}},"NewPinAllowedResponse":{"type":"object","required":["allowed"],"properties":{"allowed":{"type":"boolean"}}},"NoteView":{"type":"object","required":["sha","message"],"properties":{"message":{"type":"string"},"sha":{"type":"string"}}},"NotificationType":{"type":"string","enum":["mention","reply","follow","invite","assignment","system"]},"NotificationView":{"type":"object","required":["id","notification_type","title","created_at"],"properties":{"actor_uid":{"type":["string","null"],"format":"uuid"},"body":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"notification_type":{"$ref":"#/components/schemas/NotificationType"},"read_at":{"type":["string","null"]},"title":{"type":"string"}}},"OAuthLoginResp":{"type":"object","required":["access_token","refresh_token","token_type","expires_in","user_id","auto_registered"],"properties":{"access_token":{"type":"string"},"auto_registered":{"type":"boolean"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"},"user_id":{"type":"string"}}},"OAuthProvider":{"type":"string","enum":["google","github","apple"]},"OAuthProviderInfo":{"type":"object","required":["name","display_name","authorize_url"],"properties":{"authorize_url":{"type":"string"},"display_name":{"type":"string"},"name":{"type":"string"}}},"Permission":{"type":"object","required":["admin","push","pull"],"properties":{"admin":{"type":"boolean"},"pull":{"type":"boolean"},"push":{"type":"boolean"}}},"PinView":{"type":"object","required":["id","collection_id","pin_order","created_at"],"properties":{"collection_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"pin_order":{"type":"integer","format":"int32"}}},"PowChallengeResp":{"type":"object","required":["challenge","ttl_seconds"],"properties":{"challenge":{"type":"string"},"ttl_seconds":{"type":"integer","format":"int64","minimum":0}}},"PowProof":{"type":"object","required":["challenge","solution"],"properties":{"challenge":{"type":"string"},"solution":{"type":"string"}}},"PrState":{"type":"string","enum":["open","closed","merged"]},"ProfileView":{"type":"object","required":["user_id","show_email","show_location","show_real_name","show_activity","updated_at"],"properties":{"accent_color":{"type":["string","null"]},"banner_color":{"type":["integer","null"],"format":"int32"},"banner_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"company":{"type":["string","null"]},"date_of_birth":{"type":["string","null"],"format":"date"},"location":{"type":["string","null"]},"pronouns":{"type":["string","null"]},"pronouns_privacy":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]},"real_name":{"type":["string","null"]},"show_activity":{"type":"boolean"},"show_email":{"type":"boolean"},"show_location":{"type":"boolean"},"show_real_name":{"type":"boolean"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"},"website":{"type":["string","null"]}}},"ProfileVisibility":{"type":"string","enum":["public","registered_only","members_only","private"]},"ProjectHealth":{"type":"string","enum":["on_track","at_risk","off_track","none"]},"ProjectPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProjectView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ProjectState":{"type":"string","enum":["backlog","planned","in_progress","paused","completed","cancelled"]},"ProjectView":{"type":"object","required":["id","space_id","creator_id","name","state","health","sort_order","starred","created_at"],"properties":{"cancelled_at":{"type":["string","null"],"format":"date-time"},"color":{"type":["string","null"]},"completed_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"health":{"$ref":"#/components/schemas/ProjectHealth"},"icon":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"space_id":{"type":"string","format":"uuid"},"starred":{"type":"integer","format":"int32"},"started_at":{"type":["string","null"],"format":"date-time"},"state":{"$ref":"#/components/schemas/ProjectState"},"target_date":{"type":["string","null"],"format":"date"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"PublisherSummary":{"type":"object","required":["id","name","login"],"properties":{"avatar_url":{"type":["string","null"]},"email":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"},"name":{"type":"string"}}},"PullRequestCommentView":{"type":"object","required":["id","pull_request_id","user_id","body","created_at"],"properties":{"body":{"type":"string"},"commit_sha":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"line":{"type":["integer","null"],"format":"int32"},"path":{"type":["string","null"]},"pull_request_id":{"type":"string","format":"uuid"},"review_id":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"PullRequestEventView":{"type":"object","required":["id","pull_request_id","user_id","event_type","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"string","format":"uuid"},"pull_request_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"PullRequestPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PullRequestView"}},"total":{"type":"integer","format":"int64"}}},"PullRequestReviewView":{"type":"object","required":["id","pull_request_id","user_id","official","state","created_at"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"official":{"type":"boolean"},"pull_request_id":{"type":"string","format":"uuid"},"state":{"$ref":"#/components/schemas/ReviewState"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"PullRequestView":{"type":"object","required":["id","repo_id","number","title","head_branch","base_branch","author_id","state","is_locked","has_merged","created_at","comments_count","reviews_count"],"properties":{"author_id":{"type":"string","format":"uuid"},"base_branch":{"type":"string"},"base_sha":{"type":["string","null"]},"body":{"type":["string","null"]},"closed_at":{"type":["string","null"]},"comments_count":{"type":"integer","format":"int64"},"created_at":{"type":"string"},"has_merged":{"type":"boolean"},"head_branch":{"type":"string"},"head_sha":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_locked":{"type":"boolean"},"mergeable":{"type":["boolean","null"]},"mergeable_state":{"type":["string","null"]},"merged_at":{"type":["string","null"]},"merged_commit_sha":{"type":["string","null"]},"merger_id":{"type":["string","null"]},"number":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"reviews_count":{"type":"integer","format":"int64"},"state":{"$ref":"#/components/schemas/PrState"},"title":{"type":"string"},"updated_at":{"type":["string","null"]}}},"PushPlatform":{"type":"string","enum":["web_push","android_fcm","ios_apns"]},"PushSubscriptionView":{"type":"object","required":["id","platform","endpoint","created_at"],"properties":{"created_at":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"string","format":"uuid"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"ReactionAggView":{"type":"object","required":["emoji","count","user_ids"],"properties":{"count":{"type":"integer","format":"int64"},"emoji":{"type":"string"},"user_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"ReactionScope":{"type":"string","enum":["issue","comment"]},"ReactionView":{"type":"object","required":["id","scope","target_id","user_id","emoji","created_at"],"properties":{"created_at":{"type":"string"},"emoji":{"type":"string"},"id":{"type":"string","format":"uuid"},"scope":{"$ref":"#/components/schemas/ReactionScope"},"target_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"RecentMentionView":{"type":"object","required":["id","channel_id","message_id","created_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}},"ReclaimCmd":{"type":"object","required":["email","pow"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"}}},"ReclaimResp":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"RecoveryCodeView":{"type":"object","required":["id","created_at"],"properties":{"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"used_at":{"type":["string","null"]}}},"RefreshCmd":{"type":"object","required":["refresh_token"],"properties":{"app_id":{"type":["string","null"]},"refresh_token":{"type":"string"}}},"RefreshResp":{"type":"object","required":["access_token","refresh_token","token_type","expires_in"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64"},"refresh_token":{"type":"string"},"token_type":{"type":"string"}}},"RegenerateRecoveryResp":{"type":"object","required":["codes"],"properties":{"codes":{"type":"array","items":{"type":"string"}}}},"RegisterCmd":{"type":"object","required":["email","password","pow"],"properties":{"accept_agreements":{"type":"array","items":{"type":"string"}},"email":{"type":"string"},"password":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"username":{"type":["string","null"]}}},"RegisterResp":{"type":"object","required":["uid","pending","temp_key","purpose"],"properties":{"pending":{"type":"boolean"},"purpose":{"type":"string"},"temp_key":{"$ref":"#/components/schemas/TempKey"},"uid":{"type":"string"}}},"ReleaseAttachment":{"type":"object","required":["id","name","size","download_url","created_at"],"properties":{"created_at":{"type":"string"},"download_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"ReleaseAttachmentListResponse":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAttachmentView"}}}},"ReleaseAttachmentView":{"type":"object","required":["id","name","size","download_url","created_at"],"properties":{"created_at":{"type":"string"},"download_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"ReleasePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseView"}},"total":{"type":"integer","format":"int64"}}},"ReleaseView":{"type":"object","required":["id","repo_id","tag_name","target","title","sha","num_commits","is_draft","is_prerelease","is_tag","url","html_url","tarball_url","zipball_url","upload_url","publisher","attachments","created_at","updated_at"],"properties":{"attachments":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseAttachment"}},"content":{"type":["string","null"]},"created_at":{"type":"string"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_draft":{"type":"boolean"},"is_prerelease":{"type":"boolean"},"is_tag":{"type":"boolean"},"num_commits":{"type":"integer","format":"int32"},"publisher":{"$ref":"#/components/schemas/UserSummary"},"repo_id":{"type":"string","format":"uuid"},"sha":{"type":"string"},"tag_name":{"type":"string"},"tarball_url":{"type":"string"},"target":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"upload_url":{"type":"string"},"url":{"type":"string"},"zipball_url":{"type":"string"}}},"RenameBranchOption":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"RenameRepoOption":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"RepoCollaboratorPermission":{"type":"object","required":["permission","role","user"],"properties":{"permission":{"type":"string"},"role":{"type":"string"},"user":{"$ref":"#/components/schemas/UserSummary"}}},"RepoPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RepoView"}},"total":{"type":"integer","format":"int64"}}},"RepoRelView":{"type":"object","required":["id","issue_id","repo_id","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"repo_id":{"type":"string","format":"uuid"}}},"RepoSummary":{"type":"object","required":["id","name","full_name","empty","private","fork","template","mirror","size","stars_count","forks_count","watchers_count","open_issues_count"],"properties":{"description":{"type":["string","null"]},"empty":{"type":"boolean"},"fork":{"type":"boolean"},"forks_count":{"type":"integer","format":"int32"},"full_name":{"type":"string"},"id":{"type":"string","format":"uuid"},"mirror":{"type":"boolean"},"name":{"type":"string"},"open_issues_count":{"type":"integer","format":"int32"},"private":{"type":"boolean"},"size":{"type":"integer","format":"int64"},"stars_count":{"type":"integer","format":"int32"},"template":{"type":"boolean"},"watchers_count":{"type":"integer","format":"int32"}}},"RepoTopicOptions":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"RepoView":{"type":"object","required":["id","channel_id","space_id","name","lower_name","full_name","default_branch","enable_lfs","is_private","is_archived","is_fork","is_template","is_mirror","empty","size","git_size","lfs_size","nums_watch","nums_star","nums_pr","nums_commits","nums_branches","nums_tags","allow_rebase","allow_rebase_explicit","allow_squash_merge","allow_merge_commits","allow_fast_forward_only_merge","allow_rebase_update","allow_merge_update","allow_manual_merge","autodetect_manual_merge","default_delete_branch_after_merge","default_allow_maintainer_edit","ignore_whitespace_conflicts","object_format","has_code","has_issues","has_wiki","has_pull_requests","has_projects","has_releases","has_packages","has_actions","projects_mode","languages","licenses","topics","html_url","url","link","ssh_url","clone_url","created_at","updated_at"],"properties":{"allow_fast_forward_only_merge":{"type":"boolean"},"allow_manual_merge":{"type":"boolean"},"allow_merge_commits":{"type":"boolean"},"allow_merge_update":{"type":"boolean"},"allow_rebase":{"type":"boolean"},"allow_rebase_explicit":{"type":"boolean"},"allow_rebase_update":{"type":"boolean"},"allow_squash_merge":{"type":"boolean"},"archived_at":{"type":["string","null"]},"autodetect_manual_merge":{"type":"boolean"},"avatar_url":{"type":["string","null"]},"channel":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ChannelSummary"}]},"channel_id":{"type":"string","format":"uuid"},"clone_url":{"type":"string"},"created_at":{"type":"string"},"default_allow_maintainer_edit":{"type":"boolean"},"default_branch":{"type":"string"},"default_delete_branch_after_merge":{"type":"boolean"},"description":{"type":["string","null"]},"empty":{"type":"boolean"},"enable_lfs":{"type":"boolean"},"full_name":{"type":"string"},"git_size":{"type":"integer","format":"int64"},"has_actions":{"type":"boolean"},"has_code":{"type":"boolean"},"has_issues":{"type":"boolean"},"has_packages":{"type":"boolean"},"has_projects":{"type":"boolean"},"has_pull_requests":{"type":"boolean"},"has_releases":{"type":"boolean"},"has_wiki":{"type":"boolean"},"html_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"ignore_whitespace_conflicts":{"type":"boolean"},"is_archived":{"type":"boolean"},"is_fork":{"type":"boolean"},"is_mirror":{"type":"boolean"},"is_private":{"type":"boolean"},"is_template":{"type":"boolean"},"languages":{"type":"array","items":{"type":"string"}},"last_pushed_at":{"type":["string","null"]},"lfs_size":{"type":"integer","format":"int64"},"license_name":{"type":["string","null"]},"licenses":{"type":"array","items":{"type":"string"}},"link":{"type":"string"},"lower_name":{"type":"string"},"name":{"type":"string"},"nums_branches":{"type":"integer","format":"int32"},"nums_commits":{"type":"integer","format":"int32"},"nums_pr":{"type":"integer","format":"int32"},"nums_star":{"type":"integer","format":"int32"},"nums_tags":{"type":"integer","format":"int32"},"nums_watch":{"type":"integer","format":"int32"},"object_format":{"type":"string"},"parent":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RepoView"}]},"primary_language":{"type":["string","null"]},"projects_mode":{"type":"string"},"size":{"type":"integer","format":"int64"},"space":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceSummary"}]},"space_id":{"type":"string","format":"uuid"},"ssh_url":{"type":"string"},"storage_limit_size":{"type":["integer","null"],"format":"int64"},"topics":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"string"},"url":{"type":"string"},"website":{"type":["string","null"]}}},"ReportStatus":{"type":"string","enum":["open","under_review","resolved","dismissed"]},"ReportView":{"type":"object","required":["id","reported_uid","reason","status","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"evidence":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"},"reporter_uid":{"type":["string","null"],"format":"uuid"},"resolution_note":{"type":["string","null"]},"resolver_uid":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/ReportStatus"},"updated_at":{"type":"string"}}},"RequestChangeBody":{"type":"object","required":["new_email"],"properties":{"new_email":{"type":"string"}}},"RequestDeletionCmd":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"ResendCodeCmd":{"type":"object","required":["email","pow","purpose"],"properties":{"email":{"type":"string"},"pow":{"$ref":"#/components/schemas/PowProof"},"purpose":{"type":"string"}}},"ResendCodeResp":{"type":"object","required":["sent","temp_key"],"properties":{"sent":{"type":"boolean"},"temp_key":{"$ref":"#/components/schemas/TempKey"}}},"ResetPasswordCmd":{"type":"object","required":["email","token","new_password","temp_key_value"],"properties":{"email":{"type":"string"},"new_password":{"type":"string"},"temp_key_value":{"type":"string"},"token":{"type":"string"}}},"ResetPasswordResp":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"}}},"ReviewState":{"type":"string","enum":["approved","changes_requested","commented"]},"RevokeAllResp":{"type":"object","required":["revoked"],"properties":{"revoked":{"type":"integer","format":"int64","minimum":0}}},"RevokeSuspensionCmd":{"type":"object","properties":{"reason":{"type":["string","null"]}}},"RoleOverwriteView":{"type":"object","required":["id","space_id","channel_id","role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"id":{"type":"string","format":"uuid"},"role_id":{"type":"string","format":"uuid"},"space_id":{"type":"string","format":"uuid"}}},"RolePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RoleView"}},"total":{"type":"integer","format":"int64"}}},"RoleView":{"type":"object","required":["id","space_id","name","position","color","version","created_at","created_by","permissions"],"properties":{"color":{"type":"string"},"created_at":{"type":"string"},"created_by":{"type":"string","format":"uuid"},"icon_hash":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"position":{"type":"integer","format":"int64"},"space_id":{"type":"string","format":"uuid"},"unicode_emoji":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"version":{"type":"integer","format":"int32"}}},"SaveMessageCmd":{"type":"object","required":["channel_id","message_id"],"properties":{"channel_id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"}}},"SavedMessageView":{"type":"object","required":["id","channel_id","message_id","saved_at"],"properties":{"channel_id":{"type":"string","format":"uuid"},"id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"saved_at":{"type":"string"}}},"ScheduledMessageStatus":{"type":"string","enum":["pending","sent","cancelled"]},"ScheduledMessageView":{"type":"object","required":["id","target_channel_id","payload","scheduled_at","status","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"payload":{"type":"string"},"scheduled_at":{"type":"string"},"status":{"$ref":"#/components/schemas/ScheduledMessageStatus"},"target_channel_id":{"type":"string","format":"uuid"}}},"SearchResults":{"type":"object","required":["data","ok"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RepoSummary"}},"ok":{"type":"boolean"}}},"SessionKind":{"type":"string","enum":["web_login","bearer_access"]},"SessionView":{"type":"object","required":["id","kind","is_revoked","created_at","expires_at"],"properties":{"app_id":{"type":["string","null"]},"client_ip_hash":{"type":["string","null"]},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"is_revoked":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/SessionKind"},"replaced_at":{"type":["string","null"]},"user_agent_hash":{"type":["string","null"]}}},"SetPrimaryEmailResp":{"type":"object","required":["email"],"properties":{"email":{"$ref":"#/components/schemas/EmailView"}}},"SetRoleOverwriteCmd":{"type":"object","required":["role_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"role_id":{"type":"string","format":"uuid"}}},"SetUserOverwriteCmd":{"type":"object","required":["user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"SpaceAllowJoinLevel":{"type":"string","enum":["none","need_mail_active","need_mail_active_and_last_one_mid","need_mail_active_and_last_one_hours","need_mail_active_and_phone_active"]},"SpaceBanPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceBanView"}},"total":{"type":"integer","format":"int64"}}},"SpaceBanView":{"type":"object","required":["space_id","user_id","banned_by","created_at","updated_at","allow_agent_join","allow_speak","allow_push_repo","allow_comment_any"],"properties":{"allow_agent_join":{"type":"boolean"},"allow_comment_any":{"type":"boolean"},"allow_push_repo":{"type":"boolean"},"allow_speak":{"type":"boolean"},"banned_by":{"type":"string","format":"uuid"},"created_at":{"type":"string"},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"space_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"SpaceInvitePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceInviteView"}},"total":{"type":"integer","format":"int64"}}},"SpaceInviteView":{"type":"object","required":["id","space_id","user_id","email","role_ids","created_at"],"properties":{"accepted_at":{"type":["string","null"]},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"revoked_at":{"type":["string","null"]},"role_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"space_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"SpaceMemberPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceMemberView"}},"total":{"type":"integer","format":"int64"}}},"SpaceMemberStatus":{"type":"string","enum":["active","inactive","left","removed"]},"SpaceMemberView":{"type":"object","required":["space_id","user_id","status","joined_at","created_at","message_notifications","muted","mobile_push","suppress_everyone","suppress_roles","hide_muted_channels"],"properties":{"alias_avatar_url":{"type":["string","null"]},"alias_name":{"type":["string","null"]},"created_at":{"type":"string"},"hide_muted_channels":{"type":"boolean"},"invited_at":{"type":["string","null"]},"invited_by":{"type":["string","null"],"format":"uuid"},"joined_at":{"type":"string"},"last_active_at":{"type":["string","null"]},"left_at":{"type":["string","null"]},"message_notifications":{"$ref":"#/components/schemas/MessageNotifications"},"mobile_push":{"type":"boolean"},"mute_until":{"type":["string","null"]},"muted":{"type":"boolean"},"space_id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/SpaceMemberStatus"},"suppress_everyone":{"type":"boolean"},"suppress_roles":{"type":"boolean"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}},"SpacePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SpaceView"}},"total":{"type":"integer","format":"int64"}}},"SpaceSummary":{"type":"object","required":["id","name"],"properties":{"display_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"SpaceView":{"type":"object","required":["id","name","owner_id","public","is_active","allow_join","allow_invite","member_count","allow_join_level","member_must_enable_2fa","created_at","updated_at"],"properties":{"allow_invite":{"type":"boolean"},"allow_join":{"type":"boolean"},"allow_join_level":{"$ref":"#/components/schemas/SpaceAllowJoinLevel"},"avatar_url":{"type":["string","null"]},"created_at":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_active":{"type":"boolean"},"member_count":{"type":"integer","format":"int64"},"member_must_enable_2fa":{"type":"boolean"},"name":{"type":"string"},"owner_id":{"type":"string","format":"uuid"},"public":{"type":"boolean"},"updated_at":{"type":"string"},"welcome_message":{"type":["string","null"]}}},"SshKeyType":{"type":"string","enum":["ssh_rsa","ssh_ed25519","ecdsa_sha2_nistp256"]},"SshKeyView":{"type":"object","required":["id","name","key_type","fingerprint","created_at"],"properties":{"created_at":{"type":"string"},"fingerprint":{"type":"string"},"id":{"type":"string","format":"uuid"},"key_type":{"$ref":"#/components/schemas/SshKeyType"},"last_used_at":{"type":["string","null"]},"name":{"type":"string"}}},"StopwatchView":{"type":"object","required":["id","issue_id","user_id","started_at","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"started_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"SubmitPullRequestReviewOption":{"type":"object","required":["state"],"properties":{"commit_sha":{"type":["string","null"]},"content":{"type":["string","null"]},"state":{"$ref":"#/components/schemas/ReviewState"}}},"SubmitReportCmd":{"type":"object","required":["reported_uid","reason"],"properties":{"evidence":{"type":["string","null"]},"reason":{"type":"string"},"reported_uid":{"type":"string","format":"uuid"}}},"SubscriberPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriberView"}},"total":{"type":"integer","format":"int64"}}},"SubscriberView":{"type":"object","required":["user_id","repo_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"mode":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"Subscription":{"type":"object","required":["user_id","repo_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"mode":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"}}},"SuspendCmd":{"type":"object","required":["suspension_type"],"properties":{"ends_at":{"type":["string","null"]},"reason":{"type":["string","null"]},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"}}},"SuspensionType":{"type":"string","enum":["temporary","permanent"]},"SuspensionView":{"type":"object","required":["id","user_id","suspension_type","starts_at","created_at"],"properties":{"created_at":{"type":"string"},"ends_at":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"reason":{"type":["string","null"]},"revoked_at":{"type":["string","null"]},"revoked_by":{"type":["string","null"],"format":"uuid"},"starts_at":{"type":"string"},"suspended_by":{"type":["string","null"],"format":"uuid"},"suspension_type":{"$ref":"#/components/schemas/SuspensionType"},"user_id":{"type":"string","format":"uuid"}}},"SyncResult":{"type":"object","required":["repo_id","branches_added","tags_added","commits_added","size_bytes"],"properties":{"branches_added":{"type":"integer","format":"int64"},"commits_added":{"type":"integer","format":"int64"},"repo_id":{"type":"string","format":"uuid"},"size_bytes":{"type":"integer","format":"int64"},"tags_added":{"type":"integer","format":"int64"}}},"SyncStatus":{"type":"object","required":["repo_id","branches_total","tags_total","commits_total","size","synced_at"],"properties":{"branches_total":{"type":"integer","format":"int64"},"commits_total":{"type":"integer","format":"int64"},"last_pushed_at":{"type":["string","null"]},"primary_language":{"type":["string","null"]},"repo_id":{"type":"string","format":"uuid"},"size":{"type":"integer","format":"int64"},"synced_at":{"type":"string"},"tags_total":{"type":"integer","format":"int64"}}},"TagPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagView"}},"total":{"type":"integer","format":"int64"}}},"TagProtectionPage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagProtectionView"}},"total":{"type":"integer","format":"int64"}}},"TagProtectionView":{"type":"object","required":["id","repo_id","name_pattern","whitelist_usernames","whitelist_teams","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name_pattern":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string"},"whitelist_teams":{"type":"array","items":{"type":"string"}},"whitelist_usernames":{"type":"array","items":{"type":"string"}}}},"TagView":{"type":"object","required":["id","repo_id","name","tag_type","commit_sha","commit","message","zipball_url","tarball_url","created_at"],"properties":{"commit":{"$ref":"#/components/schemas/CommitMeta"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"message":{"type":"string"},"name":{"type":"string"},"repo_id":{"type":"string","format":"uuid"},"tag_type":{"type":"string"},"tarball_url":{"type":"string"},"zipball_url":{"type":"string"}}},"TempKey":{"type":"object","required":["name","value","ttl_seconds","secure","http_only","same_site"],"properties":{"domain":{"type":["string","null"]},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":["string","null"]},"same_site":{"type":"string"},"secure":{"type":"boolean"},"ttl_seconds":{"type":"integer","format":"int64","minimum":0},"value":{"type":"string"}}},"TopicList":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"type":"string"}}}},"TopicSearchQuery":{"type":"object","properties":{"limit":{"type":["integer","null"],"format":"int64","minimum":0},"page":{"type":["integer","null"],"format":"int64","minimum":0},"q":{"type":["string","null"]}}},"TopicSearchResult":{"type":"object","required":["topics"],"properties":{"topics":{"type":"array","items":{"$ref":"#/components/schemas/TopicView"}}}},"TopicView":{"type":"object","required":["id","name","repo_count","created_at","updated_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"repo_count":{"type":"integer","format":"int32"},"updated_at":{"type":"string"}}},"TrackedTimePage":{"type":"object","required":["items","total"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TrackedTimeView"}},"total":{"type":"integer","format":"int64"}}},"TrackedTimeView":{"type":"object","required":["id","issue_id","user_id","seconds","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":"string","format":"uuid"},"seconds":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"TransferRepoOption":{"type":"object","required":["new_channel_id"],"properties":{"new_channel_id":{"type":"string","format":"uuid"},"new_name":{"type":["string","null"]}}},"TreeEntryView":{"type":"object","required":["path","mode","type_","sha"],"properties":{"mode":{"type":"string"},"path":{"type":"string"},"sha":{"type":"string"},"size":{"type":["integer","null"],"format":"int64"},"type_":{"type":"string"}}},"TreeView":{"type":"object","required":["sha","entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/TreeEntryView"}},"sha":{"type":"string"}}},"UnassignRoleCmd":{"type":"object","required":["role_id"],"properties":{"role_id":{"type":"string","format":"uuid"}}},"UnreadCountResp":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64"}}},"UpdateAvatarOption":{"type":"object","required":["image"],"properties":{"image":{"type":"string"}}},"UpdateBanCmd":{"type":"object","properties":{"allow_agent_join":{"type":["boolean","null"]},"allow_comment_any":{"type":["boolean","null"]},"allow_push_repo":{"type":["boolean","null"]},"allow_speak":{"type":["boolean","null"]},"expires_at":{"type":["string","null"]},"reason":{"type":["string","null"]}}},"UpdateBranchOption":{"type":"object","required":["new_commit_id"],"properties":{"force":{"type":["boolean","null"]},"new_commit_id":{"type":"string"},"old_commit_id":{"type":["string","null"]}}},"UpdateBranchProtectionPriorities":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"UpdateCollectionOption":{"type":"object","properties":{"description":{"type":["string","null"]},"icon":{"type":["string","null"]},"name":{"type":["string","null"]}}},"UpdateCommentOption":{"type":"object","required":["content"],"properties":{"content":{"type":"string"}}},"UpdateDeviceCmd":{"type":"object","properties":{"device_name":{"type":["string","null"]},"is_trusted":{"type":["boolean","null"]}}},"UpdateDocumentCmd":{"type":"object","properties":{"content":{"type":["string","null"]},"icon":{"type":["string","null"]},"parent_id":{"type":["string","null"],"format":"uuid"},"slug":{"type":["string","null"]},"title":{"type":["string","null"]}}},"UpdateFileOption":{"allOf":[{"$ref":"#/components/schemas/FileOptions"},{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"from_path":{"type":["string","null"]},"sha":{"type":["string","null"]}}}]},"UpdateIssueOption":{"type":"object","properties":{"body":{"type":["string","null"]},"description":{"type":["string","null"]},"milestone_id":{"type":["string","null"],"format":"uuid"},"title":{"type":["string","null"]}}},"UpdateIssueUserOption":{"type":"object","properties":{"is_mentioned":{"type":["boolean","null"]},"is_read":{"type":["boolean","null"]}}},"UpdateLabelOption":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"exclusive":{"type":["boolean","null"]},"exclusive_order":{"type":["integer","null"],"format":"int32"},"is_archived":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"UpdateMemberCmd":{"type":"object","required":["role"],"properties":{"role":{"$ref":"#/components/schemas/MemberRole"}}},"UpdateMilestoneOption":{"type":"object","properties":{"description":{"type":["string","null"]},"due_at":{"type":["string","null"]},"is_closed":{"type":["boolean","null"]},"name":{"type":["string","null"]}}},"UpdatePreferencesCmd":{"type":"object","properties":{"allow_dms_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"allow_mentions_from":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Audience"}]},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":["boolean","null"]},"email_flags":{"type":["integer","null"],"format":"int32"},"in_app_flags":{"type":["integer","null"],"format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":["integer","null"],"format":"int32"},"show_online_status":{"type":["boolean","null"]},"theme_mode":{"type":["string","null"]},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"}}},"UpdateProfileCmd":{"type":"object","properties":{"avatar":{"type":["string","null"]},"display_name":{"type":["string","null"]},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"profile":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UpdateProfileFields"}]},"timezone":{"type":["string","null"]},"visibility":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]}}},"UpdateProfileFields":{"type":"object","properties":{"accent_color":{"type":["string","null"]},"banner_color":{"type":["integer","null"],"format":"int32"},"banner_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"company":{"type":["string","null"]},"date_of_birth":{"type":["string","null"],"format":"date"},"location":{"type":["string","null"]},"pronouns":{"type":["string","null"]},"pronouns_privacy":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProfileVisibility"}]},"real_name":{"type":["string","null"]},"show_activity":{"type":["boolean","null"]},"show_email":{"type":["boolean","null"]},"show_location":{"type":["boolean","null"]},"show_real_name":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"UpdateProjectCmd":{"type":"object","properties":{"color":{"type":["string","null"]},"description":{"type":["string","null"]},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectHealth"}]},"icon":{"type":["string","null"]},"lead_id":{"type":["string","null"],"format":"uuid"},"name":{"type":["string","null"]},"sort_order":{"type":["integer","null"],"format":"int32"},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectState"}]},"target_date":{"type":["string","null"],"format":"date"}}},"UpdatePullRequestOption":{"type":"object","properties":{"base":{"type":["string","null"]},"body":{"type":["string","null"]},"head":{"type":["string","null"]},"title":{"type":["string","null"]}}},"UpdateRepoOption":{"type":"object","properties":{"allow_fast_forward_only_merge":{"type":["boolean","null"]},"allow_manual_merge":{"type":["boolean","null"]},"allow_merge_commits":{"type":["boolean","null"]},"allow_merge_update":{"type":["boolean","null"]},"allow_rebase":{"type":["boolean","null"]},"allow_rebase_explicit":{"type":["boolean","null"]},"allow_rebase_update":{"type":["boolean","null"]},"allow_squash_merge":{"type":["boolean","null"]},"archived":{"type":["boolean","null"]},"autodetect_manual_merge":{"type":["boolean","null"]},"default_allow_maintainer_edit":{"type":["boolean","null"]},"default_branch":{"type":["string","null"]},"default_delete_branch_after_merge":{"type":["boolean","null"]},"default_merge_style":{"type":["string","null"]},"default_update_style":{"type":["string","null"]},"description":{"type":["string","null"]},"enable_lfs":{"type":["boolean","null"]},"external_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalTracker"}]},"external_wiki":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExternalWiki"}]},"has_actions":{"type":["boolean","null"]},"has_code":{"type":["boolean","null"]},"has_issues":{"type":["boolean","null"]},"has_packages":{"type":["boolean","null"]},"has_projects":{"type":["boolean","null"]},"has_pull_requests":{"type":["boolean","null"]},"has_releases":{"type":["boolean","null"]},"has_wiki":{"type":["boolean","null"]},"ignore_whitespace_conflicts":{"type":["boolean","null"]},"internal_tracker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InternalTracker"}]},"is_private":{"type":["boolean","null"]},"license_name":{"type":["string","null"]},"name":{"type":["string","null"]},"projects_mode":{"type":["string","null"]},"template":{"type":["boolean","null"]},"website":{"type":["string","null"]}}},"UpdateReportCmd":{"type":"object","required":["status"],"properties":{"resolution_note":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/ReportStatus"}}},"UpdateRoleCmd":{"type":"object","properties":{"color":{"type":["string","null"]},"icon_hash":{"type":["string","null"]},"name":{"type":["string","null"]},"permissions":{"type":["array","null"],"items":{"type":"string"}},"position":{"type":["integer","null"],"format":"int64"},"unicode_emoji":{"type":["string","null"]}}},"UpdateSpaceCmd":{"type":"object","properties":{"allow_invite":{"type":["boolean","null"]},"allow_join":{"type":["boolean","null"]},"allow_join_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SpaceAllowJoinLevel"}]},"avatar_url":{"type":["string","null"]},"description":{"type":["string","null"]},"member_must_enable_2fa":{"type":["boolean","null"]},"name":{"type":["string","null"]},"public":{"type":["boolean","null"]},"welcome_message":{"type":["string","null"]}}},"UpdateViewCmd":{"type":"object","properties":{"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"is_shared":{"type":["boolean","null"]},"layout":{"type":["string","null"]},"name":{"type":["string","null"]},"sort_by":{"type":["string","null"]}}},"UploadAttachmentInput":{"type":"object","required":["filename","content_type","data"],"properties":{"content_type":{"type":"string"},"data":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"filename":{"type":"string"}}},"UploadAvatarCmd":{"type":"object","required":["content_type","data_base64"],"properties":{"content_type":{"type":"string"},"data_base64":{"type":"string"}}},"UpsertMemeCmd":{"type":"object","required":["name","content_type","url","size"],"properties":{"content_type":{"type":"string"},"height":{"type":["integer","null"],"format":"int32"},"name":{"type":"string"},"size":{"type":"integer","format":"int64"},"url":{"type":"string"},"width":{"type":["integer","null"],"format":"int32"}}},"UpsertPushCmd":{"type":"object","required":["endpoint","p256dh_key","auth_key","platform"],"properties":{"auth_key":{"type":"string"},"endpoint":{"type":"string"},"p256dh_key":{"type":"string"},"platform":{"$ref":"#/components/schemas/PushPlatform"},"user_agent":{"type":["string","null"]}}},"UpsertWatchOption":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string"}}},"UserMe":{"type":"object","required":["uid","username","display_name","avatar","is_active","is_admin","is_restricted"],"properties":{"avatar":{"type":"string"},"display_name":{"type":"string"},"is_active":{"type":"boolean"},"is_admin":{"type":"boolean"},"is_restricted":{"type":"boolean"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"uid":{"type":"string"},"username":{"type":"string"}}},"UserMini":{"type":"object","required":["id","login"],"properties":{"avatar_url":{"type":["string","null"]},"email":{"type":["string","null"]},"full_name":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"}}},"UserOverwriteView":{"type":"object","required":["channel_id","user_id","allow_mask","deny_mask"],"properties":{"allow_mask":{"type":"integer","format":"int64"},"channel_id":{"type":"string","format":"uuid"},"deny_mask":{"type":"integer","format":"int64"},"user_id":{"type":"string","format":"uuid"}}},"UserPreferences":{"type":"object","required":["user_id","theme_mode","in_app_flags","email_flags","push_flags","email_digest","allow_dms_from","allow_mentions_from","show_online_status","created_at","updated_at"],"properties":{"allow_dms_from":{"$ref":"#/components/schemas/Audience"},"allow_mentions_from":{"$ref":"#/components/schemas/Audience"},"created_at":{"type":"string"},"diff_view_style":{"type":["string","null"]},"email_digest":{"type":"boolean"},"email_flags":{"type":"integer","format":"int32"},"in_app_flags":{"type":"integer","format":"int32"},"mute_until":{"type":["string","null"]},"push_flags":{"type":"integer","format":"int32"},"show_online_status":{"type":"boolean"},"theme_mode":{"type":"string"},"theme_token":{"type":["string","null"]},"theme_version":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"string"},"user_id":{"type":"string","format":"uuid"}}},"UserPublic":{"type":"object","required":["uid","username","display_name","avatar"],"properties":{"avatar":{"type":"string"},"display_name":{"type":"string"},"language":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"uid":{"type":"string"},"username":{"type":"string"}}},"UserSummary":{"type":"object","required":["id","name","login"],"properties":{"email":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"login":{"type":"string"},"name":{"type":"string"}}},"VerifyCodeCmd":{"type":"object","required":["email","purpose","code","temp_key_value"],"properties":{"code":{"type":"string"},"email":{"type":"string"},"purpose":{"type":"string"},"temp_key_value":{"type":"string"},"user_id":{"type":["string","null"]}}},"VerifyCodeResult":{"type":"object","required":["code_row_id"],"properties":{"code_row_id":{"type":"string"}}},"ViewPage":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ViewView"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ViewView":{"type":"object","required":["id","project_id","creator_id","name","filter","sort_by","layout","is_shared","sort_order","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"creator_id":{"type":"string","format":"uuid"},"description":{"type":["string","null"]},"filter":{},"group_by":{"type":["string","null"]},"id":{"type":"string","format":"uuid"},"is_shared":{"type":"boolean"},"layout":{"type":"string"},"name":{"type":"string"},"project_id":{"type":"string","format":"uuid"},"sort_by":{"type":"string"},"sort_order":{"type":"integer","format":"int32"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"WatchView":{"type":"object","required":["id","user_id","mode","created_at"],"properties":{"created_at":{"type":"string"},"id":{"type":"string","format":"uuid"},"issue_id":{"type":["string","null"],"format":"uuid"},"mode":{"type":"string"},"updated_at":{"type":["string","null"]},"user_id":{"type":"string","format":"uuid"}}}}},"tags":[{"name":"auth","description":"Authentication endpoints"},{"name":"issues","description":"Issue tracking (lib/issues)"},{"name":"project","description":"Project lifecycle, members, views, documents, links, favorites, activities."},{"name":"repo","description":"Repository service (lib/repo)"},{"name":"space","description":"Space, membership, roles, invites, bans, channels, channel members and overwrite endpoints."},{"name":"user","description":"User profile, account, sessions and notifications endpoints."}]}
No newline at end of file