diff --git a/typescript/content/index.ts b/typescript/content/index.ts
new file mode 100644
index 0000000..9b163a5
--- /dev/null
+++ b/typescript/content/index.ts
@@ -0,0 +1,373 @@
+// Code generated by protoc-gen-typescript-http. DO NOT EDIT.
+/* eslint-disable camelcase */
+// @ts-nocheck
+
+/** 列表请求参数 */ 
+export type FetchRequest = {
+  /** 页数 */ 
+  page_no?: number;
+  /** 每页记录数 */ 
+  page_size?: number;
+  /** 条件参数,key=val,eg key:category_id=?,vlaue=11 */ 
+  params?: { [key: string]: string };
+};
+
+/** 唯一标识请求参数 */ 
+export type IdentRequest = {
+  /** 唯一ID */ 
+  id?: number;
+  /** 唯一标识 */ 
+  identity?: string;
+};
+
+/** 时序版本号请求参数 */ 
+export type VersionRequest = {
+  /** 时序版本号 */ 
+  version?: number;
+};
+
+/** 搜索请求参数 */ 
+export type SearchRequest = {
+  /** <必传>, 关键词 */ 
+  keyword?: string;
+  /** 页数 */ 
+  page_no?: number;
+  /** 每页记录数 */ 
+  page_size?: number;
+};
+
+/** 标准回执 */ 
+export type StatusReply = {
+  /** 状态码 */ 
+  code?: number;
+  /** 标识码 */ 
+  identity?: string;
+  /** 状态说明 */ 
+  message?: string;
+  /** 响应时间序列 */ 
+  timeseq?: number;
+};
+
+/** 空结构请求 */ 
+export type Empty = {
+};
+
+/** 分类 */ 
+export type CategoryItem = {
+  id?: number;
+  /** 唯一标识 */ 
+  identity?: string;
+  /** 为空表示顶级分类 */ 
+  parent_id?: number;
+  /** 标题 */ 
+  title?: string;
+  /** 封面图片 */ 
+  cover_path?: string;
+  /** 简介 */ 
+  intro?: string;
+  /** 创建时间 */ 
+  createdAt?: string;
+  /** 更新时间 */ 
+  updatedAt?: string;
+  /** 子集 */ 
+  child?: CategoryItem[];
+};
+
+/** 标签 */ 
+export type TagsItem = {
+  id?: number;
+  /** 唯一标识 */ 
+  identity?: string;
+  /** 标题 */ 
+  title?: string;
+  /** 封面图片 */ 
+  cover_path?: string;
+  /** 简介 */ 
+  intro?: string;
+  /** 创建时间 */ 
+  createdAt?: string;
+};
+
+/** 附件 */ 
+export type AccessoryItem = {
+  /** 唯一标识 */ 
+  identity?: string;
+  /** 附件标题 */ 
+  title?: string;
+  /** 附件文件路径 */ 
+  filePath?: string;
+  /** 创建时间 */ 
+  createdAt?: string;
+};
+
+/** 分类列表 */ 
+export type CategoryListReply = {
+  /** 数据 */ 
+  data?: CategoryItem[];
+  /** 总数 */ 
+  count?: number;
+};
+
+/** 添加分类响应 */ 
+export type AddCategoryResponse = {
+  /** 添加分类响应唯一标识 */ 
+  identity?: string;
+};
+
+/** 添加分类请求 */ 
+export type AddCategoryRequest = {
+  /** 添加分类请求唯一码 */ 
+  identity?: string;
+  /** 为空表示顶级分类 */ 
+  parent_id?: number;
+  /** 标题 */ 
+  title?: string;
+  /** 封面图片 */ 
+  cover_path?: string;
+  /** 简介 */ 
+  intro?: string;
+  /** 创建时间 */ 
+  created_at?: string;
+  /** 更新时间 */ 
+  updated_at?: string;
+  /** 子集 */ 
+  data?: CategoryItem[];
+};
+
+/** 修改分类请求 */ 
+export type ModifyCategoryRequest = {
+  /** 修改分类请求唯一标识 */ 
+  identity?: string;
+  /** 为空表示顶级分类 */ 
+  parent_id?: number;
+  /** 标题 */ 
+  title?: string;
+  /** 封面图片 */ 
+  cover_path?: string;
+  /** 简介 */ 
+  intro?: string;
+  /** 创建时间 */ 
+  created_at?: string;
+  /** 更新时间 */ 
+  updated_at?: string;
+  /** 子集 */ 
+  data?: CategoryItem[];
+};
+
+/** 删除分类请求 */ 
+export type DeleteCategoryRequest = {
+  /** 删除分类请求唯一标识 */ 
+  identity?: string;
+};
+
+/** CMS - 分类 */ 
+export interface Category {
+}
+
+type RequestType = {
+  path: string;
+  method: string;
+  body: string | null;
+};
+
+type RequestHandler = (request: RequestType, meta: { service: string, method: string }) => Promise<unknown>;
+
+export function createCategoryClient(
+  handler: RequestHandler
+): Category {
+  return {
+  };
+}
+/** 删除评论 */ 
+export type DeleteCommentRequest = {
+  /** 需要删除的评论的唯一标识 */ 
+  identity?: string;
+  /** 文章唯一标识 */ 
+  post_identity?: string;
+};
+
+/** 根据KEY获取内容请求 */ 
+export type GetPostByKeyRequest = {
+  /** <必传> 内容页的key */ 
+  key?: string;
+};
+
+/** 文章 */ 
+export type PostItem = {
+  /** 文章唯一标识 */ 
+  identity?: string;
+  /** 作者ID */ 
+  owner_id?: number;
+  /** 作者唯一标识 */ 
+  owner_identity?: string;
+  /** <必传>,所属分类Identity 列表 */ 
+  category_identity_array?: string[];
+  /** 标签集Identity 列表 */ 
+  tags_identity_array?: string[];
+  /** <必传>,标题 */ 
+  title?: string;
+  /** 封面 */ 
+  cover_path?: string;
+  /** 作者 */ 
+  author?: string;
+  author_identity?: string;
+  /** <必传>,内容 */ 
+  content?: string;
+  /** 跳转目标地址 */ 
+  target_url?: string;
+  /** 文章来源地址 */ 
+  source_url?: string;
+  /** 点击量 */ 
+  hits?: number;
+  /** 附件Identity 列表 */ 
+  accessory_identity_array?: string[];
+  /** 是否有附件,默认没有 */ 
+  has_accessory?: boolean;
+  /** 创建时间 */ 
+  created_at?: string;
+  /** 更新时间 */ 
+  updated_at?: string;
+  /** 简介 */ 
+  description?: string;
+  /** 点赞量 */ 
+  like_hits?: number;
+  /** 点踩量 */ 
+  unlike_hits?: number;
+  /** 评论量 */ 
+  comment_hits?: number;
+  /** 用户自定义文章类型 */ 
+  post_type?: number;
+  /** 权限 */ 
+  rights?: string;
+  /** <必传>,文章key */ 
+  key?: string;
+  /** 分类数据 */ 
+  category_data?: CategoryItem[];
+  /** 标签数据 */ 
+  tags_data?: TagsItem[];
+  /** 附件数据 */ 
+  accessory_data?: AccessoryItem[];
+};
+
+/** 文章列表请求 */ 
+export type PostListRequest = {
+  /** 页码,默认第一页 */ 
+  page?: number;
+  /** 单页显示数量,默认10,最多50 */ 
+  size?: number;
+  /** 发布者唯一标识,可选 */ 
+  author_identity?: string;
+  /** 文章类型,可选 */ 
+  category_identity?: string;
+  /** 根据文章名称模糊查找 */ 
+  keyword?: string;
+  /** 根据用户自定义文章类型过滤,可选,默认0,全部查找 */ 
+  type?: number;
+};
+
+/** 文章列表回复 */ 
+export type PostListReply = {
+  /** 数据 */ 
+  data?: PostItem[];
+  /** 总数量 */ 
+  count?: number;
+};
+
+/** 获取文章详情请求 */ 
+export type GetPostRequest = {
+  /** 必传唯一标识 */ 
+  identity?: string;
+  /** 必传作者唯一标识 */ 
+  author_identity?: string;
+};
+
+/** 评论 */ 
+export type CommentItem = {
+  /** 评论唯一标识 */ 
+  identity?: string;
+  /** 文章唯一标识 */ 
+  post_identity?: string;
+  /** 为空表示顶级评论 */ 
+  parent_id?: number;
+  /** 评论内容 */ 
+  content?: string;
+  /** 回复者唯一 标识 */ 
+  reply_identity?: string;
+  /** 创建时间 */ 
+  created_at?: string;
+  /** 更新时间 */ 
+  updated_at?: string;
+  /** 回复列表 */ 
+  list?: CommentItem[];
+  /** 点赞量 */ 
+  like_hits?: number;
+  /** 点踩量 */ 
+  unlike_hits?: number;
+  /** 评论量 */ 
+  comment_hits?: number;
+};
+
+/** 评论列表 */ 
+export type CommentListRequest = {
+  /** 必填 评论唯一标识 */ 
+  post_identity?: string;
+  /** 页码,默认第一页 */ 
+  page?: number;
+  /** 单页显示数量,默认10,最多50 */ 
+  size?: number;
+};
+
+/** 评论列表回复 */ 
+export type CommentListResponse = {
+  /** 数据 */ 
+  list?: CommentItem[];
+  /** 总数量 */ 
+  count?: number;
+};
+
+/** 文章点赞处理请求 */ 
+export type PostOpIdentityRequest = {
+  /** 必传 文章唯一标识 */ 
+  post_identity?: string;
+  /** 必传 操作者唯一标识 */ 
+  op_identity?: string;
+};
+
+/** 评论点赞处理请求 */ 
+export type CommentOpIdentityRequest = {
+  /** 必填 评论唯一标识 */ 
+  comment_identity?: string;
+  /** 必填 操作者唯一标识 */ 
+  op_identity?: string;
+};
+
+/** 正文 */ 
+export interface Post {
+}
+
+export function createPostClient(
+  handler: RequestHandler
+): Post {
+  return {
+  };
+}
+/** 标签列表 */ 
+export type TagsListReply = {
+  /** 数据 */ 
+  data?: TagsItem[];
+  /** 总数 */ 
+  count?: number;
+};
+
+/** 标签 */ 
+export interface Tags {
+}
+
+export function createTagsClient(
+  handler: RequestHandler
+): Tags {
+  return {
+  };
+}
+
+// @@protoc_insertion_point(typescript-http-eof)