@yss123/cage-kernel 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +70 -10
  2. package/dist/authorization.d.ts +34 -0
  3. package/dist/authorization.js +89 -0
  4. package/dist/authorization.js.map +1 -0
  5. package/dist/brands.d.ts +10 -0
  6. package/dist/brands.js +11 -1
  7. package/dist/brands.js.map +1 -1
  8. package/dist/db/connect.d.ts +14 -0
  9. package/dist/db/connect.js +18 -2
  10. package/dist/db/connect.js.map +1 -1
  11. package/dist/db/ddl.d.ts +32 -0
  12. package/dist/db/ddl.js +36 -0
  13. package/dist/db/ddl.js.map +1 -1
  14. package/dist/db/event-version-schema.d.ts +9 -0
  15. package/dist/db/event-version-schema.js +10 -0
  16. package/dist/db/event-version-schema.js.map +1 -0
  17. package/dist/db/index.d.ts +4 -0
  18. package/dist/db/index.js +4 -0
  19. package/dist/db/index.js.map +1 -1
  20. package/dist/db/migrate.d.ts +10 -0
  21. package/dist/db/migrate.js +9 -1
  22. package/dist/db/migrate.js.map +1 -1
  23. package/dist/db/rows.d.ts +2 -0
  24. package/dist/db/rows.js +3 -0
  25. package/dist/db/rows.js.map +1 -1
  26. package/dist/db/runtime-schema.d.ts +9 -0
  27. package/dist/db/runtime-schema.js +41 -0
  28. package/dist/db/runtime-schema.js.map +1 -0
  29. package/dist/db/session.d.ts +6 -0
  30. package/dist/db/session.js +6 -0
  31. package/dist/db/session.js.map +1 -1
  32. package/dist/errors.d.ts +12 -0
  33. package/dist/errors.js +12 -0
  34. package/dist/errors.js.map +1 -1
  35. package/dist/files/links.d.ts +10 -0
  36. package/dist/files/links.js +50 -0
  37. package/dist/files/links.js.map +1 -0
  38. package/dist/files/schema.d.ts +9 -0
  39. package/dist/files/schema.js +51 -0
  40. package/dist/files/schema.js.map +1 -0
  41. package/dist/index.d.ts +11 -2
  42. package/dist/index.js +11 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/kernel.d.ts +86 -0
  45. package/dist/kernel.js +71 -41
  46. package/dist/kernel.js.map +1 -1
  47. package/dist/mask.d.ts +6 -0
  48. package/dist/mask.js +6 -0
  49. package/dist/mask.js.map +1 -1
  50. package/dist/org.d.ts +7 -0
  51. package/dist/org.js +5 -0
  52. package/dist/org.js.map +1 -1
  53. package/dist/pipeline/draft.d.ts +16 -0
  54. package/dist/pipeline/draft.js +39 -0
  55. package/dist/pipeline/draft.js.map +1 -0
  56. package/dist/pipeline/idempotency.d.ts +6 -0
  57. package/dist/pipeline/idempotency.js +6 -0
  58. package/dist/pipeline/idempotency.js.map +1 -1
  59. package/dist/pipeline/invoker.d.ts +9 -0
  60. package/dist/pipeline/invoker.js +22 -0
  61. package/dist/pipeline/invoker.js.map +1 -0
  62. package/dist/pipeline/load.d.ts +13 -0
  63. package/dist/pipeline/load.js +13 -0
  64. package/dist/pipeline/load.js.map +1 -1
  65. package/dist/primitives/aggregate.d.ts +95 -2
  66. package/dist/primitives/aggregate.js +13 -1
  67. package/dist/primitives/aggregate.js.map +1 -1
  68. package/dist/primitives/business-process.d.ts +128 -0
  69. package/dist/primitives/business-process.js +62 -0
  70. package/dist/primitives/business-process.js.map +1 -0
  71. package/dist/primitives/collection.d.ts +65 -0
  72. package/dist/primitives/collection.js +79 -0
  73. package/dist/primitives/collection.js.map +1 -0
  74. package/dist/primitives/command.d.ts +110 -11
  75. package/dist/primitives/command.js +16 -0
  76. package/dist/primitives/command.js.map +1 -1
  77. package/dist/primitives/constraints.d.ts +30 -1
  78. package/dist/primitives/constraints.js +14 -0
  79. package/dist/primitives/constraints.js.map +1 -1
  80. package/dist/primitives/event.d.ts +36 -0
  81. package/dist/primitives/event.js +10 -1
  82. package/dist/primitives/event.js.map +1 -1
  83. package/dist/primitives/fields.d.ts +136 -16
  84. package/dist/primitives/fields.js +104 -13
  85. package/dist/primitives/fields.js.map +1 -1
  86. package/dist/primitives/flow.d.ts +173 -8
  87. package/dist/primitives/flow.js +29 -2
  88. package/dist/primitives/flow.js.map +1 -1
  89. package/dist/primitives/states.d.ts +34 -2
  90. package/dist/primitives/states.js +15 -0
  91. package/dist/primitives/states.js.map +1 -1
  92. package/dist/read.d.ts +31 -1
  93. package/dist/read.js +137 -39
  94. package/dist/read.js.map +1 -1
  95. package/dist/registry.d.ts +51 -1
  96. package/dist/registry.js +79 -5
  97. package/dist/registry.js.map +1 -1
  98. package/dist/relations.d.ts +7 -0
  99. package/dist/relations.js +7 -0
  100. package/dist/relations.js.map +1 -1
  101. package/dist/runtime.d.ts +35 -0
  102. package/dist/runtime.js +9 -0
  103. package/dist/runtime.js.map +1 -0
  104. package/dist/scope/index.d.ts +5 -0
  105. package/dist/scope/index.js +5 -0
  106. package/dist/scope/index.js.map +1 -1
  107. package/dist/telemetry.d.ts +8 -0
  108. package/dist/telemetry.js +28 -3
  109. package/dist/telemetry.js.map +1 -1
  110. package/dist/transfer/csv.d.ts +11 -0
  111. package/dist/transfer/csv.js +11 -0
  112. package/dist/transfer/csv.js.map +1 -1
  113. package/dist/transfer/index.d.ts +18 -0
  114. package/dist/transfer/index.js +34 -8
  115. package/dist/transfer/index.js.map +1 -1
  116. package/dist/transfer/schema.d.ts +5 -0
  117. package/dist/transfer/schema.js +5 -0
  118. package/dist/transfer/schema.js.map +1 -1
  119. package/dist/types.d.ts +38 -2
  120. package/dist/types.js +8 -0
  121. package/dist/types.js.map +1 -1
  122. package/dist/util/names.d.ts +6 -0
  123. package/dist/util/names.js +6 -0
  124. package/dist/util/names.js.map +1 -1
  125. package/dist/worker/consumers.d.ts +7 -0
  126. package/dist/worker/consumers.js +21 -9
  127. package/dist/worker/consumers.js.map +1 -1
  128. package/dist/worker/health.d.ts +38 -0
  129. package/dist/worker/health.js +20 -0
  130. package/dist/worker/health.js.map +1 -0
  131. package/dist/worker/index.d.ts +34 -1
  132. package/dist/worker/index.js +175 -38
  133. package/dist/worker/index.js.map +1 -1
  134. package/dist/worker/outbox.d.ts +25 -2
  135. package/dist/worker/outbox.js +40 -2
  136. package/dist/worker/outbox.js.map +1 -1
  137. package/dist/worker/scheduler.d.ts +10 -1
  138. package/dist/worker/scheduler.js +34 -4
  139. package/dist/worker/scheduler.js.map +1 -1
  140. package/package.json +1 -1
@@ -7,6 +7,7 @@ export declare const importRequestSchema: z.ZodObject<{
7
7
  csv: z.ZodString;
8
8
  atomic: z.ZodDefault<z.ZodBoolean>;
9
9
  }, z.core.$strict>;
10
+ /** 对外任务视图;queued/processing/retrying 只是进度,只有 completed 才能尝试下载结果。 */
10
11
  export interface TransferTask {
11
12
  id: string;
12
13
  kind: 'export' | 'import';
@@ -16,6 +17,7 @@ export interface TransferTask {
16
17
  expiresAt: string;
17
18
  finishedAt: string | null;
18
19
  errorCode: string | null;
20
+ /** 只存计数和文件元数据;结果可过期为 null,不包含导入输入或命令返回的业务快照。 */
19
21
  result: {
20
22
  rows: number;
21
23
  succeeded?: number;
@@ -31,19 +33,35 @@ export interface TransferTask {
31
33
  export declare class DataTransfers {
32
34
  private readonly k;
33
35
  constructor(k: Kernel);
36
+ /** 校验当前导出能力后入队;返回任务而非文件,实际范围读取由 worker 再次鉴权执行。 */
34
37
  export(aggregate: string, params: Record<string, unknown>, ctx: Ctx, key: string): Promise<TransferTask>;
38
+ /** 提交时先拒绝坏 CSV 结构,单行业务错误留在任务报告;二次认证时间随任务保存供执行检查。 */
35
39
  import(request: unknown, ctx: Ctx, key: string): Promise<TransferTask>;
40
+ /**
41
+ * 用事务咨询锁串行化同一租户/用户/幂等键,内容摘要不符即 CONFLICT,重复内容返回已有任务。
42
+ * 新任务、outbox 和提交审计共同提交;队列只保存 taskId,CSV/查询输入仅在受控任务记录中保存。
43
+ */
36
44
  private enqueue;
45
+ /** 所有任务查询先固定租户和提交人;系统运维权限不赋予读取他人文件的隐含通道。 */
37
46
  private own;
47
+ /** 返回本人最近 100 个匹配任务;聚合筛选覆盖该对象的导出和各命令导入。 */
38
48
  list(ctx: Ctx, aggregate?: string): Promise<TransferTask[]>;
39
49
  private row;
40
50
  get(id: string, ctx: Ctx): Promise<TransferTask>;
51
+ /**
52
+ * 下载前确认终态、实时能力及导出访问指纹;范围/部门树/明文权限变化需要重新生成文件。
53
+ * 必须先完成可靠下载审计,再返回文件内容,防止审计故障时仍泄露既有导出。
54
+ */
41
55
  download(id: string, ctx: Ctx): Promise<{
42
56
  body: string;
43
57
  filename: string;
44
58
  contentType: string;
45
59
  }>;
46
60
  }
61
+ /**
62
+ * 消费者锁定任务并重读用户权限;导入/导出结果与 processed_event 在同一事务提交,崩溃可安全重投。
63
+ * 业务拒绝通过保存点记录 failed;内部故障/并发冲突抛给 outbox 重试,不能伪装成已完成任务。
64
+ */
47
65
  export declare function transferConsumer(k: Kernel): EventConsumer;
48
66
  /** 定期清除原文件、结果文件和授权指纹;保留轻量任务记录防止旧幂等键被重复执行。 */
49
67
  export declare function expireTransfers(k: Kernel): Promise<void>;
@@ -20,12 +20,14 @@ function requireCap(ctx, capability) {
20
20
  if (!ctx.capabilities.has(capability))
21
21
  throw cageError('FORBIDDEN', { capability });
22
22
  }
23
+ /** 排队、执行、下载都重读有效授权,防止任务排队期间撤权后继续沿用旧权限。 */
23
24
  async function liveContext(k, userId, tenantId, db = k.app) {
24
25
  const grants = await loadUserGrants(db, userId, tenantId);
25
26
  if (!grants?.active)
26
27
  throw cageError('FORBIDDEN', '用户已被禁用或删除');
27
28
  return userCtx(grants);
28
29
  }
30
+ /** 只有已注册、可由用户调用且对象输入可映射 CSV 的命令才能导入,仍逐行走完整写流水线。 */
29
31
  function importCommand(k, capability, ctx) {
30
32
  const command = k.registry.command(capability);
31
33
  if (!command || !command.cmd.invokedBy.includes('user'))
@@ -35,8 +37,8 @@ function importCommand(k, capability, ctx) {
35
37
  return command;
36
38
  }
37
39
  /** 下载不能沿用排队时保存的授权。范围、明文权限或部门树变化后,旧文件必须重新生成。 */
38
- async function accessHash(k, ctx, aggregate) {
39
- const depts = await k.app.selectFrom('sys.dept').select(['id', 'ancestors', 'status'])
40
+ async function accessHash(k, ctx, aggregate, db = k.app) {
41
+ const depts = await db.selectFrom('sys.dept').select(['id', 'ancestors', 'status'])
40
42
  .where('tenant_id', '=', ctx.tenantId).orderBy('id').execute();
41
43
  return hash({ user: ctx.userId, dept: ctx.deptId, path: ctx.deptPath, scopes: ctx.scopes[aggregate] ?? ctx.scopes['*'], unmask: [...ctx.unmask].sort(), depts });
42
44
  }
@@ -49,6 +51,7 @@ export class DataTransfers {
49
51
  constructor(k) {
50
52
  this.k = k;
51
53
  }
54
+ /** 校验当前导出能力后入队;返回任务而非文件,实际范围读取由 worker 再次鉴权执行。 */
52
55
  async export(aggregate, params, ctx, key) {
53
56
  const user = requireUser(ctx), current = await liveContext(this.k, user, ctx.tenantId);
54
57
  if (!this.k.registry.aggregate(aggregate))
@@ -56,6 +59,7 @@ export class DataTransfers {
56
59
  requireCap(current, `${aggregate}.export`);
57
60
  return this.enqueue('export', aggregate, params, ctx, key);
58
61
  }
62
+ /** 提交时先拒绝坏 CSV 结构,单行业务错误留在任务报告;二次认证时间随任务保存供执行检查。 */
59
63
  async import(request, ctx, key) {
60
64
  const user = requireUser(ctx), current = await liveContext(this.k, user, ctx.tenantId);
61
65
  const parsed = importRequestSchema.safeParse(request);
@@ -67,6 +71,10 @@ export class DataTransfers {
67
71
  csvInputs(csv, rc.cmd.input);
68
72
  return this.enqueue('import', command, { csv, atomic, stepUpAt: ctx.stepUpAt ?? null }, ctx, key);
69
73
  }
74
+ /**
75
+ * 用事务咨询锁串行化同一租户/用户/幂等键,内容摘要不符即 CONFLICT,重复内容返回已有任务。
76
+ * 新任务、outbox 和提交审计共同提交;队列只保存 taskId,CSV/查询输入仅在受控任务记录中保存。
77
+ */
70
78
  async enqueue(kind, target, input, ctx, key) {
71
79
  if (!key || key.length > 200)
72
80
  throw cageError('INVALID_INPUT', '请提供不超过 200 字符的 Idempotency-Key');
@@ -102,10 +110,12 @@ export class DataTransfers {
102
110
  });
103
111
  return this.get(id, ctx);
104
112
  }
113
+ /** 所有任务查询先固定租户和提交人;系统运维权限不赋予读取他人文件的隐含通道。 */
105
114
  own(ctx) {
106
115
  return this.k.app.selectFrom('sys.data_transfer as t').innerJoin('sys.outbox as o', 'o.id', 't.outbox_id')
107
116
  .where('t.tenant_id', '=', ctx.tenantId).where('t.user_id', '=', requireUser(ctx));
108
117
  }
118
+ /** 返回本人最近 100 个匹配任务;聚合筛选覆盖该对象的导出和各命令导入。 */
109
119
  async list(ctx, aggregate) {
110
120
  let query = this.own(ctx);
111
121
  // 业务列表只需要当前对象的任务;先在数据库筛选再取最近 100 条,
@@ -128,6 +138,10 @@ export class DataTransfers {
128
138
  return row;
129
139
  }
130
140
  async get(id, ctx) { return taskView(await this.row(id, ctx)); }
141
+ /**
142
+ * 下载前确认终态、实时能力及导出访问指纹;范围/部门树/明文权限变化需要重新生成文件。
143
+ * 必须先完成可靠下载审计,再返回文件内容,防止审计故障时仍泄露既有导出。
144
+ */
131
145
  async download(id, ctx) {
132
146
  const row = await this.row(id, ctx);
133
147
  if (taskView(row).status !== 'completed')
@@ -137,13 +151,21 @@ export class DataTransfers {
137
151
  if (row.kind === 'export' && row.access_hash !== await accessHash(this.k, current, row.target)) {
138
152
  throw cageError('FORBIDDEN', '数据范围或明文权限已经变化,请重新导出');
139
153
  }
140
- await this.k.writeAudit(this.k.app, {
141
- tenantId: ctx.tenantId, actor: ctx.userId, actorKind: 'user', source: 'api', kind: 'read',
142
- capability: row.kind === 'export' ? `${row.target}.export` : row.target, command: 'dataTransfer.download', result: 'ok', diff: { taskId: id },
143
- });
154
+ try {
155
+ await this.k.writeAudit(this.k.app, {
156
+ tenantId: ctx.tenantId, actor: ctx.userId, actorKind: 'user', source: 'api', kind: 'read',
157
+ capability: row.kind === 'export' ? `${row.target}.export` : row.target, command: 'dataTransfer.download', result: 'ok', diff: { taskId: id },
158
+ requestId: ctx.requestId ?? null, client: ctx.client ?? null,
159
+ });
160
+ }
161
+ catch {
162
+ this.k.log.error({ code: 'CAGE-AUDIT-001', operation: 'dataTransfer.download', task: id, requestId: ctx.requestId }, '下载审计失败,未交付文件');
163
+ throw cageError('INTERNAL', { diagnostic: 'CAGE-AUDIT-001', phase: 'audit', operation: 'dataTransfer.download', retryable: true });
164
+ }
144
165
  return { body: row.file_body, filename: row.result.filename, contentType: row.kind === 'export' ? 'text/csv; charset=utf-8' : 'application/json; charset=utf-8' };
145
166
  }
146
167
  }
168
+ /** 将任务状态与 outbox 投递证据合并;时间已过期时优先标 expired,隐藏已失效的结果元数据。 */
147
169
  function taskView(row) {
148
170
  const expired = new Date(row.expires_at).getTime() <= Date.now();
149
171
  const status = expired ? 'expired' : row.status !== 'queued' ? row.status : row.delivery === 'dead' || row.delivery === 'done' ? 'failed' : row.delivery === 'processing' ? 'processing' : row.attempts > 0 ? 'retrying' : 'queued';
@@ -196,6 +218,10 @@ async function runImport(k, tx, task, ctx) {
196
218
  const result = { rows: results.length, succeeded, failed: results.length - succeeded, atomic: task.input.atomic, filename: `import-${task.id}.json` };
197
219
  return { result, body: JSON.stringify({ ...result, results }, null, 2), access: null };
198
220
  }
221
+ /**
222
+ * 消费者锁定任务并重读用户权限;导入/导出结果与 processed_event 在同一事务提交,崩溃可安全重投。
223
+ * 业务拒绝通过保存点记录 failed;内部故障/并发冲突抛给 outbox 重试,不能伪装成已完成任务。
224
+ */
199
225
  export function transferConsumer(k) {
200
226
  return {
201
227
  name: 'cage:data-transfer', event: EVENT,
@@ -217,8 +243,8 @@ export function transferConsumer(k) {
217
243
  ctx.stepUpAt = task.input.stepUpAt;
218
244
  let output;
219
245
  if (task.kind === 'export') {
220
- const access = await accessHash(k, ctx, task.target);
221
- const file = await k.read.export(task.target, task.input, ctx);
246
+ const access = await accessHash(k, ctx, task.target, tx);
247
+ const file = await k.read.export(task.target, task.input, ctx, tx);
222
248
  output = { result: { rows: file.rows, filename: file.filename }, body: file.body, access };
223
249
  }
224
250
  else
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * 任务用租户/用户/幂等键去重,并关联 outbox 以复用投递与死信机制。
3
+ * access_hash 绑定生成结果时的访问条件,下载时还需核对当前权限;过期清理内容但保留任务索引。
4
+ * 此处 CSV 内容存数据库,与附件模块的字节存储策略不同;保持已发布 SQL 文本不变。
5
+ */
1
6
  export declare const TRANSFER_MIGRATION: {
2
7
  name: string;
3
8
  sql: string;
@@ -1,6 +1,11 @@
1
1
  // 独立的前向系统迁移;不改动已发布的 cage:0001_system 校验和。
2
2
  // 文件与任务存在同一 PostgreSQL 中,API/worker 不需要共享本地磁盘。
3
3
  // 原始文件和结果仅保留 24 小时;索引记录保留用于幂等及操作追踪。
4
+ /**
5
+ * 任务用租户/用户/幂等键去重,并关联 outbox 以复用投递与死信机制。
6
+ * access_hash 绑定生成结果时的访问条件,下载时还需核对当前权限;过期清理内容但保留任务索引。
7
+ * 此处 CSV 内容存数据库,与附件模块的字节存储策略不同;保持已发布 SQL 文本不变。
8
+ */
4
9
  export const TRANSFER_MIGRATION = {
5
10
  name: 'cage:0002_data_transfer',
6
11
  sql: `
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/transfer/schema.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,+CAA+C;AAC/C,oCAAoC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,yBAAyB;IAC/B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBN;CACA,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/transfer/schema.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,+CAA+C;AAC/C,oCAAoC;AACpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,yBAAyB;IAC/B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBN;CACA,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,14 @@
1
+ /**
2
+ * 定义内核授权上下文、调用主体、来源和数据范围的公共类型。
3
+ * 认证、审批、任务与反应在服务端组装这些值,写流水线、安全读和审计共同消费;业务输入不能自行指定可信身份,类型描述也不等于已经验证或授予权限。
4
+ */
1
5
  /** 主体种类。系统身份(process/job/external/reaction)只能调用声明了对应 invokedBy 的命令,或自己声明过的命令。 */
2
6
  export type ActorKind = 'user' | 'process' | 'job' | 'external' | 'reaction' | 'system' | 'anonymous';
7
+ /** 审计主体;id 的解释依赖 kind,系统主体名称不能当作真人用户 ID 使用。 */
3
8
  export interface Actor {
9
+ /**
10
+ * 真实调用身份类型,决定调用入口边界;真人委托信息放在 Ctx.onBehalfOf,不伪装为 user。
11
+ */
4
12
  kind: ActorKind;
5
13
  /** 用户 id,或系统身份名,例如 job:expireStaleOrders */
6
14
  id: string;
@@ -9,11 +17,18 @@ export interface Actor {
9
17
  export type Source = 'api' | 'process' | 'job' | 'import' | 'external' | 'reaction' | 'system';
10
18
  /** 范围组合子:封闭集合,每个都同时有内存语义和 SQL 语义 */
11
19
  export type Combinator = 'all' | 'self' | 'dept' | 'deptSubtree' | 'deptSet';
20
+ /**
21
+ * 内核支持的数据范围组合子白名单,供配置校验与目录发现使用。
22
+ * 具体数据判定由 scope 的 SQL 和内存实现承担,数组顺序不等于范围授权的包含关系。
23
+ */
12
24
  export declare const COMBINATORS: readonly Combinator[];
13
25
  /** 组合子由窄到宽的顺序,用于「不能授出比自己更宽的范围」 */
14
26
  export declare const COMBINATOR_WIDTH: Record<Combinator, number>;
15
27
  /** 角色在某个聚合上的数据范围授权 */
16
28
  export interface ScopeGrant {
29
+ /**
30
+ * 此条授权采用的范围规则,多条授权按 OR 合并;all 仍受租户边界限制。
31
+ */
17
32
  combinator: Combinator;
18
33
  /** deptSet 用:角色配置的部门集合 */
19
34
  deptIds?: string[];
@@ -21,32 +36,53 @@ export interface ScopeGrant {
21
36
  /** 能力点参数,例如 { ceiling: 50000 } */
22
37
  export type CapabilityParams = Record<string, unknown>;
23
38
  /** 当前主体的上下文。HTTP 认证、审批桥接、调度器、反应各自构造它,交给内核。 */
39
+ /**
40
+ * ctx 是可信服务端组装的授权快照,不是客户端可直接提交的请求体。
41
+ * capabilities 决定能做什么,scopes 决定可操作哪些记录,invokedBy 另由命令声明检查;
42
+ * 三者不可互相替代。异步处理派生上下文时要保留租户、真人委托和追踪信息。
43
+ */
24
44
  export interface Ctx {
45
+ /**
46
+ * 可信服务端主体;null 表示尚无身份,匿名公共调用也需显式 anonymous 主体。
47
+ */
25
48
  actor: Actor | null;
26
49
  /** 当前真人用户;系统身份时为 null(真人在 onBehalfOf) */
27
50
  userId: string | null;
28
51
  /** 系统身份代表的真人,用于职责分离和审计 */
29
52
  onBehalfOf?: string | null;
53
+ /** 所有数据库读写和异步事件的租户边界,不允许通过业务输入覆盖。 */
30
54
  tenantId: string;
55
+ /**
56
+ * 当前主体关联部门 ID;无部门时为 null,不能据空值自动扩展到全租户。
57
+ */
31
58
  deptId: string | null;
32
59
  /** 当前部门的祖先路径(含自己),例如 /root/purchase/ */
33
60
  deptPath: string | null;
34
61
  /** 能力集合及参数;多角色取并集,额度取最大值 */
35
62
  capabilities: Map<string, CapabilityParams>;
36
- /** 各聚合上的范围授权,多角色取并集(OR);未配置的聚合按「仅本人」 */
63
+ /** 各聚合上的范围授权,多角色取并集(OR);具体聚合缺省时可使用 * 通配授权,仍未配置则按仅本人处理。 */
37
64
  scopes: Record<string, ScopeGrant[]>;
38
65
  /** 可以看明文的「聚合.种类」,例如 PurchaseOrder.phone */
39
66
  unmask: string[];
67
+ /**
68
+ * 本次业务入口来源,写入审计和异步关联,不独立授予对应调用身份或能力。
69
+ */
40
70
  source: Source;
71
+ /** 跨 HTTP、命令审计和 outbox 关联同一次请求;不承担业务去重。 */
41
72
  requestId?: string;
73
+ /** 同一次逻辑提交重试时复用;未提供时不会自动合并两次独立业务操作。 */
42
74
  idempotencyKey?: string;
43
75
  /** 二次认证时间(毫秒时间戳) */
44
76
  stepUpAt?: number | null;
77
+ /**
78
+ * 可选客户端来源信息,包含 IP 和 User-Agent,仅作审计上下文,不作为业务授权依据。
79
+ */
45
80
  client?: {
46
- ip?: string;
81
+ ip?: string; /** 可选浏览器/客户端标识,属于不可信展示文本,不参与能力判断。 */
47
82
  userAgent?: string;
48
83
  };
49
84
  /** onBehalfOf 那个人的能力(额度类约束按他判断);内核会按需加载 */
50
85
  onBehalfOfCapabilities?: Map<string, CapabilityParams>;
51
86
  }
87
+ /** 声明回调既可同步计算,也可等待框架允许的读依赖;调用侧始终可以 await。 */
52
88
  export type MaybePromise<T> = T | Promise<T>;
package/dist/types.js CHANGED
@@ -1,4 +1,12 @@
1
+ /**
2
+ * 定义内核授权上下文、调用主体、来源和数据范围的公共类型。
3
+ * 认证、审批、任务与反应在服务端组装这些值,写流水线、安全读和审计共同消费;业务输入不能自行指定可信身份,类型描述也不等于已经验证或授予权限。
4
+ */
1
5
  // 内核公共类型:上下文 ctx、主体、范围授权。
6
+ /**
7
+ * 内核支持的数据范围组合子白名单,供配置校验与目录发现使用。
8
+ * 具体数据判定由 scope 的 SQL 和内存实现承担,数组顺序不等于范围授权的包含关系。
9
+ */
2
10
  export const COMBINATORS = ['all', 'self', 'dept', 'deptSubtree', 'deptSet'];
3
11
  /** 组合子由窄到宽的顺序,用于「不能授出比自己更宽的范围」 */
4
12
  export const COMBINATOR_WIDTH = { self: 0, dept: 1, deptSet: 2, deptSubtree: 2, all: 3 };
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAgB1B,MAAM,CAAC,MAAM,WAAW,GAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACpG,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAA+B,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,0BAA0B;AAoB1B;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACpG,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAA+B,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC"}
@@ -1,9 +1,15 @@
1
+ /** 兼顾连续大写缩写和普通驼峰边界;输出用作数据库名字,调用前由声明层约束合法标识。 */
1
2
  export declare function snake(s: string): string;
3
+ /** 与表名转换共享分词规则,使自动 HTTP 路径和领域命名保持可推导关系。 */
2
4
  export declare function kebab(s: string): string;
5
+ /** 将数据库下划线列名转换为业务字段名;不改变已经是驼峰的字段。 */
3
6
  export declare function camel(s: string): string;
7
+ /** 只改变首字符,供生成器保留后续缩写/驼峰;空字符串仍返回空字符串。 */
4
8
  export declare function lowerFirst(s: string): string;
9
+ /** 只改变首字符,适合从字段名构造公开类型名,不承担标识符合法性检查。 */
5
10
  export declare function upperFirst(s: string): string;
6
11
  /** 32 位哈希(FNV-1a),用于咨询锁编号 */
7
12
  export declare function hash32(s: string): number;
8
13
  /** 稳定的 JSON 序列化(键排序),用于本体图比较 */
14
+ /** 对对象键排序但保持数组顺序;仅用于可 JSON 化的声明资料,不作为密码学签名规范。 */
9
15
  export declare function stableStringify(v: unknown): string;
@@ -1,19 +1,24 @@
1
1
  // 命名转换:聚合名大驼峰 → 表名 snake_case、路由 kebab-case;字段名 camelCase ↔ 列名 snake_case。
2
+ /** 兼顾连续大写缩写和普通驼峰边界;输出用作数据库名字,调用前由声明层约束合法标识。 */
2
3
  export function snake(s) {
3
4
  return s
4
5
  .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
5
6
  .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
6
7
  .toLowerCase();
7
8
  }
9
+ /** 与表名转换共享分词规则,使自动 HTTP 路径和领域命名保持可推导关系。 */
8
10
  export function kebab(s) {
9
11
  return snake(s).replace(/_/g, '-');
10
12
  }
13
+ /** 将数据库下划线列名转换为业务字段名;不改变已经是驼峰的字段。 */
11
14
  export function camel(s) {
12
15
  return s.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());
13
16
  }
17
+ /** 只改变首字符,供生成器保留后续缩写/驼峰;空字符串仍返回空字符串。 */
14
18
  export function lowerFirst(s) {
15
19
  return s.charAt(0).toLowerCase() + s.slice(1);
16
20
  }
21
+ /** 只改变首字符,适合从字段名构造公开类型名,不承担标识符合法性检查。 */
17
22
  export function upperFirst(s) {
18
23
  return s.charAt(0).toUpperCase() + s.slice(1);
19
24
  }
@@ -27,6 +32,7 @@ export function hash32(s) {
27
32
  return h | 0;
28
33
  }
29
34
  /** 稳定的 JSON 序列化(键排序),用于本体图比较 */
35
+ /** 对对象键排序但保持数组顺序;仅用于可 JSON 化的声明资料,不作为密码学签名规范。 */
30
36
  export function stableStringify(v) {
31
37
  if (v === null || typeof v !== 'object')
32
38
  return JSON.stringify(v);
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/util/names.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC;SACL,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,eAAe,CAAE,CAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACpG,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/util/names.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,+CAA+C;AAC/C,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC;SACL,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,gCAAgC;AAChC,iDAAiD;AACjD,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,eAAe,CAAE,CAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACpG,CAAC"}
@@ -9,6 +9,8 @@ export interface ApprovalEngine {
9
9
  tenantId: string;
10
10
  /** 只包含声明过的 routable 字段 */
11
11
  vars: Record<string, unknown>;
12
+ subjectVersion?: number;
13
+ eventId?: number;
12
14
  tx: Transaction<any>;
13
15
  }): Promise<{
14
16
  instanceId: string;
@@ -20,8 +22,13 @@ export interface ApprovalEngine {
20
22
  tx: Transaction<any>;
21
23
  }): Promise<void>;
22
24
  }
25
+ /**
26
+ * 只装配 tx:outbox 的反应,same 反应已由主命令事务执行。消费名称稳定,供持久去重使用。
27
+ * 每个反应只获得目标命令能力;集合按声明顺序串行执行,失败带原始条目坐标并回滚消费事务。
28
+ */
23
29
  export declare function reactionConsumers(k: Kernel): EventConsumer[];
24
30
  /** 审批启动:只把 routable 字段作为流程变量传给引擎 */
31
+ /** 启动时要求每个流程存在引擎,避免事件已标 done 却没有产生待办;启动/取消随消费事务提交。 */
25
32
  export declare function approvalConsumers(k: Kernel, engines: Record<string, ApprovalEngine>): EventConsumer[];
26
33
  /** 声明对象通过 CONSUMERS 扩展点提供的消费者(例如 @yss123/cage-connectors 的出站映射) */
27
34
  export declare function extensionConsumers(k: Kernel): EventConsumer[];
@@ -1,19 +1,22 @@
1
1
  import { CONSUMERS } from '../brands.js';
2
2
  import { systemCtx } from '../org.js';
3
3
  import { loadScoped } from '../pipeline/load.js';
4
+ import { reactionEntries, reactionEntryError } from '../primitives/collection.js';
5
+ /** 事件可来自真人或代表真人的系统身份,后续反应继续携带同一委托用于审计和职责分离。 */
4
6
  function actorUser(row) {
5
7
  return row.actor?.userId ?? row.actor?.onBehalfOf ?? null;
6
8
  }
9
+ /**
10
+ * 只装配 tx:outbox 的反应,same 反应已由主命令事务执行。消费名称稳定,供持久去重使用。
11
+ * 每个反应只获得目标命令能力;集合按声明顺序串行执行,失败带原始条目坐标并回滚消费事务。
12
+ */
7
13
  export function reactionConsumers(k) {
8
- return k.registry.reactions
9
- .filter(({ r }) => r.tx === 'outbox')
14
+ const events = new Set(k.registry.reactions.map(({ r }) => r.event.name));
15
+ return [...events].flatMap((event) => k.registry.reactionsFor(event).filter(({ r }) => r.tx === 'outbox'))
10
16
  .map(({ r, name }) => ({
11
17
  name: `reaction:${name}`,
12
18
  event: r.event.name,
13
19
  async handle(row, tx) {
14
- const input = r.map(row.payload);
15
- if (input === null || input === undefined)
16
- return;
17
20
  const ctx = systemCtx({
18
21
  kind: 'reaction',
19
22
  name,
@@ -22,25 +25,33 @@ export function reactionConsumers(k) {
22
25
  onBehalfOf: actorUser(row),
23
26
  requestId: row.request_id ?? undefined,
24
27
  });
25
- await k.executeIn(tx, r.command, input, ctx, 0);
28
+ // 集合调用和去重登记共享同一事务;串行执行保留声明的锁顺序。
29
+ for (const entry of reactionEntries(r, row.payload)) {
30
+ try {
31
+ await k.executeIn(tx, r.command, entry.input, ctx, 0);
32
+ }
33
+ catch (error) {
34
+ throw reactionEntryError(error, r, name, entry);
35
+ }
36
+ }
26
37
  },
27
38
  }));
28
39
  }
29
40
  /** 审批启动:只把 routable 字段作为流程变量传给引擎 */
41
+ /** 启动时要求每个流程存在引擎,避免事件已标 done 却没有产生待办;启动/取消随消费事务提交。 */
30
42
  export function approvalConsumers(k, engines) {
31
43
  const out = [];
32
44
  for (const { a, name } of k.registry.approvals) {
33
45
  const engine = engines[a.process];
34
46
  if (!engine) {
35
- k.log.warn({ process: a.process }, `审批绑定 ${name} 没有可用的审批引擎,流程不会启动`);
36
- continue;
47
+ throw new Error(`[CAGE-WORKER-001] 审批绑定 ${name} 缺少流程 ${a.process} 的审批引擎;补齐路由或装配引擎后再启动 worker`);
37
48
  }
38
49
  out.push({
39
50
  name: `approval:${name}:start`,
40
51
  event: a.start.name,
41
52
  async handle(row, tx) {
42
53
  const vars = await routableVars(k, a, row, tx);
43
- await engine.start({ process: a.process, businessKey: row.aggregate_id, tenantId: row.tenant_id, vars, tx });
54
+ await engine.start({ process: a.process, businessKey: row.aggregate_id, tenantId: row.tenant_id, vars, tx, subjectVersion: row.aggregate_version ?? undefined, eventId: row.id });
44
55
  },
45
56
  });
46
57
  for (const ev of a.cancelOn) {
@@ -55,6 +66,7 @@ export function approvalConsumers(k, engines) {
55
66
  }
56
67
  return out;
57
68
  }
69
+ /** 只提取 routable 白名单,优先当前对象快照、再事件载荷;不把整个聚合或任意输入传给流程。 */
58
70
  async function routableVars(k, a, row, tx) {
59
71
  const ctx = systemCtx({ kind: 'process', name: a.process, tenantId: row.tenant_id, capabilities: [] });
60
72
  const snap = await loadScoped(tx, a.agg, row.aggregate_id, ctx, false);
@@ -1 +1 @@
1
- {"version":3,"file":"consumers.js","sourceRoot":"","sources":["../../src/worker/consumers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumers.js","sourceRoot":"","sources":["../../src/worker/consumers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Kernel } from '../kernel.js';
2
+ import type { EventConsumer } from './outbox.js';
3
+ /** 进程实际装载的版本/协议/注册指纹及消费者清单,不能用磁盘源码代替这份运行证据。 */
4
+ export interface WorkerManifest {
5
+ version: string;
6
+ protocolVersion: number;
7
+ registryFingerprint: string;
8
+ loadedAt: string;
9
+ consumers: {
10
+ name: string;
11
+ event: string;
12
+ ready: boolean;
13
+ }[];
14
+ events: {
15
+ name: string;
16
+ consumers: string[];
17
+ recordOnly: boolean;
18
+ }[];
19
+ jobs: string[];
20
+ }
21
+ /** 可观测运行状态;heartbeatAt 为 ISO 时间,null 表示尚无成功心跳,inFlight 是正在执行的任务标识。 */
22
+ export interface WorkerSnapshot {
23
+ id: string;
24
+ pid: number;
25
+ status: 'starting' | 'running' | 'stopping' | 'stopped' | 'error';
26
+ listenerHealthy: boolean;
27
+ schedulerHealthy: boolean;
28
+ heartbeatAt: string | null;
29
+ inFlight: string[];
30
+ lastError: string | null;
31
+ manifest: WorkerManifest;
32
+ }
33
+ /** 清单按名称稳定排序;recordOnly 事件允许没有消费者,未知事件则由投递校验拒绝静默完成。 */
34
+ export declare function describeConsumers(k: Kernel, consumers: EventConsumer[]): WorkerManifest;
35
+ /** 保存实时快照提供器而非冻结结果,HTTP 同进程诊断可观察到最新状态;WeakMap 不延长 kernel 生命周期。 */
36
+ export declare function registerWorkerSnapshot(k: Kernel, snapshot: () => WorkerSnapshot): void;
37
+ /** 未在此进程装配 worker 时返回 null;跨进程状态应查询数据库心跳记录。 */
38
+ export declare function workerSnapshot(k: Kernel): WorkerSnapshot | null;
@@ -0,0 +1,20 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { registryFingerprint } from '../registry.js';
3
+ const { version } = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
4
+ /** 清单按名称稳定排序;recordOnly 事件允许没有消费者,未知事件则由投递校验拒绝静默完成。 */
5
+ export function describeConsumers(k, consumers) {
6
+ const entries = consumers.map((c) => ({ name: c.name, event: c.event, ready: true })).sort((a, b) => a.name.localeCompare(b.name));
7
+ const events = [...new Set([...k.registry.events.map((event) => event.name), ...entries.map((c) => c.event)])].sort();
8
+ return {
9
+ version, protocolVersion: 2, registryFingerprint: registryFingerprint(k.registry), loadedAt: new Date().toISOString(),
10
+ consumers: entries,
11
+ events: events.map((name) => { const names = entries.filter((c) => c.event === name).map((c) => c.name); return { name, consumers: names, recordOnly: names.length === 0 }; }),
12
+ jobs: k.registry.jobs.map((j) => j.name).sort(),
13
+ };
14
+ }
15
+ const snapshots = new WeakMap();
16
+ /** 保存实时快照提供器而非冻结结果,HTTP 同进程诊断可观察到最新状态;WeakMap 不延长 kernel 生命周期。 */
17
+ export function registerWorkerSnapshot(k, snapshot) { snapshots.set(k, snapshot); }
18
+ /** 未在此进程装配 worker 时返回 null;跨进程状态应查询数据库心跳记录。 */
19
+ export function workerSnapshot(k) { return snapshots.get(k)?.() ?? null; }
20
+ //# sourceMappingURL=health.js.map