cnb-mcp-server
Version:
MCP Server for the cnb API, enabling file operations, repository management, search functionality, and more.
171 lines (170 loc) • 5.03 kB
JavaScript
/**
* CNB API 类型定义
*/
import { z } from 'zod';
// 用户类型定义
export const UserInfoSchema = z.object({
id: z.string(),
username: z.string(),
nickname: z.string().optional(),
avatar: z.string().optional(),
email: z.string().optional(),
type: z.string().optional(),
verified: z.number().optional(),
verified_expire_in: z.string().optional(),
freeze: z.boolean().optional(),
is_follow: z.boolean().optional(),
created_at: z.string().optional(),
updated_at: z.string().optional()
});
// 签名类型定义
export const SignatureSchema = z.object({
name: z.string(),
email: z.string(),
date: z.string().optional()
});
// Commit类型定义
export const CommitObjectTreeSchema = z.object({
sha: z.string()
});
export const CommitObjectVerificationSchema = z.object({
verified: z.boolean(),
signature: z.string().optional(),
payload: z.string().optional(),
resone: z.string().optional()
});
export const CommitObjectSchema = z.object({
author: SignatureSchema,
committer: SignatureSchema,
message: z.string(),
tree: CommitObjectTreeSchema,
comment_count: z.number().optional(),
verification: CommitObjectVerificationSchema.optional()
});
export const CommitParentSchema = z.object({
sha: z.string()
});
export const CommitSchema = z.object({
sha: z.string(),
commit: CommitObjectSchema,
author: UserInfoSchema.optional(),
committer: UserInfoSchema.optional(),
parents: z.array(CommitParentSchema).optional()
});
// 分支类型定义
export const BranchSchema = z.object({
name: z.string(),
commit: z.object({
sha: z.string()
}),
protected: z.boolean().optional()
});
// 仓库类型定义
export const RepositorySchema = z.object({
id: z.string(),
name: z.string(),
full_name: z.string(),
owner: UserInfoSchema,
private: z.boolean().optional(),
description: z.string().optional(),
fork: z.boolean().optional(),
default_branch: z.string().optional(),
visibility: z.string().optional(),
created_at: z.string().optional(),
updated_at: z.string().optional(),
pushed_at: z.string().optional(),
star_count: z.number().optional(),
fork_count: z.number().optional(),
has_issues: z.boolean().optional(),
has_wiki: z.boolean().optional(),
has_downloads: z.boolean().optional()
});
// 文件内容类型定义
export const ContentSchema = z.object({
type: z.string(),
encoding: z.string().optional(),
size: z.number().optional(),
name: z.string(),
path: z.string(),
content: z.string().optional(),
sha: z.string().optional(),
entries: z.array(z.object({
name: z.string(),
path: z.string(),
type: z.string(),
size: z.number().optional(),
sha: z.string()
})).optional()
});
// 文件推送内容类型定义
export const FileContentSchema = z.object({
path: z.string(),
content: z.string(),
encoding: z.enum(['utf-8', 'base64']).optional().default('utf-8'),
mode: z.string().optional().default('100644')
});
// Issue类型定义
export const LabelSchema = z.object({
id: z.string(),
name: z.string(),
color: z.string().optional(),
description: z.string().optional()
});
export const IssueSchema = z.object({
id: z.string(),
number: z.number(),
title: z.string(),
body: z.string().optional(),
author: UserInfoSchema,
assignees: z.array(UserInfoSchema).optional(),
labels: z.array(LabelSchema).optional(),
state: z.string(),
created_at: z.string(),
updated_at: z.string().optional(),
closed_at: z.string().optional(),
comment_count: z.number().optional()
});
// Pull Request类型定义
export const PullRequestSchema = z.object({
id: z.string(),
number: z.number(),
title: z.string(),
body: z.string().optional(),
author: UserInfoSchema,
assignees: z.array(UserInfoSchema).optional(),
labels: z.array(LabelSchema).optional(),
state: z.string(),
created_at: z.string(),
updated_at: z.string().optional(),
closed_at: z.string().optional(),
merged_at: z.string().optional(),
comment_count: z.number().optional(),
base: z.object({
ref: z.string(),
sha: z.string(),
repo: RepositorySchema
}),
head: z.object({
ref: z.string(),
sha: z.string(),
repo: RepositorySchema
}),
mergeable: z.boolean().optional(),
merged: z.boolean().optional(),
merge_commit_sha: z.string().optional()
});
// 组织类型定义
export const GroupSchema = z.object({
id: z.number(),
name: z.string(),
path: z.string(),
access_role: z.string(),
description: z.string().optional(),
email: z.string().optional(),
freeze: z.boolean().optional(),
remark: z.string().optional(),
site: z.string().optional(),
wechat_mp: z.string().optional(),
created_at: z.string().optional(),
updated_at: z.string().optional()
});