writePump 只发 ActionCable 文本 JSON ping,从不发 websocket.PingMessage, 导致 readPump 的 PongHandler 永远不触发,ReadDeadline(60s) 到期后连接 被强制关闭。前端每 60 秒弹出"离线""重连"通知。 修复:在 ticker 中先发 PingMessage 控制帧(浏览器自动回 Pong 重置 ReadDeadline),再发 ActionCable 文本 ping(保活 ConnectionMonitor)。 同时包含此前会话中的其他变更: - 移除安全设置(SAML)页面及路由 - 新增超级管理员控制台前端页面 - platform agent_bots 路由使用 Platform* handler - 超级管理员入口改为 SPA 内路由跳转
111 lines
3.0 KiB
JavaScript
111 lines
3.0 KiB
JavaScript
/* global axios */
|
|
|
|
/**
|
|
* Platform API client for Super Admin endpoints.
|
|
* All endpoints are under /platform/api/v1/ and require super_admin auth.
|
|
*/
|
|
class PlatformAPI {
|
|
constructor() {
|
|
this.baseURL = '/platform/api/v1';
|
|
}
|
|
|
|
// ── Accounts ──────────────────────────────────────────
|
|
getAccounts(params = {}) {
|
|
return axios.get(`${this.baseURL}/accounts`, { params });
|
|
}
|
|
|
|
getAccount(id) {
|
|
return axios.get(`${this.baseURL}/accounts/${id}`);
|
|
}
|
|
|
|
createAccount(data) {
|
|
return axios.post(`${this.baseURL}/accounts`, data);
|
|
}
|
|
|
|
updateAccount(id, data) {
|
|
return axios.patch(`${this.baseURL}/accounts/${id}`, data);
|
|
}
|
|
|
|
deleteAccount(id) {
|
|
return axios.delete(`${this.baseURL}/accounts/${id}`);
|
|
}
|
|
|
|
// ── Users ─────────────────────────────────────────────
|
|
getUsers(params = {}) {
|
|
return axios.get(`${this.baseURL}/users`, { params });
|
|
}
|
|
|
|
getUser(id) {
|
|
return axios.get(`${this.baseURL}/users/${id}`);
|
|
}
|
|
|
|
createUser(data) {
|
|
return axios.post(`${this.baseURL}/users`, data);
|
|
}
|
|
|
|
updateUser(id, data) {
|
|
return axios.patch(`${this.baseURL}/users/${id}`, data);
|
|
}
|
|
|
|
deleteUser(id) {
|
|
return axios.delete(`${this.baseURL}/users/${id}`);
|
|
}
|
|
|
|
// ── Account Users ─────────────────────────────────────
|
|
getAccountUsers(accountId) {
|
|
return axios.get(
|
|
`${this.baseURL}/accounts/${accountId}/account_users`
|
|
);
|
|
}
|
|
|
|
createAccountUser(accountId, data) {
|
|
return axios.post(
|
|
`${this.baseURL}/accounts/${accountId}/account_users`,
|
|
data
|
|
);
|
|
}
|
|
|
|
deleteAccountUser(accountId, userId) {
|
|
return axios.delete(
|
|
`${this.baseURL}/accounts/${userId}/account_users`,
|
|
{ data: { user_id: userId } }
|
|
);
|
|
}
|
|
|
|
// ── Agent Bots (platform-level) ───────────────────────
|
|
getAgentBots() {
|
|
return axios.get(`${this.baseURL}/agent_bots`);
|
|
}
|
|
|
|
createAgentBot(data) {
|
|
return axios.post(`${this.baseURL}/agent_bots`, data);
|
|
}
|
|
|
|
updateAgentBot(id, data) {
|
|
return axios.put(`${this.baseURL}/agent_bots/${id}`, data);
|
|
}
|
|
|
|
deleteAgentBot(id) {
|
|
return axios.delete(`${this.baseURL}/agent_bots/${id}`);
|
|
}
|
|
|
|
// ── Installation Config ───────────────────────────────
|
|
getInstallationConfigs(params = {}) {
|
|
return axios.get(`${this.baseURL}/installation_configs`, { params });
|
|
}
|
|
|
|
createInstallationConfig(data) {
|
|
return axios.post(`${this.baseURL}/installation_configs`, data);
|
|
}
|
|
|
|
updateInstallationConfig(id, data) {
|
|
return axios.put(`${this.baseURL}/installation_configs/${id}`, data);
|
|
}
|
|
|
|
deleteInstallationConfig(id) {
|
|
return axios.delete(`${this.baseURL}/installation_configs/${id}`);
|
|
}
|
|
}
|
|
|
|
export default new PlatformAPI();
|