baa-conductor


baa-conductor / packages / auth / src
im_wower  ·  2026-03-22

actions.ts

  1export type AuthResourceBinding = "none" | "controller" | "worker";
  2
  3export const AUTH_ACTIONS = [
  4  "controllers.heartbeat",
  5  "leader.acquire",
  6  "controllers.list",
  7  "tasks.create",
  8  "tasks.list",
  9  "tasks.plan",
 10  "tasks.claim",
 11  "steps.heartbeat",
 12  "steps.checkpoint",
 13  "steps.complete",
 14  "steps.fail",
 15  "system.pause",
 16  "system.resume",
 17  "system.drain",
 18  "system.state.read",
 19  "runs.list",
 20  "tasks.read",
 21  "tasks.logs.read",
 22  "runs.read",
 23  "maintenance.promote",
 24  "maintenance.demote"
 25] as const;
 26
 27export type AuthAction = (typeof AUTH_ACTIONS)[number];
 28
 29export interface AuthActionDescriptor {
 30  summary: string;
 31  mutatesState: boolean;
 32  resourceBinding: AuthResourceBinding;
 33}
 34
 35export const AUTH_ACTION_DESCRIPTORS = {
 36  "controllers.heartbeat": {
 37    summary: "controller 上报心跳并刷新自身活跃状态",
 38    mutatesState: true,
 39    resourceBinding: "controller"
 40  },
 41  "leader.acquire": {
 42    summary: "controller 获取或续租 leader lease",
 43    mutatesState: true,
 44    resourceBinding: "controller"
 45  },
 46  "controllers.list": {
 47    summary: "列出已注册 controller 与当前 active controller",
 48    mutatesState: false,
 49    resourceBinding: "none"
 50  },
 51  "tasks.create": {
 52    summary: "通过可见 control 会话创建新 task",
 53    mutatesState: true,
 54    resourceBinding: "none"
 55  },
 56  "tasks.list": {
 57    summary: "按状态列出 task 摘要",
 58    mutatesState: false,
 59    resourceBinding: "none"
 60  },
 61  "tasks.plan": {
 62    summary: "leader conductor 持久化已验收的 plan",
 63    mutatesState: true,
 64    resourceBinding: "controller"
 65  },
 66  "tasks.claim": {
 67    summary: "controller 领取待规划 task 或下一个 runnable step",
 68    mutatesState: true,
 69    resourceBinding: "controller"
 70  },
 71  "steps.heartbeat": {
 72    summary: "worker 为已分配 step 持续续心跳",
 73    mutatesState: true,
 74    resourceBinding: "worker"
 75  },
 76  "steps.checkpoint": {
 77    summary: "worker 为已分配 step 写 checkpoint",
 78    mutatesState: true,
 79    resourceBinding: "worker"
 80  },
 81  "steps.complete": {
 82    summary: "worker 标记已分配 step 完成",
 83    mutatesState: true,
 84    resourceBinding: "worker"
 85  },
 86  "steps.fail": {
 87    summary: "worker 标记已分配 step 失败",
 88    mutatesState: true,
 89    resourceBinding: "worker"
 90  },
 91  "system.pause": {
 92    summary: "暂停系统调度",
 93    mutatesState: true,
 94    resourceBinding: "none"
 95  },
 96  "system.resume": {
 97    summary: "恢复系统调度",
 98    mutatesState: true,
 99    resourceBinding: "none"
100  },
101  "system.drain": {
102    summary: "进入 drain 模式,停止新分配",
103    mutatesState: true,
104    resourceBinding: "none"
105  },
106  "system.state.read": {
107    summary: "读取当前系统状态、队列和运行态汇总",
108    mutatesState: false,
109    resourceBinding: "none"
110  },
111  "runs.list": {
112    summary: "列出最近 run 摘要",
113    mutatesState: false,
114    resourceBinding: "none"
115  },
116  "tasks.read": {
117    summary: "读取 task 详情",
118    mutatesState: false,
119    resourceBinding: "none"
120  },
121  "tasks.logs.read": {
122    summary: "读取 task 或 run 关联日志",
123    mutatesState: false,
124    resourceBinding: "none"
125  },
126  "runs.read": {
127    summary: "读取 run 详情",
128    mutatesState: false,
129    resourceBinding: "none"
130  },
131  "maintenance.promote": {
132    summary: "执行主备切换或 promote 类维护操作",
133    mutatesState: true,
134    resourceBinding: "none"
135  },
136  "maintenance.demote": {
137    summary: "执行 demote 或维护降级操作",
138    mutatesState: true,
139    resourceBinding: "none"
140  }
141} satisfies Record<AuthAction, AuthActionDescriptor>;
142
143export function isReadAction(action: AuthAction): boolean {
144  return !AUTH_ACTION_DESCRIPTORS[action].mutatesState;
145}