LogoMultiPost

类型定义

发布内容的基础数据

首先我们定义了一系列类型,作为扩展发布内容的通信基础。

当你需要发布内容的时候,需要组织一个 SyncData 类型的数据,然后调用 funcPublish 函数来进行发布。

export interface SyncData {
  platforms: SyncDataPlatform[];
  isAutoPublish: boolean;
  data: DynamicData | ArticleData | VideoData;
}
 
export interface SyncDataPlatform {
  name: string;
  injectUrl: string;
  extraConfig:
    | {
        customInjectUrls?: string[]; // Beta 功能,用于自定义注入 URL
      }
    | unknown;
}

发布数据的组织

发布数据需要根据平台类型来组织,例如动态发布、文章发布、视频发布等。

例如当你要发布动态的时候,需要组织一个 DynamicData 类型的数据到 SyncDatadata 字段中。

// DynamicData 是动态发布的数据,用于组织动态发布的数据
export interface DynamicData {
  title: string; // 标题
  content: string; // 内容
  images: FileData[]; // 图片
  videos: FileData[]; // 视频,该字段目前仅用于某些允许同时发布图片和视频的平台,例如 Instagram、 X 等
}
 
// ArticleData 是文章发布的数据,用于组织文章发布的数据
// 在发布的时候根据平台需要,使用 HTML 或者 Markdown 格式内容进行发布处理
export interface ArticleData {
  title: string; // 标题
  content: string; // 内容 HTML
  digest: string; // 摘要
  cover: FileData; // 封面
  images: FileData[]; // 图片
  videos: FileData[]; // 视频
  fileDatas: FileData[]; // 文件
  originContent?: string; // 原始内容 HTML
  markdownContent?: string; // 转换后的 markdown 内容
  markdownOriginContent?: string; // 原始 markdown 内容
}
 
// VideoData 是视频发布的数据,用于组织视频发布的数据
export interface VideoData {
  title: string; // 标题
  content: string; // 内容 HTML
  video: FileData; // 视频
}
 
// FileData 是文件数据,用于组织文件数据
export interface FileData {
  name: string; // 文件名
  url: string; // 文件链接,一般为 blob 链接,扩展的脚本允许从任意 blob 链接中下载文件
  type: string; // 文件类型
  size: number; // 文件大小
  originUrl?: string; // 文件原始链接,一般用于存储 https 来源的文件原 Url
}

平台信息

当你组织 SyncData 数据的时候,需要获取基本的平台信息,例如平台名称、注入的 Url等。

为了便于管理,我们定义了一个 PlatformInfo 类型的数据,用于组织平台信息。

// PlatformInfo 是平台信息,用于组织平台信息
export interface PlatformInfo {
  type: 'DYNAMIC' | 'VIDEO' | 'ARTICLE'; // 平台类型
  name: string; // 平台名称
  homeUrl: string; // 平台首页
  faviconUrl?: string; // 平台图标
  iconifyIcon?: string; // 平台图标
  platformName: string; // 平台名称
  username?: string; // 用户名
  userAvatarUrl?: string; // 用户头像
  injectUrl: string; // 平台发布页面
  injectFunction: (data: SyncData) => Promise<void>; // 平台发布函数
  tags?: string[]; // 平台标签
  accountKey: string; // 平台账号标识
  accountInfo?: AccountInfo; // 平台账号信息
}
 
// AccountInfo 是账号信息,用于组织账号信息
export interface AccountInfo {
  provider: string; // 账号提供商
  accountId: string; // 账号 ID
  username: string; // 账号名称
  description?: string; // 账号描述
  profileUrl?: string; // 账号链接
  avatarUrl?: string; // 账号头像
  extraData: unknown; // 账号额外数据
}

标签页管理

标签页管理是扩展的另一个重要功能,用于管理发布过程中创建的标签页。

我们定义了一个 TabManagerMessage 类型的数据,用于组织标签页管理的数据。

export interface TabManagerMessage {
  syncData: SyncData;
  tabs: {
    tab: chrome.tabs.Tab;
    platformInfo: SyncDataPlatform;
  }[];
}

扩展接口

扩展接口是扩展的另一个重要功能,我们允许开发者通过扩展接口来调用扩展的发布内容功能。

我们定义了一个 ExtensionExternalRequestExtensionExternalResponse 类型的数据,用于组织扩展接口的数据。

更多信息参考 API 文档

export type ExtensionExternalRequest<T> = {
  type: 'request';
  traceId: string;
  action: string;
  data: T;
};
 
export interface ExtensionExternalResponse<T> {
  type: 'response';
  traceId: string;
  action: string;
  code: number;
  message: string;
  data: T;
}

On this page