@cosmicdrift/kumiko-framework 0.305.0 → 0.307.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 (87) hide show
  1. package/package.json +4 -4
  2. package/src/api/__tests__/redis-sse-broker.integration.test.ts +66 -0
  3. package/src/api/__tests__/server-boot-guards.test.ts +1 -0
  4. package/src/api/__tests__/server-error-logging.test.ts +71 -0
  5. package/src/api/__tests__/sse-broker.test.ts +49 -0
  6. package/src/api/redis-sse-broker.ts +17 -3
  7. package/src/api/request-context.ts +29 -4
  8. package/src/api/routes.ts +26 -1
  9. package/src/api/sse-broker.ts +29 -11
  10. package/src/bun-db/__tests__/closed-connection-retry.integration.test.ts +159 -0
  11. package/src/bun-db/__tests__/select-many-retry.integration.test.ts +138 -0
  12. package/src/bun-db/query.ts +42 -18
  13. package/src/changes.json +92 -0
  14. package/src/db/__tests__/pg-error.test.ts +14 -0
  15. package/src/db/__tests__/system-db-view-export.test.ts +107 -0
  16. package/src/db/__tests__/tenant-db-no-raw.test.ts +10 -0
  17. package/src/db/__tests__/with-systemdb-unsafe-raw-grant.test.ts +71 -0
  18. package/src/db/index.ts +1 -1
  19. package/src/db/pg-error.ts +13 -0
  20. package/src/db/queries/__tests__/{unsafe-read-retrying.test.ts → unsafe-read-retrying.integration.test.ts} +28 -28
  21. package/src/db/queries/event-consumer.ts +57 -3
  22. package/src/db/queries/event-store.ts +69 -0
  23. package/src/db/tenant-db.ts +133 -18
  24. package/src/engine/__tests__/boot-validator-gdpr-storage.test.ts +6 -1
  25. package/src/engine/__tests__/boot-validator-s0-integration.test.ts +2 -2
  26. package/src/engine/__tests__/boot-validator.test.ts +1 -1
  27. package/src/engine/__tests__/tier-resolver-extension.test.ts +1 -1
  28. package/src/engine/extension-names.ts +55 -25
  29. package/src/engine/extensions/storage-provider.ts +14 -41
  30. package/src/engine/extensions/tenant-data.ts +4 -0
  31. package/src/engine/extensions/tenant-resource.ts +40 -0
  32. package/src/engine/extensions/user-data.ts +8 -7
  33. package/src/engine/feature-ast/__tests__/handler-header-roundtrip.test.ts +669 -0
  34. package/src/engine/feature-ast/__tests__/parse.test.ts +5 -3
  35. package/src/engine/feature-ast/__tests__/patch-update.test.ts +718 -0
  36. package/src/engine/feature-ast/__tests__/pattern-change-schema.test.ts +819 -0
  37. package/src/engine/feature-ast/entity-field-types.ts +41 -0
  38. package/src/engine/feature-ast/extractors/handlers.ts +217 -84
  39. package/src/engine/feature-ast/extractors/hooks.ts +72 -15
  40. package/src/engine/feature-ast/extractors/round2.ts +21 -0
  41. package/src/engine/feature-ast/extractors/shared.ts +9 -0
  42. package/src/engine/feature-ast/index.ts +11 -1
  43. package/src/engine/feature-ast/patch.ts +338 -5
  44. package/src/engine/feature-ast/patcher.ts +2 -2
  45. package/src/engine/feature-ast/pattern-change-schema.ts +1411 -0
  46. package/src/engine/feature-ast/patterns.ts +22 -15
  47. package/src/engine/feature-ast/render.ts +1 -0
  48. package/src/engine/feature-ui-extensions.ts +8 -7
  49. package/src/engine/index.ts +21 -5
  50. package/src/engine/types/extension-options-map.ts +1 -0
  51. package/src/engine/types/index.ts +6 -0
  52. package/src/event-store/__tests__/event-attribution.integration.test.ts +53 -3
  53. package/src/event-store/admin-api.ts +5 -0
  54. package/src/event-store/event-store.ts +16 -7
  55. package/src/jobs/__tests__/job-public-intake-origin.integration.test.ts +536 -0
  56. package/src/jobs/__tests__/job-retention.integration.test.ts +316 -0
  57. package/src/jobs/__tests__/job-retry-enqueue-paths.integration.test.ts +309 -0
  58. package/src/jobs/__tests__/jobs.integration.test.ts +3 -3
  59. package/src/jobs/job-runner.ts +211 -19
  60. package/src/pipeline/__tests__/ctx-bridge.integration.test.ts +113 -26
  61. package/src/pipeline/__tests__/dispatcher-utils.test.ts +8 -0
  62. package/src/pipeline/__tests__/dispatcher.test.ts +5 -0
  63. package/src/pipeline/__tests__/event-dispatcher-commit-order.integration.test.ts +278 -0
  64. package/src/pipeline/__tests__/event-dispatcher-delivery-max-attempts.test.ts +1 -0
  65. package/src/pipeline/__tests__/event-dispatcher-lifecycle.integration.test.ts +6 -6
  66. package/src/pipeline/__tests__/event-dispatcher-per-consumer-turns.integration.test.ts +126 -0
  67. package/src/pipeline/__tests__/hook-systemdb-escape-hatch.integration.test.ts +246 -0
  68. package/src/pipeline/__tests__/idempotency-transient-failure.integration.test.ts +198 -0
  69. package/src/pipeline/__tests__/public-intake-runtime-gate.integration.test.ts +261 -2
  70. package/src/pipeline/__tests__/redis-pipeline.integration.test.ts +59 -0
  71. package/src/pipeline/dispatch-batch.ts +102 -29
  72. package/src/pipeline/dispatch-stream.ts +7 -3
  73. package/src/pipeline/dispatcher-utils.ts +21 -2
  74. package/src/pipeline/dispatcher.ts +71 -6
  75. package/src/pipeline/event-consumer-state.ts +26 -0
  76. package/src/pipeline/event-dispatcher-admin.ts +32 -5
  77. package/src/pipeline/event-dispatcher-delivery.ts +109 -57
  78. package/src/pipeline/event-dispatcher.ts +167 -50
  79. package/src/pipeline/idempotency.ts +16 -0
  80. package/src/pipeline/pending-gap-ranges.ts +72 -0
  81. package/src/pipeline/system-hooks.ts +8 -1
  82. package/src/pipeline/system-identity-switch.ts +22 -4
  83. package/src/pipeline/write-origin.ts +31 -10
  84. package/src/stack/test-stack.ts +1 -1
  85. package/src/testing/closed-connection-error.ts +62 -0
  86. package/src/testing/index.ts +1 -0
  87. package/src/bun-db/__tests__/select-many-retry.test.ts +0 -79
@@ -1,79 +0,0 @@
1
- // #1163: Bun.SQL can hand out a closed connection under load (AbortError
2
- // "The connection was closed."). Pure reads retry exactly once on a fresh
3
- // pool checkout; tx handles, non-matching errors, and genuine user aborts
4
- // must NOT retry.
5
-
6
- import { describe, expect, test } from "bun:test";
7
- import { buildEntityTable } from "../../db/table-builder";
8
- import { selectMany } from "../query";
9
-
10
- function closedConnectionError(): Error {
11
- return Object.assign(new Error("The connection was closed."), { name: "AbortError" });
12
- }
13
-
14
- type FakeClient = {
15
- unsafe: (sql: string, params?: readonly unknown[]) => Promise<readonly unknown[]>;
16
- begin?: () => never;
17
- calls: number;
18
- };
19
-
20
- function fakeClient(failures: Error[], opts: { tx?: boolean } = {}): FakeClient {
21
- const remaining = [...failures];
22
- const client: FakeClient = {
23
- calls: 0,
24
- unsafe: async () => {
25
- client.calls++;
26
- const err = remaining.shift();
27
- if (err) throw err;
28
- return [{ id: "r1", title: "ok", tenant_id: "t1", inserted_at: null, updated_at: null }];
29
- },
30
- };
31
- // A top-level pool client has begin(); a transaction handle does not.
32
- if (!opts.tx)
33
- client.begin = () => {
34
- throw new Error("not used in test");
35
- };
36
- return client;
37
- }
38
-
39
- const table = buildEntityTable("note", {
40
- fields: { title: { type: "text", required: true } },
41
- });
42
-
43
- describe("selectMany — closed-connection retry (#1163)", () => {
44
- test("retries once on AbortError 'connection was closed' and returns rows", async () => {
45
- const db = fakeClient([closedConnectionError()]);
46
- const rows = await selectMany(db, table);
47
- expect(rows).toHaveLength(1);
48
- expect(rows[0]?.title).toBe("ok");
49
- expect(db.calls).toBe(2);
50
- });
51
-
52
- test("gives up after the single retry when the connection stays closed", async () => {
53
- const db = fakeClient([closedConnectionError(), closedConnectionError()]);
54
- await expect(selectMany(db, table)).rejects.toThrow("connection was closed");
55
- expect(db.calls).toBe(2);
56
- });
57
-
58
- test("never retries on a transaction handle (no begin)", async () => {
59
- const db = fakeClient([closedConnectionError()], { tx: true });
60
- await expect(selectMany(db, table)).rejects.toThrow("connection was closed");
61
- expect(db.calls).toBe(1);
62
- });
63
-
64
- test("does not retry a genuine user abort (different message)", async () => {
65
- const userAbort = Object.assign(new Error("The operation was aborted."), {
66
- name: "AbortError",
67
- });
68
- const db = fakeClient([userAbort]);
69
- await expect(selectMany(db, table)).rejects.toThrow("operation was aborted");
70
- expect(db.calls).toBe(1);
71
- });
72
-
73
- test("does not retry generic query errors", async () => {
74
- const syntax = Object.assign(new Error("syntax error at or near"), { name: "PostgresError" });
75
- const db = fakeClient([syntax]);
76
- await expect(selectMany(db, table)).rejects.toThrow("syntax error");
77
- expect(db.calls).toBe(1);
78
- });
79
- });