Files
RuoYi-Vue3-FastAPI/ruoyi-fastapi-backend/tests/plugins/integration/network_bundle.html
T
insistence 4bd83bc7cd feat: 支持 v2 插件、独立前端和签名制品发布 (#130)
* feat: 支持 v2 插件、原生扩展与签名发布

* fix: 修复测试

* feat: 增强宿主 SDK、运行观测与制品维护能力

* feat: 增强文件传输、配置观测与本地开发能力

* feat: 支持 SSE 实时事件流并完善开发脚手架

* feat: 完善长连接鉴权复核与关闭回收

* feat: 增强生命周期与任务关闭可靠性

* feat: 收紧健康检查契约并补齐前端与真实网络验收

* feat: 增加SDK溯源与离线更新工具并验证跨版本兼容

* feat: 增加持久化业务示例与受控 Python 交付

* feat: 增加统一运行诊断与多worker状态观测

* feat: 增加固定目标发布等待与自动验收

* fix: 修复多环境插件部署前缀与代理配置不一致

* fix: 修复测试
2026-10-09 23:49:45 +08:00

61 lines
2.1 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>插件网络验收夹具</title>
</head>
<body>
<p id="ready">等待宿主</p>
<button id="echo">回显</button><output id="echo-result"></output>
<button id="start">接收事件</button><button id="stop">停止事件</button>
<button id="reset">重置验收游标</button>
<output id="stream-state"></output>
<ol id="events"></ol>
<script type="module">
import { createPluginClient } from "./assets/bridge.js";
const client = createPluginClient({ pluginId: "browser_test" });
const element = (id) => document.getElementById(id);
let controller;
let cursor = "";
await client.ready;
element("ready").textContent = "宿主已连接";
element("echo").onclick = async () => {
const value = await client.request({
path: "echo",
method: "POST",
data: { message: "network" },
});
element("echo-result").textContent = value.message;
};
element("start").onclick = async () => {
controller = new AbortController();
element("events").replaceChildren();
element("stream-state").textContent = "连接中";
try {
await client.stream(
{ path: "events", params: { count: 20 }, lastEventId: cursor },
{
signal: controller.signal,
onEvent(event) {
cursor = event.id;
const item = document.createElement("li");
item.textContent = event.id;
element("events").append(item);
element("stream-state").textContent = "接收中";
},
},
);
element("stream-state").textContent = "完成";
} catch (error) {
element("stream-state").textContent = error.message;
}
};
element("stop").onclick = () => controller?.abort();
element("reset").onclick = () => {
cursor = "";
element("events").replaceChildren();
};
</script>
</body>
</html>