Fediverse 增强提案

我们支持的 FEP

FEP(Fediverse 增强提案)是 ActivityPub 应用处理特定事务时共同遵守的约定。这里列出我们支持的每一项、支持到什么程度,以及完整提案的链接。

我们计划将来把 Welley 开源。发布日期和许可证目前都还没有公布。

  • FEP-044f

    尊重同意的引用帖子

    作者可以决定自己的帖子能否被跨服务器引用。

    Welley 支持引用请求、授权检查、接受、拒绝和撤销。

    • Welley 发送和接收 QuoteRequest 活动,并处理接受或拒绝请求。
    • 引用授权戳让接收方服务器可以核实作者已经同意。
    • 撤销会收回作者之前对某个引用给出的许可。

    其他服务器需要支持这套同意协议,才能以同样方式运作。普通链接或较旧的引用扩展,并不能表明作者已同意。

  • FEP-1311

    媒体附件

    Welley 发送和接收媒体附件,也能读取同一文件的多个版本。

    Welley 支持附件交换和读取变体。对某些建议和输出形式的支持范围较窄。

    • Welley 接受单个媒体 URL,或带类型的媒体链接数组。
    • 它可以使用远程附件的不同尺寸变体和预览图。
    • 发送多变体 URL 数组需要一个配置标志,默认是关闭的。

    Welley 没有实现完整的提案。尤其是不处理 digestMultibase,并且默认发送单个主 URL 以保证兼容。

  • FEP-1b12

    群组联邦

    公开的群组频道可以和论坛式的 ActivityPub 社区互相交换帖子和评论。

    公开频道支持标准的 Group actor 和 Announce 流程。

    • 公开频道使用标准的 Group actor。
    • 频道会通过 Announce 活动分享已接受的帖子,并保留原作者。
    • Welley 会接收群组发出的 Announce,并把内容放进对应的频道。

    私密的 Welley 社区会用到 Welley 额外的属性。并不是所有群组设置、成员规则和管理操作都能在其他软件中沿用。

    分类视图下的论坛,置顶的欢迎主题排在最前。分类和标签筛选以及排序控件在它上方。
  • FEP-3b86

    Activity Intents

    远程互动链接可以记住对方想做什么。

    Welley 支持针对具体操作的 WebFinger 链接和授权重定向。

    • WebFinger 会为每个支持的操作提供单独的模板,比如 Follow、Like、Announce 和 Create。
    • 群组发现也包括 Join。
    • 互动端点会把对方带到 Welley 中对应的操作。

    远程应用必须使用这些 intent 链接。Welley 自己的 Vote intent 链接属于扩展,不是标准的 FEP 操作。

  • FEP-5feb

    Actor 的搜索索引授权

    资料所有者可以决定自己的公开帖子能否出现在搜索索引中。

    Welley 会发布每个账号的授权状态,导入其他服务器的授权状态,并据此限制本地文本搜索。

    • Welley 会根据资料的隐私设置发布 actor 的 indexable 属性。
    • 其他服务器上的账号必须明确允许被索引,他们的帖子才会出现在普通文本搜索中。
    • 浏览话题标签时,仍然可能找到不可被索引的作者发布的帖子。

    这个属性是请其他服务器尊重授权。它不会阻止别人访问公开帖子,也管不到独立的搜索引擎。

    其中一部分关于搜索、发现以及谁能看到你资料内容的设置。导航和账号信息已裁掉。
  • FEP-7458

    使用 replies 集合

    服务器可以直接从原帖获取回复,不用等回复被投递过来。

    Welley 会发布 replies 集合,也会获取远程的 replies 集合。

    • Welley 会为帖子发布分页的 replies 集合。
    • Welley 会获取远程的回复集合,并逐页读取。
    • 当有人找到一个远程讨论时,Welley 可以在后台补全较早的上下文。

    隐私、管理、获取限制,以及对方服务器是否可以访问,仍然会产生影响。集合不保证能立刻得到每个讨论的完整副本。

  • FEP-7628

    迁移 actor

    账号可以在服务器之间迁移,关注者会转到新账号。

    Welley 支持 actor 的迁入和迁出、别名、重定向以及关注者转移。

    • Welley 会接收 Move 活动,并先检查目标别名,再把本地关注者转过去。
    • 账号迁走时,Welley 会发布目标地址,并向其他服务器上的关注者发送 Move 活动。
    • Welley 会向目标账号发送 Follow,并移除旧的关注。

    Welley 会设置 movedTo,旧账号仍然可以访问。它不会完全停止向已迁移的远程收件箱投递。帖子需要另外导出或导入。

    迁移页面有三个步骤,还有一个空白的账号别名表单。使用的是示例社区内容。
  • FEP-7888

    说明 context 属性

    Welley 用 context 来关联活动讨论,也用它获取一部分远程讨论集合。

    Welley 支持活动的 context 链接,以及部分远程 context 集合流程。

    • 关联到活动的帖子,可以把 Event URI 作为自己的 context。
    • Welley 可以跟进远程的 context 集合,包括通过指向该集合的中间文档来获取。

    Welley 不会为每个讨论串都发布通用的 context 集合。它也不支持完整的基于 context 的受众路由或对话归属。

  • FEP-844e

    能力发现

    其他软件可以从 Welley 的 application actor 读取一份结构化的支持清单。

    application actor 会发布 Welley 的能力,并且有测试覆盖。

    • application actor 会发布一个 implements 数组,里面有能力标识符和名称。
    • 响应中包含该属性的 JSON-LD 映射。
    • 目前,Welley 公布了十五个 FEP 标识符。

    Welley 目前还不会读取其他服务器的能力清单来协商功能。

  • FEP-8a8e

    使用 Event 对象类型的通用做法

    活动使用共用的 ActivityPub 字段来表示时间、地点、说明和出席情况。

    Welley 支持核心的 Event 交换和出席流程,以及一些活动扩展字段。

    • Event 包含标题、开始时间、结束时间、时区、地点和参与者集合。
    • Create 和 Update 用来发送活动的变更。
    • Join 和 Leave 在 Welley 服务器之间传递出席情况的变化。

    提案的最新版本还要求有组织者,并对地点和人数上限增加了更多规则。Welley 没有实现最新版本的全部内容。

    受邀的人可以回答“是”“否”或“也许”。组织者能看到谁会去。
  • FEP-8fcf

    跨服务器同步关注者集合

    服务器可以发现彼此关注者列表的差异并修复。

    Welley 支持发出摘要、检查收到的摘要、部分集合端点和修复任务。

    • 当投递请求需要同步关注者时,Welley 会添加 Collection-Synchronization 标头。
    • 接收方服务器会比对摘要。如果列表不一致,它会获取该服务器对应的关注者集合。
    • Welley 会在收件箱请求之外,单独修复过期的关注关系。

    管理员可以关闭同步。对方服务器必须实现同样的协议。

  • FEP-9098

    自定义表情

    自定义表情可以随帖子、资料和回应一起传递。

    Welley 支持自定义表情标签,并为支持的联合内容导入表情。

    • 发出的标签会把每个表情的短代码链接到它的图片。
    • Welley 会读取其他服务器的 Emoji 标签,并把每个短代码按来源域名分别存放。
    • Welley 下载远程表情时,同样会遵守媒体限制。

    媒体屏蔽可能会让表情图片无法加载。其他服务器上的应用可以改为显示短代码。

    自定义表情编辑器显示文件要求、短代码、分类,以及这个表情是否显示在选择器中。
  • FEP-9967

    投票

    你可以和兼容的服务器互相传递投票和选票。

    Welley 支持发送和接收单选和多选投票、选票以及结果更新。

    • 投票使用 Question 对象,选项放在 oneOf 或 anyOf 中。
    • Welley 会处理其他服务器发来的选票,并发出投票结果。
    • 每个联合投票都带有截止时间、是否已关闭以及投票人数。

    对方的应用必须支持这种投票格式。它的界面可能会显示不同的控件或结果细节。

    动态可以显示带格式的文字、读者点一下就能展开的行内剧透,以及读者可以直接作答的投票。
  • FEP-b2b8

    长文本

    长帖子可以使用 Article 对象,包含标题、全文和简短预览。

    Welley 支持文章内容、预览、源文元数据和部分富文本标记。

    • Welley 会发送和接收 Article 对象,而不是把每个帖子都当作简短的 Note。
    • 发出的文章可以包含头图、摘要和 Markdown 源文。
    • Welley 会保留部分文章标记,包括行内媒体和注音标注。

    如果一篇文章列出了多位作者,Welley 会取第一位。标题会变成粗体文字,所以文章的部分结构会丢失。

  • FEP-c0e0

    表情回应

    表情回应可以跨服务器使用。

    Welley 支持 Unicode 和自定义表情回应,包括撤销和投递。

    • Welley 会为支持的帖子发送和接收 EmojiReact 活动。
    • Undo 可以撤销一条远程回应。
    • 自定义表情回应会带上它的 emoji 标签和来源域名。

    其他软件支持的回应可能不同。Welley 不提供可选的 emojiReactions 集合。

    成员可以用表情回应论坛主题。每个表情都有自己的按钮和计数。
  • FEP-c16b

    MFM 函数格式

    Misskey 的部分模糊标记可以显示为行内的隐藏内容。

    Welley 对收到的帖子只支持模糊格式。

    • Welley 能识别 Misskey Markdown 源文中的模糊片段。
    • Welley 会把支持的 MFM 模糊类和模糊属性转换成安全的隐藏内容。

    Welley 没有实现完整的 MFM 函数集,也不会声明支持 htmlMfm。其他 MFM 效果可能会丢失格式。

    动态可以显示带格式的文字、读者点一下就能展开的行内剧透,以及读者可以直接作答的投票。
  • FEP-d556

    用 WebFinger 发现服务器级 actor

    针对服务器的 WebFinger 查询可以返回它的 application actor。

    Welley 支持提案中 Mastodon 风格的 self 链接发现方式。它没有为此列出明确的 FEP 标识符。

    • 用域名或配置的服务器 URL 查询,会返回指向实例 actor 的 self 链接。
    • 两种形式会解析到同一个 actor。

    查找时会与配置的来源文本完全匹配,不会对末尾的斜杠做规范化处理。它不会发布推荐的 Service 关系,也不支持关系过滤。

  • FEP-e232

    Object Links

    引用帖子会带有指向被引用帖子的结构化链接。

    Welley 只用 Object Links 来发布和导入引用。

    • Welley 会在发出的引用中添加一个带有 ActivityPub 引用媒体类型的 Link 标签。
    • Welley 能识别收到的帖子中的同样链接形式,包括没有名称的链接。

    这只涵盖引用链接,并不涵盖所有可能的 Object Links 媒体类型。

  • FEP-efda

    可关注的对象

    你可以关注一个帖子,并收到它讨论中后续的新内容。

    Follow(帖子)和 Undo 在两个方向上都能用,并且有测试覆盖。

    • Welley 发送 Follow 时,会把帖子的 URI 作为它的对象。
    • 收到的帖子关注和 Undo 活动会更新帖子订阅。
    • 关注帖子和关注它的作者是两回事。

    FEP 的最新版本用关注者集合来发现你可以关注的对象。Welley 的帖子不提供这个集合,也没有通用的发现算法。在 Welley 中,这个功能仍沿用旧名称“已关注的帖子”。

  • FEP-f1d5

    Fediverse 软件中的 NodeInfo

    其他服务器可以通过 NodeInfo 了解 Welley 的软件和协议信息。

    Welley 支持 NodeInfo 发现和 2.0 响应。

    • 公开的发现端点会链接到 NodeInfo 2.0 文档。
    • 文档中列出了软件版本、ActivityPub 支持情况和 FASP 基础 URL。

    目前,响应中的使用量和注册状态是固定值,不要用它来获取服务器的实时统计。也没有 2.1 路由。

  • FEP-fe34

    基于来源的安全模型

    来源检查有助于防止一台服务器冒称属于另一台服务器的内容或权限。

    Welley 有多项基于来源的安全检查,并且有测试覆盖。

    • Welley 会比较 URI 的协议、主机和实际端口。
    • 当对象的来源与 actor 的来源不一致时,收件箱会拒绝某些活动。
    • 远程获取、引用、集合和在线状态的路径会增加更多来源检查。

    这只是安全模型的一部分。它不提供 Object Integrity Proofs。