@ appport/ 服务器
服务器侧协议运行时间及其网络绑定.
import { createServer } from "@appport/server";
import { serve } from "@appport/server/node";
const server = createServer({
application,
authenticate: ({ sessionId }) => sessions.resolve(sessionId)
});
const running = await serve({ server, port: 4400, cors: { origins: "*" } });
一个完全最小的提供者不需要其他的客户端连接: serve 广告,在清单中等等
/.well-known/appport,其实际结合的运输(http 时间 /appport,以及 websocket 时间 /appport/ws 除非你通过
websocket: false)作为同源路径. 它从不宣传它没有服务的终点。 过 advertise: false 广告
没什么,或者 transports 改为 createApplication 以广告方式发布其他信息(例如,在代理服务器后面有一个公共URL)。 如果一个
应用程序不发布运输广告, AppPort.discover 失败 INVALID_PROTOCOL 并说如此.
serve 在一个能力服务器上曝光:
| 路线 | 目的 |
|---|---|
POST /appport | 请求和 NDJSON 流 |
GET /appport/events | 作为服务器事件的事件 |
GET /appport/manifest | 显示 |
GET /.well-known/appport | 发现 |
WS /appport/ws | 绑定 WebSocket |
WebSocket端点是无依赖的 RFC 6455 执行:框架, 破碎、乒乓球和相近,每条信息有一个AppPort信封.
AppPortConnection 是WebSocket, IPC 和进程内使用的双倍半
运输。 它拥有订阅和流记,所以不订阅发行
资源和取消到达处理器.
对于边缘运行时间, createFetchHandler(binding) 返回标准
(Request) => Promise<Response>。 。 。 .
authenticate 解决来自运输提供的证书的身份。 应用端口
不认证;它代表由此产生的身份,并授权每个
不论是哪个运输公司交付的.
浏览器边界模式
直接浏览器模式
browser origin
-> @appport/transport-http
-> AppPort HTTP server with CORS/origin policy
-> capability
配置 HTTP 绑定 cors 财务报告和审定财务报表 allowedOrigins 当浏览器说话时
直接到 Apport 服务器.
信任的边界模式
browser
-> same-origin AppPort server
-> server-side AppPort client / transport
-> remote capability
信任的边界认证呼叫者, 授权能力, 应用 源代码政策,并使用服务器侧面证书进行下游 AppPort 调用. 浏览器从未收到这些可信任的证书.
服务器模式
node/server
-> @appport/transport-http
-> remote AppPort capability
在每个模式中,CORS会留在HTTP边界. 它不属于 AppPort 协议.
公开发现(1.1.0)
createServer({ application, publication }) 选择公开介绍 /appport/public 广告
/.well-known/appport缺席、残疾、政策不当或不一致均不公布。 名单仍按程序公布 所以
"没有发表"不是"秘密". 发现不是授权.
该政策有这种形式(第6条)PublicationPolicy 内 @appport/protocol; 除非 public 没错 true,且仅限
所列出的能力:
publication: {
public: true,
applicationDescription: false, // optional: include the manifest's application description
capabilities: [{ name: "tasks.add", version: 1, purpose: true }] // purpose: include that capability's description
}
一个消费者的 AppPort.discoverApplication 结果报告 notPublishedCount:你没有列出的每一种明显能力,包括:
内置 appport.manifest 财务报告和审定财务报表 appport.ping,所以一个提供者 发布三个能力报告之一 4.
正在认证 permissionAuthorizer
permissionAuthorizer() 会议决定 permissions,但仅针对已识别的来电者:没有 principal
被作为未经认证的 UNAUTHORIZED ("需要认证"),不是 FORBIDDEN即使它带有权限.
两个都从那回来 authenticate数字 : { principal, session: { ..., principal, permissions } }被识别但缺乏
需要的许可获得 FORBIDDEN。 。 。 .