豫言 / 豫言操作系统授权服务适配 @ 0.3.0

以云工 SERVICE 绑定提供授权服务调用与流式回应读取。

源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。

说明.汉语.md

# 授权服务云工适配

使用当前 Worker Request 和宿主许可中的 `SERVICE` 绑定。标头逐名过滤,转发正文时保留原始流;返回的原生 Response 只通过私有临时句柄交给豫言应用,业务路由仍由应用决定。

0.3.0 新增带正文请求与增量读取,全部用豫言写在云工宿主库之上,不增加宿主 JavaScript:

- 请求:正文经字节句柄交给 `Request`(不经 JSON 转义),标头由 `Headers` 构造,`redirect: manual`,中断信号用 `AbortSignal.timeout`;发请求用服务绑定的 `fetch` 取得 Promise 句柄后经 `云工请求候回应安全` 等待,失败与期满成为返回值。
- 读取状态表:适配在本次事件的 Wasm 实例内保存“响应柄→读取状态”(读取器、解码器、余块、信号、结局、待出文字),事件结束随实例消失。`请求授权服务` 与 `请求授权服务带正文` 签发的柄都登记入表;表中没有的柄一律拒绝。
- 增量读取:首次读取时才创建读取器;有信号则经恒等 `TransformStream` 的 `pipeThrough(…, {signal})` 接管正文流,期满时读取失败且对上游流执行取消;无正文的响应直接进入已读尽。每次读取一段原始字节(上游块过大时用 `subarray` 留余块),交给宿主的流式 `TextDecoder`(BOM 去掉,非法序列成 U+FFFD,跨段拼接),再按码点边界切出不超过最大字节的文字,余文留作待出文字。
- 有限整读:先看 `Content-Length`,再循环读取累计,超限即取消;结果以文字段拼接。
- 取消:经读取器(或尚无读取器时经正文流)`cancel`,幂等。
- 句柄卫生:每块的字节句柄、请求期的 `Headers`、`Request`、正文句柄都及时释放,终态时释放读取器、解码器、信号句柄;同一事件内可连续处理上千次请求。

一致性验证见 `一致性验证/`(含试验应用、真实 Wasm 加 Node 测试,及在私有暂存里复跑的说明)。已知平台前提:`pipeThrough` 的 `signal` 选项与 `AbortSignal.timeout` 需为宿主运行时所支持(Node 与 workerd 均支持);宿主的事件时限(`创建豫言实例` 默认 30 秒)短于所给超时时,以先到者为准。

说明.文言.md

# 授权服务云工适配

依当前 Worker Request 与宿主 `SERVICE` 许可。白头逐名核之,正文若转则守原流;原生 Response 惟以暂柄授豫言应用,业务之径仍由应用定。

〇点三增带正文之请与渐读,悉以豫言书于云工宿主库之上,不增宿主 JavaScript:

- 请:正文以字节柄授 `Request`(不经 JSON 转义),头以 `Headers` 造,`redirect: manual`,中断之信号用 `AbortSignal.timeout`;发请用服务绑定之 `fetch`,得 Promise 柄而经 `云工请求候回应安全` 候之,败与期满皆成返值。
- 读势之表:适配于本事 Wasm 实例内存“答柄→读势”(读器、解码器、余块、信号、结局、待出之文),事毕随实例而消。`请求授权服务` 与 `请求授权服务带正文` 所发之柄皆入表;表中所无之柄一概拒之。
- 渐读:初读乃创读器;有信号则经恒等 `TransformStream` 之 `pipeThrough(…, {signal})` 接管正文流,期满则读败而对上游流行 cancel;无正文之答径入已读尽。每读一段原字节(上游块过大则以 `subarray` 留余块),授宿主流式 `TextDecoder`(去 BOM,坏序为 U+FFFD,跨段相衔),复依码点之界裁出不逾最大字节之文,余文留为待出之文。
- 有限整读:先观 `Content-Length`,乃循环读而累计,逾限即止;果以文段拼之。
- 止:经读器(无读器时经正文流)`cancel`,幂等。
- 句柄之洁:每块之字节柄、请时之 `Headers`、`Request`、正文柄皆及时释之,终态则释读器、解码器、信号之柄;同一事内可连处千余次请。

一致之验见 `一致性验证/`(含试验应用、真 Wasm 加 Node 测试,及于私有暂存复行之说明)。已知平台之前提:`pipeThrough` 之 `signal` 选项与 `AbortSignal.timeout` 须为宿主运行时所支(Node 与 workerd 皆支);宿主之事限(`创建豫言实例` 默认三十秒)短于所给时限者,以先至者为准。