@yss123/cage-kernel 0.2.0 → 0.3.0

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 +65 -40
  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
package/dist/read.js CHANGED
@@ -12,21 +12,70 @@ import { csvCell } from './transfer/csv.js';
12
12
  import { relationTable } from './relations.js';
13
13
  const SYS = { id: 'id', status: 'status', version: 'version', createdAt: 'created_at', updatedAt: 'updated_at' };
14
14
  const RESERVED = new Set(['page', 'pageSize', 'sort', 'createdAfter', 'createdBefore']);
15
- function coerce(kind, v) {
16
- if (typeof v !== 'string')
17
- return v;
18
- if (kind === 'int' || kind === 'number')
19
- return Number(v);
20
- if (kind === 'bool')
21
- return v === 'true';
15
+ function invalid(path, message) {
16
+ throw cageError('INVALID_INPUT', [{ path, message }]);
17
+ }
18
+ /** 拒绝负数、小数、Infinity 和非数字字符串;只有缺省值可采用默认值,错误输入不静默归一。 */
19
+ function pageNumber(value, path, fallback) {
20
+ if (value === undefined)
21
+ return fallback;
22
+ if ((typeof value !== 'number' && typeof value !== 'string') || (typeof value === 'string' && !/^[0-9]+$/.test(value)))
23
+ return invalid(path, '必须为正整数');
24
+ const n = Number(value);
25
+ return Number.isSafeInteger(n) && n > 0 ? n : invalid(path, '必须为有限的正安全整数');
26
+ }
27
+ /** 日期过滤只接受合法日期或带时区的 ISO 时间,避免服务器本地时区猜测用户输入。 */
28
+ function dateParam(value, path) {
29
+ if (typeof value !== 'string' || !(z.iso.date().safeParse(value).success || z.iso.datetime({ offset: true }).safeParse(value).success))
30
+ return invalid(path, '必须为合法日期或带时区的 ISO 时间');
31
+ return new Date(value);
32
+ }
33
+ /** 先将 URL 数值/布尔文本转换,再用字段基础 schema 校验;金额保持字符串而不转浮点数。 */
34
+ function coerce(field, value, path) {
35
+ let v = value;
36
+ if (field?.kind === 'int' || field?.kind === 'number' || path === 'version') {
37
+ if (typeof v === 'string' && /^-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i.test(v))
38
+ v = Number(v);
39
+ if (typeof v !== 'number' || !Number.isFinite(v))
40
+ return invalid(path, '必须为有限数值');
41
+ if ((field?.kind === 'int' || path === 'version') && !Number.isSafeInteger(v))
42
+ return invalid(path, '必须为安全整数');
43
+ }
44
+ else if (field?.kind === 'bool') {
45
+ if (v === 'true')
46
+ v = true;
47
+ else if (v === 'false')
48
+ v = false;
49
+ if (typeof v !== 'boolean')
50
+ return invalid(path, '布尔值只接受 true 或 false');
51
+ }
52
+ if (field?.kind === 'date' && !z.iso.date().safeParse(v).success)
53
+ return invalid(path, '必须为合法日期');
54
+ if (field) {
55
+ const parsed = field.base.safeParse(v);
56
+ if (!parsed.success)
57
+ return invalid(path, parsed.error.issues.map((issue) => issue.message).join('; '));
58
+ return parsed.data;
59
+ }
60
+ if (path === 'createdAt' || path === 'updatedAt')
61
+ return dateParam(v, path);
62
+ if (path === 'id' && !z.uuid().safeParse(v).success)
63
+ return invalid(path, '必须为 UUID');
64
+ if (typeof v !== 'string' && path !== 'version')
65
+ return invalid(path, '必须为字符串');
22
66
  return v;
23
67
  }
68
+ /**
69
+ * 面向用户的统一只读服务。能力检查在 TypeScript 层,行级范围与敏感掩码由 safe 视图执行。
70
+ * 有明文交付或导出时先可靠写审计;审计失败不会返回已经查询到的数据,避免先泄露后补日志。
71
+ */
24
72
  export class ReadSide {
25
73
  k;
26
74
  constructor(k) {
27
75
  this.k = k;
28
76
  }
29
77
  /** 读侧账号上的只读事务,已写入会话变量 */
78
+ /** 所有查询共享此边界;repeatable read 用于多次读取必须看到同一快照的关联/导出场景。 */
30
79
  async tx(ctx, fn, isolation = 'read committed') {
31
80
  return this.k.readDb
32
81
  .transaction()
@@ -37,12 +86,14 @@ export class ReadSide {
37
86
  return fn(tx);
38
87
  });
39
88
  }
89
+ /** 解析注册聚合,未知名称统一 NOT_FOUND,不暴露内部注册细节。 */
40
90
  agg(a) {
41
91
  const agg = typeof a === 'string' ? this.k.registry.aggregate(a) : a;
42
92
  if (!agg)
43
93
  throw cageError('NOT_FOUND');
44
94
  return agg;
45
95
  }
96
+ /** read/export 能力与数据范围分开检查;通过此函数不意味着某条记录可见。 */
46
97
  need(ctx, cap) {
47
98
  if (!ctx.actor || ctx.actor.kind === 'anonymous')
48
99
  throw cageError('UNAUTHENTICATED');
@@ -50,46 +101,49 @@ export class ReadSide {
50
101
  throw cageError('FORBIDDEN', { capability: cap });
51
102
  }
52
103
  /** 明文读取敏感字段要写读审计 */
53
- async auditUnmask(agg, ctx, ids, kind) {
104
+ async auditUnmask(agg, ctx, ids, kind, metadata = {}, auditDb = this.k.app) {
54
105
  const kinds = [...new Set(Object.values(sensitiveFields(agg)))].filter((x) => ctx.unmask.includes(`${agg.name}.${x}`) || ctx.unmask.includes(`*.${x}`));
55
106
  if (kind === 'read' && kinds.length === 0)
56
107
  return;
57
- await this.k.writeAudit(this.k.app, {
58
- tenantId: ctx.tenantId, actor: ctx.actor?.id ?? 'anonymous', actorKind: ctx.actor?.kind ?? 'anonymous',
59
- onBehalfOf: ctx.onBehalfOf ?? null, source: ctx.source, kind: 'read',
60
- capability: `${agg.name}.${kind}`, command: null, aggregate: agg.name,
61
- aggregateId: ids.length === 1 ? ids[0] : null, result: 'ok',
62
- diff: { unmasked: kinds, rows: ids.length }, requestId: ctx.requestId ?? null, client: ctx.client ?? null,
63
- }).catch((e) => {
64
- // 导出会产生可离线保存的文件,审计失败不能交付文件;交给任务系统重试。
65
- if (kind === 'export')
66
- throw e;
67
- this.k.log.warn({ err: String(e) }, '读审计写入失败');
68
- });
108
+ try {
109
+ await this.k.writeAudit(auditDb, {
110
+ tenantId: ctx.tenantId, actor: ctx.actor?.id ?? 'anonymous', actorKind: ctx.actor?.kind ?? 'anonymous',
111
+ onBehalfOf: ctx.onBehalfOf ?? null, source: ctx.source, kind: 'read',
112
+ capability: `${agg.name}.${kind}`, command: null, aggregate: agg.name,
113
+ aggregateId: ids.length === 1 ? ids[0] : null, result: 'ok',
114
+ diff: { unmasked: kinds, rows: ids.length, ...metadata }, requestId: ctx.requestId ?? null, client: ctx.client ?? null,
115
+ });
116
+ }
117
+ catch {
118
+ this.k.log.error({ code: 'CAGE-AUDIT-001', aggregate: agg.name, kind, requestId: ctx.requestId }, '读取审计失败,未交付数据');
119
+ throw cageError('INTERNAL', { diagnostic: 'CAGE-AUDIT-001', phase: 'audit', operation: kind, retryable: true });
120
+ }
69
121
  }
122
+ /** 查询单条安全视图记录;非法 ID、范围外和不存在都按 NOT_FOUND 处理,明文审计后才交付。 */
70
123
  async get(a, id, ctx) {
71
124
  const agg = this.agg(a);
72
125
  this.need(ctx, `${agg.name}.read`);
73
- if (!/^[0-9a-f-]{36}$/i.test(id))
126
+ if (!z.uuid().safeParse(id).success)
74
127
  throw cageError('NOT_FOUND');
75
128
  const row = await this.tx(ctx, (tx) => tx.selectFrom(`safe.${agg.table.name}`).selectAll().where('id', '=', id).executeTakeFirst());
76
129
  if (!row)
77
130
  throw cageError('NOT_FOUND');
78
- void this.auditUnmask(agg, ctx, [id], 'read');
131
+ await this.auditUnmask(agg, ctx, [id], 'read');
79
132
  return viewRowToObject(row);
80
133
  }
134
+ /** 普通页面最多每页 200 条;输出由安全视图已掩码,关联集合需另调 related。 */
81
135
  async list(a, params, ctx) {
82
136
  const agg = this.agg(a);
83
137
  this.need(ctx, `${agg.name}.read`);
84
138
  const res = await this.tx(ctx, (tx) => this.listIn(tx, agg, params, 200));
85
- void this.auditUnmask(agg, ctx, res.items.map((r) => r.id), 'read');
139
+ await this.auditUnmask(agg, ctx, res.items.map((r) => r.id), 'read');
86
140
  return res;
87
141
  }
88
142
  /** 关联按需分页:先确认所属对象可见,再从目标安全视图读取;两侧能力、范围和掩码都生效。 */
89
143
  async related(a, id, fieldName, params, ctx) {
90
144
  const owner = this.agg(a), field = owner.fields[fieldName];
91
145
  this.need(ctx, `${owner.name}.read`);
92
- if (!field || !isRelation(field) || !/^[0-9a-f-]{36}$/i.test(id))
146
+ if (!field || !isRelation(field) || !z.uuid().safeParse(id).success)
93
147
  throw cageError('NOT_FOUND');
94
148
  const target = this.agg(field.ref);
95
149
  this.need(ctx, `${target.name}.read`);
@@ -103,39 +157,58 @@ export class ReadSide {
103
157
  : (q) => q.where('id', 'in', tx.selectFrom(`safe.${table.name}`).select('target_id').where('source_id', '=', id));
104
158
  return this.listIn(tx, target, params, 200, true, restrict);
105
159
  }, 'repeatable read');
106
- void this.auditUnmask(target, ctx, res.items.map((row) => row.id), 'read');
160
+ await this.auditUnmask(target, ctx, res.items.map((row) => row.id), 'read');
107
161
  return res;
108
162
  }
163
+ /**
164
+ * 构造安全视图分页和同口径计数,restrict 让关联读取复用相同过滤逻辑。
165
+ * 隐藏、敏感、JSON 和集合字段不能被普通等值筛选旁路探测;默认排除 deleted。
166
+ * 排序追加 id 作为稳定次序;时间窗口为 createdAfter 含边界、createdBefore 不含边界。
167
+ */
109
168
  async listIn(tx, agg, params, maxPageSize, count = true, restrict = (q) => q) {
110
- const page = Math.max(1, Number(params.page ?? 1) || 1);
111
- const pageSize = Math.min(maxPageSize, Math.max(1, Number(params.pageSize ?? 20) || 20));
169
+ const page = pageNumber(params.page, 'page', 1);
170
+ const pageSize = Math.min(maxPageSize, pageNumber(params.pageSize, 'pageSize', 20));
171
+ if (!Number.isSafeInteger((page - 1) * pageSize))
172
+ invalid('page', '分页偏移超过安全整数范围');
173
+ const after = params.createdAfter === undefined ? undefined : dateParam(params.createdAfter, 'createdAfter');
174
+ const before = params.createdBefore === undefined ? undefined : dateParam(params.createdBefore, 'createdBefore');
175
+ if (after && before && after >= before)
176
+ invalid('createdBefore', '必须晚于 createdAfter');
112
177
  const hidden = new Set(hiddenFields(agg));
113
178
  const view = `safe.${agg.table.name}`;
114
179
  const apply = (q) => {
115
180
  for (const [k, v] of Object.entries(params)) {
116
- if (RESERVED.has(k) || v === undefined || v === '')
181
+ if (RESERVED.has(k) || v === undefined)
117
182
  continue;
118
183
  const f = agg.fields[k];
119
184
  const col = SYS[k] ?? (f && !isRelation(f) && !hidden.has(k) && f.sql !== 'jsonb' && !f.sensitiveKind ? snake(k) : undefined);
120
185
  if (!col)
121
186
  throw cageError('INVALID_INPUT', [{ path: k, message: `不能按 ${k} 过滤` }]);
122
- if (k === 'status' && typeof v === 'string' && v.includes(','))
123
- q = q.where('status', 'in', v.split(','));
187
+ if (k === 'status') {
188
+ if (typeof v !== 'string')
189
+ invalid(k, '状态必须为字符串');
190
+ const statuses = v.split(',');
191
+ if (statuses.some((status) => !agg.states.values.includes(status)))
192
+ invalid(k, '包含未声明的状态');
193
+ q = q.where('status', 'in', statuses);
194
+ }
124
195
  else
125
- q = q.where(sql.ref(col), '=', coerce(f?.kind ?? 'text', v));
196
+ q = q.where(sql.ref(col), '=', coerce(f, v, k));
126
197
  }
127
198
  if (params.status === undefined)
128
199
  q = q.where('status', '<>', 'deleted');
129
- if (params.createdAfter)
130
- q = q.where('created_at', '>=', new Date(String(params.createdAfter)));
131
- if (params.createdBefore)
132
- q = q.where('created_at', '<', new Date(String(params.createdBefore)));
200
+ if (after)
201
+ q = q.where('created_at', '>=', after);
202
+ if (before)
203
+ q = q.where('created_at', '<', before);
133
204
  return restrict(q);
134
205
  };
135
206
  let q = apply(tx.selectFrom(view).selectAll());
136
- const sortKey = typeof params.sort === 'string' && params.sort ? params.sort.replace(/^-/, '') : 'createdAt';
207
+ if (params.sort !== undefined && (typeof params.sort !== 'string' || !params.sort))
208
+ invalid('sort', '必须为非空字段名');
209
+ const sortKey = typeof params.sort === 'string' ? params.sort.replace(/^-/, '') : 'createdAt';
137
210
  const sortField = agg.fields[sortKey];
138
- const sortCol = SYS[sortKey] ?? (sortField && !isRelation(sortField) && !hidden.has(sortKey) ? snake(sortKey) : undefined);
211
+ const sortCol = SYS[sortKey] ?? (sortField && !isRelation(sortField) && !hidden.has(sortKey) && sortField.sql !== 'jsonb' ? snake(sortKey) : undefined);
139
212
  if (!sortCol)
140
213
  throw cageError('INVALID_INPUT', [{ path: 'sort', message: `不能按 ${sortKey} 排序` }]);
141
214
  const desc = typeof params.sort === 'string' ? params.sort.startsWith('-') : true;
@@ -149,7 +222,7 @@ export class ReadSide {
149
222
  * 上限用于约束单任务内存与数据库文件存储;超限明确失败,绝不能静默截断成“成功文件”。
150
223
  * HTTP 只提交任务,保留本方法供受控的服务端调用。
151
224
  */
152
- async export(a, params, ctx) {
225
+ async export(a, params, ctx, auditTransaction) {
153
226
  const agg = this.agg(a);
154
227
  this.need(ctx, `${agg.name}.export`);
155
228
  const cols = ['id', ...Object.entries(agg.fields).filter(([, f]) => !f.isHidden && !isRelation(f)).map(([k]) => k), 'status', 'version', 'createdAt', 'updatedAt'];
@@ -173,10 +246,15 @@ export class ReadSide {
173
246
  }
174
247
  }
175
248
  }, 'repeatable read');
176
- await this.auditUnmask(agg, ctx, ids, 'export');
249
+ // worker 已持有任务事务时,生成审计与文件持久化共同提交,不能再向同一 app 池领取连接。
250
+ await this.auditUnmask(agg, ctx, ids, 'export', {}, auditTransaction);
177
251
  return { filename: `${agg.table.name}.csv`, contentType: 'text/csv; charset=utf-8', body: lines.join('\n'), rows: ids.length };
178
252
  }
179
253
  /** 执行 query 声明:需要 reads 里每个聚合的 read 能力;手写 SQL 用 :name 占位,全部参数化 */
254
+ /**
255
+ * SQL/build 在只读事务中执行;任意报表无法反推出全部对象 ID,因此按声明 reads 保守记录明文审计。
256
+ * audit.purpose 另形成用途审计,任一可靠审计失败都会阻止交付,不能以空结果冒充成功。
257
+ */
180
258
  async run(q, raw, ctx) {
181
259
  const query = typeof q === 'string' ? this.k.registry.queries.find((x) => x.name === q) : q;
182
260
  if (!query)
@@ -194,10 +272,29 @@ export class ReadSide {
194
272
  const r = await compiled.execute(tx);
195
273
  return r.rows;
196
274
  });
275
+ // 任意报表无法可靠推导对象 ID,按 query 用途、涉及聚合及结果行数记录。
276
+ // 即使无法静态判定 SELECT 是否投影了明文,也不得让自定义查询绕过敏感读取审计。
277
+ for (const aggregate of query.reads)
278
+ await this.auditUnmask(aggregate, ctx, [], 'read', { query: query.name, rows: rows.length, purpose: query.audit?.purpose });
279
+ if (query.audit) {
280
+ try {
281
+ await this.k.writeAudit(this.k.app, {
282
+ tenantId: ctx.tenantId, actor: ctx.actor.id, actorKind: ctx.actor.kind, source: ctx.source,
283
+ kind: 'read', capability: `query:${query.name}`, aggregate: null, result: 'ok',
284
+ diff: { query: query.name, purpose: query.audit.purpose, rows: rows.length, reads: query.reads.map((a) => a.name) },
285
+ requestId: ctx.requestId ?? null, client: ctx.client ?? null,
286
+ });
287
+ }
288
+ catch {
289
+ this.k.log.error({ code: 'CAGE-AUDIT-001', operation: `query:${query.name}`, requestId: ctx.requestId }, '查询用途审计失败,未交付数据');
290
+ throw cageError('INTERNAL', { diagnostic: 'CAGE-AUDIT-001', phase: 'audit', operation: `query:${query.name}`, retryable: true });
291
+ }
292
+ }
197
293
  return rows.map(viewRowToObject);
198
294
  }
199
295
  }
200
296
  /** :name 占位 → 参数化 SQL(:: 类型转换不受影响) */
297
+ /** SQL 模板必须来自可信声明,用户只能提供占位参数;缺少命名参数立即报 INVALID_INPUT。 */
201
298
  export function compileNamedSql(text, input) {
202
299
  const parts = [];
203
300
  const re = /(?<![:\w]):([a-zA-Z_][a-zA-Z0-9_]*)/g;
@@ -213,5 +310,6 @@ export function compileNamedSql(text, input) {
213
310
  parts.push(sql.raw(text.slice(last)));
214
311
  return sql `${sql.join(parts, sql.raw(''))}`;
215
312
  }
313
+ /** 外层接收字段名动态的查询参数;具体白名单、类型、分页边界在 listIn 中结合聚合校验。 */
216
314
  export const listParamsSchema = z.record(z.string(), z.unknown());
217
315
  //# sourceMappingURL=read.js.map
package/dist/read.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"}
@@ -3,61 +3,99 @@ import { type AnyAggregate } from './primitives/aggregate.js';
3
3
  import type { AnyCommand } from './primitives/command.js';
4
4
  import type { AnyEvent } from './primitives/event.js';
5
5
  import type { AnyQuery, AnyReaction, Approval, Job } from './primitives/flow.js';
6
+ import type { BusinessProcess } from './primitives/business-process.js';
6
7
  export interface RegisteredCommand {
8
+ /** 原始命令声明,保留聚合、输入与 handler 等执行规格。 */
7
9
  readonly cmd: AnyCommand;
8
10
  /** 命令名(导出名或显式 name) */
9
11
  readonly name: string;
10
12
  /** 能力点:聚合名.命令名 */
11
13
  readonly capability: string;
14
+ /** 发现声明时使用的 domain 导出名,用于诊断及来源定位;可与显式命令名不同。 */
12
15
  readonly exportName: string;
13
16
  }
17
+ /** 可授予能力的目录条目;目录声明不等于任何用户/角色已获得该能力。 */
14
18
  export interface CatalogEntry {
19
+ /** 稳定能力字符串,如聚合.read 或聚合.命令名;显示文字不能替代此标识。 */
15
20
  capability: string;
21
+ /** 区分命令、读取、导出、敏感明文及系统能力,以便工具和管理界面分类。 */
16
22
  kind: 'command' | 'read' | 'export' | 'unmask' | 'system';
23
+ /** 能力所属聚合名;独立系统能力可省略。 */
17
24
  aggregate?: string;
25
+ /** 来自声明的可选公开说明,不参与授权判定。 */
18
26
  description?: string;
19
27
  /** 命令的调用方限制,管理界面据此提示 */
20
28
  invokedBy?: readonly string[];
21
29
  }
30
+ /** 可选包通过品牌协议进入注册表,内核保存描述,实际装配由 HTTP/worker 对应适配器完成。 */
22
31
  export interface RuntimeExtension {
23
- kind: 'CONNECTOR' | 'OUTBOUND' | 'INBOUND' | 'ROUTE';
32
+ /** 扩展声明品牌种类,决定由连接器、审批或运行时适配器解释。 */
33
+ kind: 'CONNECTOR' | 'OUTBOUND' | 'INBOUND' | 'ROUTE' | 'RUNTIME';
34
+ /** 从 domain 导出确定的扩展名称,供诊断和装配引用。 */
24
35
  name: string;
36
+ /** 扩展包拥有的声明对象,内核只按品牌协议接入,不复制其业务逻辑。 */
25
37
  value: any;
26
38
  }
39
+ /**
40
+ * 当前 domain 导出的运行规格及索引,API、worker、DDL 和 CLI 应使用同一份版本。
41
+ * 对象身份用于识别重复 re-export 和引用关系;字符串 capability 用于协议调用及授权。
42
+ */
27
43
  export interface Registry {
44
+ /** 已去重且校验过的聚合声明集合,用于路由、schema 与读侧。 */
28
45
  readonly aggregates: readonly AnyAggregate[];
46
+ /** 命令声明及解析后的名称/能力索引,不包含未导出的模块局部变量。 */
29
47
  readonly commands: readonly RegisteredCommand[];
48
+ /** 可被 emits 引用的事件声明,载荷与版本由声明决定。 */
30
49
  readonly events: readonly AnyEvent[];
50
+ /** 已命名反应与原始声明,执行顺序由规则决定,不能按数组书写位置推断事务顺序。 */
31
51
  readonly reactions: readonly {
32
52
  r: AnyReaction;
33
53
  name: string;
34
54
  }[];
55
+ /** 已注册只读查询声明;运行时仍校验 reads 能力及输入。 */
35
56
  readonly queries: readonly AnyQuery[];
57
+ /** 聚合审批声明与导出名,实际选人由对应审批路由实现。 */
36
58
  readonly approvals: readonly {
37
59
  a: Approval;
38
60
  name: string;
39
61
  }[];
62
+ /** 已注册定时任务规格;注册不等于调度器正在运行。 */
40
63
  readonly jobs: readonly Job[];
64
+ /** 用于业务图谱和规则检查的流程说明,不代替真实命令/事件执行。 */
65
+ readonly businessProcesses: readonly BusinessProcess[];
66
+ /** 可选包声明的统一接入口,实际服务由宿主装配。 */
41
67
  readonly extensions: readonly RuntimeExtension[];
68
+ /** 框架及扩展提供的系统建表片段,用于准备 schema,不在建注册表时执行。 */
42
69
  readonly systemDdl: readonly string[];
70
+ /** 扩展提供的具名系统迁移,数据库应用与历史校验在迁移层进行。 */
71
+ readonly systemMigrations: readonly {
72
+ name: string;
73
+ sql: string;
74
+ }[];
75
+ /** 按注册聚合名查询,未知返回 undefined。 */
43
76
  aggregate(name: string): AnyAggregate | undefined;
44
77
  /** 按能力点或命令对象找命令 */
45
78
  command(ref: string | AnyCommand): RegisteredCommand | undefined;
79
+ /** 取得已注册命令的能力字符串;陌生命令抛出声明错误而非生成临时权限。 */
46
80
  capabilityOf(cmd: AnyCommand): string;
47
81
  /** 任意原语对象的导出名 */
48
82
  nameOf(v: object): string | undefined;
83
+ /** 返回订阅指定事件的反应,供内核与 worker 筛选并执行。 */
49
84
  reactionsFor(eventName: string): {
50
85
  r: AnyReaction;
51
86
  name: string;
52
87
  }[];
88
+ /** 按聚合查找其审批声明,没有配置时返回 undefined。 */
53
89
  approvalFor(aggName: string): {
54
90
  a: Approval;
55
91
  name: string;
56
92
  } | undefined;
93
+ /** 按流程标识查审批声明,供路由与引擎装配校验。 */
57
94
  approvalByProcess(process: string): {
58
95
  a: Approval;
59
96
  name: string;
60
97
  } | undefined;
98
+ /** 派生全部可用能力的目录;返回可授予项,不意味着任何账号已获授权。 */
61
99
  capabilityCatalog(): CatalogEntry[];
62
100
  /** 带 CONSUMERS 标记的声明对象(连接器出站映射等) */
63
101
  consumerProviders(): any[];
@@ -67,5 +105,17 @@ export interface RegistryOptions {
67
105
  extraCapabilities?: CatalogEntry[];
68
106
  }
69
107
  /** 遍历一个或多个 domain 模块的导出,建立注册表。 */
108
+ /**
109
+ * 分三阶段建立注册表:收集品牌声明和扩展迁移,校验跨声明引用/命名/步骤顺序,建立查询索引。
110
+ * 同一对象重复导出保留首次名称,不同对象撞聚合名或能力名则立即失败;引用到未导出的实现也拒绝。
111
+ * 完成基础一致性后执行可选扩展 validate,防止服务在启动或消费事件时才发现缺失配置。
112
+ * 此过程不连数据库,但扩展的元数据回调必须保持声明期无业务副作用。
113
+ */
70
114
  export declare function buildRegistry(domains: object | object[], opts?: RegistryOptions): Registry;
71
115
  export { CONNECTOR, INBOUND, OUTBOUND, ROUTE };
116
+ /** 同一编译产物的声明指纹,用于发现 API/worker 加载版本错配;不是任意 JS 等价性证明。 */
117
+ /**
118
+ * 按稳定键序列化结构、schema 和执行回调源码再做 SHA-256;源码文本变化可能影响结果。
119
+ * 指纹只比较进程实际装载规格,不能证明任意两段 JavaScript 语义等价,也不代表数据库已迁移。
120
+ */
121
+ export declare function registryFingerprint(registry: Registry): string;