@bett3r-dev/pv3-types 1.0.0 → 1.11.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 (137) hide show
  1. package/CHANGELOG.md +305 -0
  2. package/build/adminPlugin.d.ts +24 -0
  3. package/build/adminPlugin.d.ts.map +1 -0
  4. package/build/{eventsourcing/utils.js → adminPlugin.js} +1 -1
  5. package/build/adminPlugin.js.map +1 -0
  6. package/build/aggregateSchema.d.ts +94 -0
  7. package/build/aggregateSchema.d.ts.map +1 -0
  8. package/build/aggregateSchema.js +287 -0
  9. package/build/aggregateSchema.js.map +1 -0
  10. package/build/authentication.d.ts +179 -78
  11. package/build/authentication.d.ts.map +1 -1
  12. package/build/authentication.js +62 -19
  13. package/build/authentication.js.map +1 -1
  14. package/build/cache.d.ts +50 -4
  15. package/build/cache.d.ts.map +1 -1
  16. package/build/clusterAdministration.d.ts +712 -225
  17. package/build/clusterAdministration.d.ts.map +1 -1
  18. package/build/clusterAdministration.js +175 -52
  19. package/build/clusterAdministration.js.map +1 -1
  20. package/build/configuration.d.ts +26 -5
  21. package/build/configuration.d.ts.map +1 -1
  22. package/build/database.d.ts +240 -56
  23. package/build/database.d.ts.map +1 -1
  24. package/build/database.js +102 -20
  25. package/build/database.js.map +1 -1
  26. package/build/endpoints.d.ts +141 -41
  27. package/build/endpoints.d.ts.map +1 -1
  28. package/build/endpoints.js +50 -26
  29. package/build/endpoints.js.map +1 -1
  30. package/build/errors.d.ts +166 -0
  31. package/build/errors.d.ts.map +1 -0
  32. package/build/errors.js +276 -0
  33. package/build/errors.js.map +1 -0
  34. package/build/evenstore.d.ts +47 -7
  35. package/build/evenstore.d.ts.map +1 -1
  36. package/build/eventsourcing/aggregateBuilder.d.ts +17 -8
  37. package/build/eventsourcing/aggregateBuilder.d.ts.map +1 -1
  38. package/build/eventsourcing/commandBuilder.d.ts +20 -13
  39. package/build/eventsourcing/commandBuilder.d.ts.map +1 -1
  40. package/build/eventsourcing/commandHandlers.d.ts +155 -33
  41. package/build/eventsourcing/commandHandlers.d.ts.map +1 -1
  42. package/build/eventsourcing/commandHandlers.js +62 -14
  43. package/build/eventsourcing/commandHandlers.js.map +1 -1
  44. package/build/eventsourcing/eventHandlers.d.ts +173 -44
  45. package/build/eventsourcing/eventHandlers.d.ts.map +1 -1
  46. package/build/eventsourcing/eventHandlers.js +29 -21
  47. package/build/eventsourcing/eventHandlers.js.map +1 -1
  48. package/build/eventsourcing/eventHandlersBuilder.d.ts +18 -12
  49. package/build/eventsourcing/eventHandlersBuilder.d.ts.map +1 -1
  50. package/build/eventsourcing/eventHandlersBuilder.js.map +1 -1
  51. package/build/eventsourcing/eventsourcing.types.d.ts +322 -0
  52. package/build/eventsourcing/eventsourcing.types.d.ts.map +1 -0
  53. package/build/eventsourcing/eventsourcing.types.js +26 -0
  54. package/build/eventsourcing/eventsourcing.types.js.map +1 -0
  55. package/build/eventsourcing/externalSystemBuilder.d.ts +8 -7
  56. package/build/eventsourcing/externalSystemBuilder.d.ts.map +1 -1
  57. package/build/eventsourcing/index.d.ts +2 -378
  58. package/build/eventsourcing/index.d.ts.map +1 -1
  59. package/build/eventsourcing/index.js +2 -23
  60. package/build/eventsourcing/index.js.map +1 -1
  61. package/build/eventsourcing/invariants.d.ts +34 -10
  62. package/build/eventsourcing/invariants.d.ts.map +1 -1
  63. package/build/eventsourcing/shapeChangeForSubscriber.d.ts +33 -0
  64. package/build/eventsourcing/shapeChangeForSubscriber.d.ts.map +1 -0
  65. package/build/eventsourcing/shapeChangeForSubscriber.js +47 -0
  66. package/build/eventsourcing/shapeChangeForSubscriber.js.map +1 -0
  67. package/build/index.d.ts +6 -1
  68. package/build/index.d.ts.map +1 -1
  69. package/build/index.js +6 -1
  70. package/build/index.js.map +1 -1
  71. package/build/infrastructure.d.ts +9 -1
  72. package/build/infrastructure.d.ts.map +1 -1
  73. package/build/infrastructure.js +33 -1
  74. package/build/infrastructure.js.map +1 -1
  75. package/build/livenessWatchdog.d.ts +28 -0
  76. package/build/livenessWatchdog.d.ts.map +1 -0
  77. package/build/livenessWatchdog.js +43 -0
  78. package/build/livenessWatchdog.js.map +1 -0
  79. package/build/logger.d.ts +8 -9
  80. package/build/logger.d.ts.map +1 -1
  81. package/build/logger.js +18 -6
  82. package/build/logger.js.map +1 -1
  83. package/build/outboxManager.d.ts +858 -14
  84. package/build/outboxManager.d.ts.map +1 -1
  85. package/build/outboxManager.js +173 -15
  86. package/build/outboxManager.js.map +1 -1
  87. package/build/permissions.d.ts +47 -0
  88. package/build/permissions.d.ts.map +1 -0
  89. package/build/permissions.js +3 -0
  90. package/build/permissions.js.map +1 -0
  91. package/build/ports.d.ts +10 -10
  92. package/build/ports.d.ts.map +1 -1
  93. package/build/routesAuth.d.ts +17 -25
  94. package/build/routesAuth.d.ts.map +1 -1
  95. package/build/routesAuth.js +4 -14
  96. package/build/routesAuth.js.map +1 -1
  97. package/build/typedEventEmitter.d.ts +7 -13
  98. package/build/typedEventEmitter.d.ts.map +1 -1
  99. package/build/typedEventEmitter.js +2 -2
  100. package/build/typedEventEmitter.js.map +1 -1
  101. package/build/userSession.d.ts +8 -0
  102. package/build/userSession.d.ts.map +1 -0
  103. package/build/userSession.js +3 -0
  104. package/build/userSession.js.map +1 -0
  105. package/package.json +22 -7
  106. package/build/eventsourcing/utils.d.ts +0 -4
  107. package/build/eventsourcing/utils.d.ts.map +0 -1
  108. package/build/eventsourcing/utils.js.map +0 -1
  109. package/build/validation.d.ts +0 -64
  110. package/build/validation.d.ts.map +0 -1
  111. package/build/validation.js +0 -57
  112. package/build/validation.js.map +0 -1
  113. package/src/authentication.ts +0 -273
  114. package/src/cache.ts +0 -109
  115. package/src/clusterAdministration.ts +0 -216
  116. package/src/configuration.ts +0 -71
  117. package/src/database.ts +0 -157
  118. package/src/endpoints.ts +0 -198
  119. package/src/evenstore.ts +0 -27
  120. package/src/eventsourcing/aggregateBuilder.ts +0 -11
  121. package/src/eventsourcing/commandBuilder.ts +0 -64
  122. package/src/eventsourcing/commandHandlers.ts +0 -137
  123. package/src/eventsourcing/eventHandlers.ts +0 -118
  124. package/src/eventsourcing/eventHandlersBuilder.ts +0 -42
  125. package/src/eventsourcing/externalSystemBuilder.ts +0 -20
  126. package/src/eventsourcing/index.ts +0 -111
  127. package/src/eventsourcing/invariants.ts +0 -27
  128. package/src/eventsourcing/utils.ts +0 -4
  129. package/src/index.ts +0 -15
  130. package/src/infrastructure.ts +0 -41
  131. package/src/logger.ts +0 -45
  132. package/src/outboxManager.ts +0 -36
  133. package/src/ports.ts +0 -42
  134. package/src/routesAuth.ts +0 -58
  135. package/src/typedEventEmitter.ts +0 -73
  136. package/src/validation.ts +0 -89
  137. package/tsconfig.json +0 -15
package/CHANGELOG.md ADDED
@@ -0,0 +1,305 @@
1
+ # @bett3r-dev/pv3-types
2
+
3
+ <!-- MONOWEAVE:BELOW -->
4
+
5
+ ## [1.11.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.10.0...@bett3r-dev/pv3-types@1.11.0) "@bett3r-dev/pv3-types" (9/20/2026) <a name="1.11.0"></a>
6
+
7
+ ### Changes
8
+
9
+ * feat(eventsourcing): add .stateStored as the named way to declare a state-stored aggregate ([87c7418c](git+https://github.com/bett3r-dev/pv3/commits/87c7418c))
10
+ * Oracle: packages/pv3-library-tests/src/__tests__/eventsourcing/users.aggregate.test.ts ([87c7418c](git+https://github.com/bett3r-dev/pv3/commits/87c7418c))
11
+
12
+
13
+ ## [1.10.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.9.0...@bett3r-dev/pv3-types@1.10.0) "@bett3r-dev/pv3-types" (9/13/2026) <a name="1.10.0"></a>
14
+
15
+ ### Changes
16
+
17
+ * feat(logger): per-module log levels via logger.moduleLevels ([201c6a68](git+https://github.com/bett3r-dev/pv3/commits/201c6a68))
18
+
19
+
20
+ ## [1.9.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.8.0...@bett3r-dev/pv3-types@1.9.0) "@bett3r-dev/pv3-types" (8/26/2026) <a name="1.9.0"></a>
21
+
22
+ ### Changes
23
+
24
+ * fix(validation): update ReadmodelDefaultQuerySchema to accept string or number for the `after` cursor ([2767dc66](git+https://github.com/bett3r-dev/pv3/commits/2767dc66))
25
+ * feat(eventsourcing): let a readmodel query declare its own HTTP visibility ([f95d49e1](git+https://github.com/bett3r-dev/pv3/commits/f95d49e1))
26
+
27
+
28
+ ## [1.8.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.7.0...@bett3r-dev/pv3-types@1.8.0) "@bett3r-dev/pv3-types" (8/25/2026) <a name="1.8.0"></a>
29
+
30
+ ### Changes
31
+
32
+ * feat(database): add aggregate operation with GROUP BY to the collection contract ([96d540b4](git+https://github.com/bett3r-dev/pv3/commits/96d540b4))
33
+ * Oracle: packages/pv3-adapter-database-postgres/__tests__/aggregate.deps.test.ts ([96d540b4](git+https://github.com/bett3r-dev/pv3/commits/96d540b4))
34
+ * feat(database): support count, min, max and avg with multi-key grouping ([5e1e7740](git+https://github.com/bett3r-dev/pv3/commits/5e1e7740))
35
+ * Oracle: packages/pv3-adapter-database-postgres/__tests__/aggregate.vocabulary.deps.test.ts ([5e1e7740](git+https://github.com/bett3r-dev/pv3/commits/5e1e7740))
36
+ * feat(database): reject a malformed aggregate spec before deriving from it ([c959d4ec](git+https://github.com/bett3r-dev/pv3/commits/c959d4ec))
37
+ * Oracle: packages/pv3-types/__tests__/aggregateSchema.validation.test.ts ([c959d4ec](git+https://github.com/bett3r-dev/pv3/commits/c959d4ec))
38
+ * feat(types): export deriveAggregateSchema from the public surface ([5673495f](git+https://github.com/bett3r-dev/pv3/commits/5673495f))
39
+ * Oracle: packages/pv3-types/__tests__/aggregateSchema.publicImport.test.ts ([5673495f](git+https://github.com/bett3r-dev/pv3/commits/5673495f))
40
+ * it: jest's `moduleNameMapper` key `@bett3r-dev/pv3-types` is substring-matched, ([5673495f](git+https://github.com/bett3r-dev/pv3/commits/5673495f))
41
+ * fix(types): a group key absent from a row is a nullable column ([0c588572](git+https://github.com/bett3r-dev/pv3/commits/0c588572))
42
+ * Oracle: the flipped case (f) in aggregate.groupkey.deps.test.ts ([0c588572](git+https://github.com/bett3r-dev/pv3/commits/0c588572))
43
+ * feat(database): filter, order and bound a grouped query ([c24d0855](git+https://github.com/bett3r-dev/pv3/commits/c24d0855))
44
+ * Oracle: packages/pv3-adapter-database-postgres/__tests__/aggregate.filterbounds.deps.test.ts ([c24d0855](git+https://github.com/bett3r-dev/pv3/commits/c24d0855))
45
+ * feat(eventsourcing): accept an aggregation spec over HTTP ([4fc44ff6](git+https://github.com/bett3r-dev/pv3/commits/4fc44ff6))
46
+ * Oracle: packages/pv3-library-tests/src/__tests__/eventsourcing/eventhandlers.aggregate.test.ts ([4fc44ff6](git+https://github.com/bett3r-dev/pv3/commits/4fc44ff6))
47
+ * fix(aggregate): close three findings from the whole-PR review ([4261a65a](git+https://github.com/bett3r-dev/pv3/commits/4261a65a))
48
+
49
+
50
+ ## [1.7.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.6.0...@bett3r-dev/pv3-types@1.7.0) "@bett3r-dev/pv3-types" (8/15/2026) <a name="1.7.0"></a>
51
+
52
+ ### Changes
53
+
54
+ * feat(deployment-units): emit linkedTo endpoints as manifest artifacts (TV1-2257) ([7b4a8d55](git+https://github.com/bett3r-dev/pv3/commits/7b4a8d55))
55
+ * Oracles: computeMDUs.test.ts (17/17), declarationSite.test.ts (6/6). ([7b4a8d55](git+https://github.com/bett3r-dev/pv3/commits/7b4a8d55))
56
+ * feat(pv3-types): add 'array' CLI arg type ([fc1e9c3a](git+https://github.com/bett3r-dev/pv3/commits/fc1e9c3a))
57
+ * feat(pv3-types): record a manual endpoint's route on its declaration site (TV1-2257) ([f59e5c47](git+https://github.com/bett3r-dev/pv3/commits/f59e5c47))
58
+ * feat(eventsourcing): give a readmodel query's formatter the caller it serves ([6a822e2f](git+https://github.com/bett3r-dev/pv3/commits/6a822e2f))
59
+ * Oracle: eventHandlers/__tests__/queryResponseFormatterCaller.test.ts (1 case, ([6a822e2f](git+https://github.com/bett3r-dev/pv3/commits/6a822e2f))
60
+ * here: it passes under an implementation that ignores the caller entirely. ([6a822e2f](git+https://github.com/bett3r-dev/pv3/commits/6a822e2f))
61
+ * feat(eventsourcing): shape realtime deltas per subscriber, not per change ([ba1a0868](git+https://github.com/bett3r-dev/pv3/commits/ba1a0868))
62
+ * feat(pv3-types): make a response formatter a synchronous function of ( data, caller ) ([cd3b556e](git+https://github.com/bett3r-dev/pv3/commits/cd3b556e))
63
+ * Oracle: `yarn build` (exit 0), not a test run — jest is transpile-only here, so ([cd3b556e](git+https://github.com/bett3r-dev/pv3/commits/cd3b556e))
64
+ * fix(pv3-types): declare the infrastructure adapter selector in the config schema ([73eebef7](git+https://github.com/bett3r-dev/pv3/commits/73eebef7))
65
+ * fix(eventsourcing): never let an absent caller skip per-subscriber shaping ([f8605f51](git+https://github.com/bett3r-dev/pv3/commits/f8605f51))
66
+ * fix(pv3-types): clean up optional properties in InfrastructureConfigSchema ([cc5e319a](git+https://github.com/bett3r-dev/pv3/commits/cc5e319a))
67
+ * feat(configuration): expose the last-applied arg snapshot synchronously ([2f567542](git+https://github.com/bett3r-dev/pv3/commits/2f567542))
68
+
69
+
70
+ ## [1.6.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.5.0...@bett3r-dev/pv3-types@1.6.0) "@bett3r-dev/pv3-types" (8/2/2026) <a name="1.6.0"></a>
71
+
72
+ ### Changes
73
+
74
+ * feat(query-params): marker-sniff rison encoding for object/array query params ([74f85a27](git+https://github.com/bett3r-dev/pv3/commits/74f85a27))
75
+ * Ticket: TV1-1466 ([74f85a27](git+https://github.com/bett3r-dev/pv3/commits/74f85a27))
76
+ * fix(endpoint-validation): decode query before validation for all transports ([7b2210c1](git+https://github.com/bett3r-dev/pv3/commits/7b2210c1))
77
+ * Ticket: TV1-1466 ([7b2210c1](git+https://github.com/bett3r-dev/pv3/commits/7b2210c1))
78
+ * feat(eventstore): enhance reduceMultipleStream to support transactions ([1680d047](git+https://github.com/bett3r-dev/pv3/commits/1680d047))
79
+ * fix(outbox): instrument event flow + restore self-healing OOS recovery ([3069caad](git+https://github.com/bett3r-dev/pv3/commits/3069caad))
80
+ * feat(outbox-types): add notifyPullDebounceMs config field ([988f6901](git+https://github.com/bett3r-dev/pv3/commits/988f6901))
81
+ * feat(outbox): wire scheduler + coordinators into EventDispatcher ([26ae44af](git+https://github.com/bett3r-dev/pv3/commits/26ae44af))
82
+ * Tests: 61/61 pass across 4 eventDispatcher test files. ([26ae44af](git+https://github.com/bett3r-dev/pv3/commits/26ae44af))
83
+ * feat(endpoints): rename defaultVisibility→visibility and add identity-forwarding to internal gateway ([4396abae](git+https://github.com/bett3r-dev/pv3/commits/4396abae))
84
+ * BREAKING: consumers reading `x-default-visibility` from generated OpenAPI ([4396abae](git+https://github.com/bett3r-dev/pv3/commits/4396abae))
85
+ * feat(command-templates): introduce CommandTemplate type and update related components ([dce852f7](git+https://github.com/bett3r-dev/pv3/commits/dce852f7))
86
+ * feat(cache): add incrementByWithExpiry method for Memory and Redis caches ([cd93efc7](git+https://github.com/bett3r-dev/pv3/commits/cd93efc7))
87
+ * feat(errors): enhance AppError with optional logLevel for flexible logging ([2e29c2db](git+https://github.com/bett3r-dev/pv3/commits/2e29c2db))
88
+ * fix(command-handlers): add visibility property to command handlers and builder ([a6262ef4](git+https://github.com/bett3r-dev/pv3/commits/a6262ef4))
89
+ * fix(database): extend watch functionality to include 'invalidate' change type ([901048e5](git+https://github.com/bett3r-dev/pv3/commits/901048e5))
90
+ * fix(eventsourcing): improve event reducer handling by introducing ReducerNOOP and filtering non-noop events ([e11aa2f5](git+https://github.com/bett3r-dev/pv3/commits/e11aa2f5))
91
+ * feat(pv3-adapter-database-postgres): refactor indexing to use generated columns + B-tree ([896376df](git+https://github.com/bett3r-dev/pv3/commits/896376df))
92
+ * Ticket: TV1-1320 ([896376df](git+https://github.com/bett3r-dev/pv3/commits/896376df))
93
+ * feat(pv3,observability): refactor ReadmodelChange to discriminated union, add undici instrumentation, and fix subscription wiring ([088c4cb9](git+https://github.com/bett3r-dev/pv3/commits/088c4cb9))
94
+ * feat(tsgo): migrate build scripts from tsc to tsgo across multiple packages and update TypeScript configuration ([e0cf2b51](git+https://github.com/bett3r-dev/pv3/commits/e0cf2b51))
95
+ * feat(outbox): implement Redis-backed L2 event cache shared across brokers ([a2a50547](git+https://github.com/bett3r-dev/pv3/commits/a2a50547))
96
+ * feat(outbox): enhance outbox manager with Redis-backed L2 event cache and remove legacy channels ([36cf0558](git+https://github.com/bett3r-dev/pv3/commits/36cf0558))
97
+ * fix(database): enhance array filter operations and add notEmpty support ([22c89c89](git+https://github.com/bett3r-dev/pv3/commits/22c89c89))
98
+ * fix(outbox): atomic claimPosition closes bitmap dedup TOCTOU (TV1-1914) ([c32651df](git+https://github.com/bett3r-dev/pv3/commits/c32651df))
99
+ * fix(outbox): claim lease + sweep to recover orphaned claims (TV1-1914 #3) ([8b995ab4](git+https://github.com/bett3r-dev/pv3/commits/8b995ab4))
100
+ * fix(outbox-manager): prevent at-most-once drop on cross-split claim and in-flight bitmap collision (TV1-1914) ([3cf35e26](git+https://github.com/bett3r-dev/pv3/commits/3cf35e26))
101
+ * Ticket: TV1-1506 ([3cf35e26](git+https://github.com/bett3r-dev/pv3/commits/3cf35e26))
102
+ * feat(outbox): resurrect sub-watermark gap recovery; renumber ADR-012 → ADR-013 ([651a9777](git+https://github.com/bett3r-dev/pv3/commits/651a9777))
103
+ * feat(outbox): stamp event.metadata.isRedelivery on definite redeliveries (TV1-1946) ([d039937f](git+https://github.com/bett3r-dev/pv3/commits/d039937f))
104
+ * fix(outbox): stop phantom-gap recovery from re-dispatching handled events ([5f8f169d](git+https://github.com/bett3r-dev/pv3/commits/5f8f169d))
105
+ * Verified: full outbox-manager suite green (113 tests, --runInBand) plus 3 ([5f8f169d](git+https://github.com/bett3r-dev/pv3/commits/5f8f169d))
106
+ * feat(outbox): stream-fed dispatch deduped by shared per-(sub,stream) watermark ([752454ec](git+https://github.com/bett3r-dev/pv3/commits/752454ec))
107
+ * Oracles: bitmapLeak.test.ts (Seam A, re-pointed onto subWm) — exactly-once ([752454ec](git+https://github.com/bett3r-dev/pv3/commits/752454ec))
108
+ * feat(outbox): stamp isRedelivery from the per-(sub,stream) watermark ([4c095c1a](git+https://github.com/bett3r-dev/pv3/commits/4c095c1a))
109
+ * Oracle: eventProcessing.test.ts Seam E (re-pointed onto subWm, 4 tests) — ([4c095c1a](git+https://github.com/bett3r-dev/pv3/commits/4c095c1a))
110
+ * feat(outbox): admin scoped refill + recovery cursor + stream-path errored-stream quarantine ([3df2f99f](git+https://github.com/bett3r-dev/pv3/commits/3df2f99f))
111
+ * feat(outbox): wire the commit-order stream as the production forward feed ([477f8dee](git+https://github.com/bett3r-dev/pv3/commits/477f8dee))
112
+ * Oracle: redisCommitOrderStream.test.ts (real Redis, db:6) — events XADDed to the ([477f8dee](git+https://github.com/bett3r-dev/pv3/commits/477f8dee))
113
+ * feat(outbox): bounded watermark GC keyed on the stream trim horizon ([72883f5b](git+https://github.com/bett3r-dev/pv3/commits/72883f5b))
114
+ * Oracle: watermarkGc.test.ts (real Redis, db:5) — strictly-below dropped, ([72883f5b](git+https://github.com/bett3r-dev/pv3/commits/72883f5b))
115
+ * feat(outbox): emit stream depth / consumer lag / refill / watermark metrics ([deeab3a7](git+https://github.com/bett3r-dev/pv3/commits/deeab3a7))
116
+ * Oracles: instrumentEventProcessing.streamMetrics.test.ts (real MeterProvider + ([deeab3a7](git+https://github.com/bett3r-dev/pv3/commits/deeab3a7))
117
+ * fix(outbox): stream-path retry/quarantine contract, refill trim-floor pin, recovery subWm advance ([9148fa45](git+https://github.com/bett3r-dev/pv3/commits/9148fa45))
118
+ * Oracle: eventProcessing.test.ts. ([9148fa45](git+https://github.com/bett3r-dev/pv3/commits/9148fa45))
119
+ * Doc: outbox-architecture.md "Retryable Error Handling" reconciled with the stream-path contract. ([9148fa45](git+https://github.com/bett3r-dev/pv3/commits/9148fa45))
120
+ * feat(eventsourcing): enhance SSE subscription handling with authoritative readmodel name ([54a34d85](git+https://github.com/bett3r-dev/pv3/commits/54a34d85))
121
+ * feat(docker-events): improve Docker event handling and error resilience ([e8d4c860](git+https://github.com/bett3r-dev/pv3/commits/e8d4c860))
122
+ * fix(outbox): correct stale commitOrderStream fallback doc after D5a de-brand (TV1-1950) ([11fd7a57](git+https://github.com/bett3r-dev/pv3/commits/11fd7a57))
123
+ * feat(outbox): hybrid dedup — null-version events dedup order-free on a position bitmap ([58ba223b](git+https://github.com/bett3r-dev/pv3/commits/58ba223b))
124
+ * feat(outbox): prune null-class bitmap epochs to the trim floor (pruneBitmap) ([5ea6e4f0](git+https://github.com/bett3r-dev/pv3/commits/5ea6e4f0))
125
+ * feat(outbox): dead-letter poison null-events so the stream keeps flowing ([dd54ba6d](git+https://github.com/bett3r-dev/pv3/commits/dd54ba6d))
126
+ * feat(outbox): circuit breaker + half-open per (sub,host) for null events ([22a73639](git+https://github.com/bett3r-dev/pv3/commits/22a73639))
127
+ * feat(outbox): operator drains the DLQ as first-delivery, not replay ([12a0495f](git+https://github.com/bett3r-dev/pv3/commits/12a0495f))
128
+ * fix(outbox): harden null-class breaker — frontier-driven half-open probe + burst-safe trip (verify-build F1/F2/F4) ([e41930f5](git+https://github.com/bett3r-dev/pv3/commits/e41930f5))
129
+ * Tests: rewrote the multi-split probe oracle to prove the frontier-driven probe ([e41930f5](git+https://github.com/bett3r-dev/pv3/commits/e41930f5))
130
+ * feat(subscriptions): enhance live tracking of delivered events and events per second ([d869287b](git+https://github.com/bett3r-dev/pv3/commits/d869287b))
131
+ * feat(subscriptions): implement consumer lag tracking and enhance metrics ([b327f235](git+https://github.com/bett3r-dev/pv3/commits/b327f235))
132
+ * feat(admin): single-entry DLQ retry ([06619993](git+https://github.com/bett3r-dev/pv3/commits/06619993))
133
+ * feat(outbox): DLQ-aware subscription status + fix stale split status after recovery ([54d0a228](git+https://github.com/bett3r-dev/pv3/commits/54d0a228))
134
+ * feat(outbox): improve outbox admin ui ([b632b0b5](git+https://github.com/bett3r-dev/pv3/commits/b632b0b5))
135
+ * feat(outbox): enrich DLQ errors with name/details and capture consumer response body ([675978bb](git+https://github.com/bett3r-dev/pv3/commits/675978bb))
136
+ * Ticket: TV1-1954 ([675978bb](git+https://github.com/bett3r-dev/pv3/commits/675978bb))
137
+ * feat(outbox): whole-split halt on retryable exhaustion + operator restart-datasplit (TV1-1954) ([174c111a](git+https://github.com/bett3r-dev/pv3/commits/174c111a))
138
+ * Recovery: new restartDataSplit(subscriptionId, splitIndex) on the dispatcher + ([174c111a](git+https://github.com/bett3r-dev/pv3/commits/174c111a))
139
+ * Tests: new splitHalt.test.ts (real Redis, db 12) covers halt-on-exhaustion ([174c111a](git+https://github.com/bett3r-dev/pv3/commits/174c111a))
140
+ * feat(outbox): live retry progress on the datasplit view (TV1-1954) ([f02a3f13](git+https://github.com/bett3r-dev/pv3/commits/f02a3f13))
141
+ * feat(outbox): honest backlog figures for halted and retrying datasplits (TV1-1954) ([46620ba3](git+https://github.com/bett3r-dev/pv3/commits/46620ba3))
142
+ * Tests: splitHalt integration suite (real Redis, real pump/gate) extended — ([46620ba3](git+https://github.com/bett3r-dev/pv3/commits/46620ba3))
143
+ * feat(outbox): whole-subscription bulk refill fans out across owning instances ([b4746619](git+https://github.com/bett3r-dev/pv3/commits/b4746619))
144
+ * feat(outbox): multi-stream-list selector + as-new dispatch-time bypass ([f69314e8](git+https://github.com/bett3r-dev/pv3/commits/f69314e8))
145
+ * asFirstDelivery: bypasses the redelivery skip and stamps ([f69314e8](git+https://github.com/bett3r-dev/pv3/commits/f69314e8))
146
+ * fix(eventsourcing): enhance snapshot consistency and aggregate state management ([479b7ed3](git+https://github.com/bett3r-dev/pv3/commits/479b7ed3))
147
+ * fix(command-handlers): type expectedVersion as number so OCC is reachable through executeCommand (TV1-1976 follow-up) ([90bf8d68](git+https://github.com/bett3r-dev/pv3/commits/90bf8d68))
148
+ * feat(outbox-manager): cold-seed versioned dedup watermark to eventstore tip ([3d464ad2](git+https://github.com/bett3r-dev/pv3/commits/3d464ad2))
149
+ * pump: one reduceStream(from:0) scan accumulates per-stream max version, flushes ([3d464ad2](git+https://github.com/bett3r-dev/pv3/commits/3d464ad2))
150
+ * Oracle: seedColdStart.test.ts (boot-silent, force-replay, warm-restart ([3d464ad2](git+https://github.com/bett3r-dev/pv3/commits/3d464ad2))
151
+ * Ref: TV1-1980 ([3d464ad2](git+https://github.com/bett3r-dev/pv3/commits/3d464ad2))
152
+ * feat(outbox-manager): cold-seed null-version positions to the bitmap, batched ([749570fe](git+https://github.com/bett3r-dev/pv3/commits/749570fe))
153
+ * Ref: TV1-1980 ([749570fe](git+https://github.com/bett3r-dev/pv3/commits/749570fe))
154
+ * fix(outbox-manager): standardize spacing in type definitions and function signatures ([0755280e](git+https://github.com/bett3r-dev/pv3/commits/0755280e))
155
+ * Ref: TV1-1980 ([0755280e](git+https://github.com/bett3r-dev/pv3/commits/0755280e))
156
+ * fix(ports): await async onStarted boot callbacks in start(); fail loudly on rejection ([defc9282](git+https://github.com/bett3r-dev/pv3/commits/defc9282))
157
+ * feat(outbox-manager): opt-in structure-ack readiness gate in coordination runtime (TV1-1973 S2) ([b742e898](git+https://github.com/bett3r-dev/pv3/commits/b742e898))
158
+ * fix(eventstore-postgres): find the versioned head of a stream that also holds version-free rows ([9ce89463](git+https://github.com/bett3r-dev/pv3/commits/9ce89463))
159
+ * read: `SELECT v FROM (VALUES (1),(2),(NULL::int)) t(v) ORDER BY v DESC LIMIT ([9ce89463](git+https://github.com/bett3r-dev/pv3/commits/9ce89463))
160
+ * shapes: versioned-only (no NULLs to exclude), empty (no row either way), and ([9ce89463](git+https://github.com/bett3r-dev/pv3/commits/9ce89463))
161
+ * Oracle: __tests__/mixedVersionStream.test.ts — against a real Postgres, since ([9ce89463](git+https://github.com/bett3r-dev/pv3/commits/9ce89463))
162
+ * feat(database): add a bulk upsert primitive to the collection API ([e0c01c6e](git+https://github.com/bett3r-dev/pv3/commits/e0c01c6e))
163
+ * feat(eventstore): ask the eventstore for a stream's head version ([3cfb7c41](git+https://github.com/bett3r-dev/pv3/commits/3cfb7c41))
164
+ * feat(eventsourcing): assert the version the command actually read ([4725b1b5](git+https://github.com/bett3r-dev/pv3/commits/4725b1b5))
165
+ * feat(eventsourcing): rewind a retried command inside a caller-owned transaction ([c5aa40b7](git+https://github.com/bett3r-dev/pv3/commits/c5aa40b7))
166
+ * feat(eventsourcing): let a command declare its concurrency mode ([cc3585d9](git+https://github.com/bett3r-dev/pv3/commits/cc3585d9))
167
+
168
+
169
+ ## [1.5.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.4.0...@bett3r-dev/pv3-types@1.5.0) "@bett3r-dev/pv3-types" (4/11/2026) <a name="1.5.0"></a>
170
+
171
+ ### Changes
172
+
173
+ * fix(build): update packages versions ([79f7da77](git+https://github.com/bett3r-dev/pv3/commits/79f7da77))
174
+ * fix(cache): implement stop method in MemoryCache and enhance MemoryDb readById functionality ([c55afccb](git+https://github.com/bett3r-dev/pv3/commits/c55afccb))
175
+ * fix(eventsourcing): enhance event handlers and readmodel configuration ([1789cd34](git+https://github.com/bett3r-dev/pv3/commits/1789cd34))
176
+ * fix(dependencies): Update jsonschema-definer to 1.5.6 ([6c7e2e45](git+https://github.com/bett3r-dev/pv3/commits/6c7e2e45))
177
+ * fix(pv3-types): rename validation.ts to errors.ts ([50bf4345](git+https://github.com/bett3r-dev/pv3/commits/50bf4345))
178
+ * fix(eventsourcing): standardize custom schema keywords and enhance schema handling ([1c8cbf84](git+https://github.com/bett3r-dev/pv3/commits/1c8cbf84))
179
+ * fix(dependencies): update jsonschema-definer to 1.5.7 and ramda to 0.32.0 ([e5af6e98](git+https://github.com/bett3r-dev/pv3/commits/e5af6e98))
180
+ * fix(dependencies): upgrade jsonschema-definer to 1.5.8 across multiple packages ([3e704d18](git+https://github.com/bett3r-dev/pv3/commits/3e704d18))
181
+ * fix(errors): standardize error handling by adding error codes ([0049c0a0](git+https://github.com/bett3r-dev/pv3/commits/0049c0a0))
182
+ * fix(errors): add error code property to AppError class ([3e50805b](git+https://github.com/bett3r-dev/pv3/commits/3e50805b))
183
+ * feat(command-handlers): add pre-processing functionality to command execution flow ([036eeaaa](git+https://github.com/bett3r-dev/pv3/commits/036eeaaa))
184
+ * fix(authentication): implement Better Auth adapter and enhance authorization capabilities ([02ade1d9](git+https://github.com/bett3r-dev/pv3/commits/02ade1d9))
185
+ * fix(TV1-716): implement account partitioning in readmodel subscriptions ([e79cdfb1](git+https://github.com/bett3r-dev/pv3/commits/e79cdfb1))
186
+ * fix(TV1-862): implement outbox manager improvements for reliability and fault tolerance ([91801daf](git+https://github.com/bett3r-dev/pv3/commits/91801daf))
187
+ * fix(commandHandlers): reorder parameters in executeCommand function for consistency ([bec05c54](git+https://github.com/bett3r-dev/pv3/commits/bec05c54))
188
+ * fix(pv3-admin-server): update AdminServer and UI components to work with the new outbox manager ([c5669071](git+https://github.com/bett3r-dev/pv3/commits/c5669071))
189
+ * feat(TV1-789): implement UserSession write API for enhanced session management ([80e5d86e](git+https://github.com/bett3r-dev/pv3/commits/80e5d86e))
190
+ * fix(endpoints): implement asynchronous documentation generation for OpenAPI ([120e4819](git+https://github.com/bett3r-dev/pv3/commits/120e4819))
191
+ * feat(TV1-933): introduce new admin plugins for authentication and outbox management ([71ee95f3](git+https://github.com/bett3r-dev/pv3/commits/71ee95f3))
192
+ * fix(endpoints): remove artifact types from tags and fix schema registration ([93d3fea1](git+https://github.com/bett3r-dev/pv3/commits/93d3fea1))
193
+ * Ticket: TV1-1060 ([93d3fea1](git+https://github.com/bett3r-dev/pv3/commits/93d3fea1))
194
+ * feat(observability): add outbox channel instrumentation for tracing event dispatch ([01430e0b](git+https://github.com/bett3r-dev/pv3/commits/01430e0b))
195
+ * Ticket: TV1-814 ([01430e0b](git+https://github.com/bett3r-dev/pv3/commits/01430e0b))
196
+ * feat(observability): add command execution instrumentation ([7ae35b7f](git+https://github.com/bett3r-dev/pv3/commits/7ae35b7f))
197
+ * Ticket: TV1-814 ([7ae35b7f](git+https://github.com/bett3r-dev/pv3/commits/7ae35b7f))
198
+ * feat(cache): add list operations and fix hashIncrementBy in memory adapter ([2c3d011c](git+https://github.com/bett3r-dev/pv3/commits/2c3d011c))
199
+ * fix(outbox-manager): increase default maxConsumerQueueSize to 1000 ([d7777d07](git+https://github.com/bett3r-dev/pv3/commits/d7777d07))
200
+ * feat(admin-panel): improve auth, plugin loader, and outbox UI ([c0b96eb0](git+https://github.com/bett3r-dev/pv3/commits/c0b96eb0))
201
+ * feat(cluster-structure): add configurable default automatic data splits ([3cb5a150](git+https://github.com/bett3r-dev/pv3/commits/3cb5a150))
202
+ * Ticket: TV1-1147 ([3cb5a150](git+https://github.com/bett3r-dev/pv3/commits/3cb5a150))
203
+ * fix(clusterAdministration): set default value for defaultAutomaticDataSplits to 5 ([b8ca46ce](git+https://github.com/bett3r-dev/pv3/commits/b8ca46ce))
204
+ * feat(pv3): add deployment units system with MDU computation, manifest generation, and selective loading ([f9a1c35c](git+https://github.com/bett3r-dev/pv3/commits/f9a1c35c))
205
+ * Ticket: TV1-1061 ([f9a1c35c](git+https://github.com/bett3r-dev/pv3/commits/f9a1c35c))
206
+ * feat(eventsourcing): add snapshot subscription change type for initial load ([2ac3bcf3](git+https://github.com/bett3r-dev/pv3/commits/2ac3bcf3))
207
+ * Ticket: TV1-1235 ([2ac3bcf3](git+https://github.com/bett3r-dev/pv3/commits/2ac3bcf3))
208
+ * feat(command-handlers): add payload parameter to InstrumentCommandExecution type ([21cfd1c4](git+https://github.com/bett3r-dev/pv3/commits/21cfd1c4))
209
+ * feat(eventsourcing): add snapshot and signal subscription modes with opt-in options ([9299316e](git+https://github.com/bett3r-dev/pv3/commits/9299316e))
210
+ * Ticket: TV1-1235 ([9299316e](git+https://github.com/bett3r-dev/pv3/commits/9299316e))
211
+ * fix(pv3): update clean script to exclude specific adapters and enhance query parameter validation ([f877c20f](git+https://github.com/bett3r-dev/pv3/commits/f877c20f))
212
+ * feat(outbox): add OTel instrumentation for error pipeline ([4802a2b3](git+https://github.com/bett3r-dev/pv3/commits/4802a2b3))
213
+ * Ticket: TV1-1256 ([4802a2b3](git+https://github.com/bett3r-dev/pv3/commits/4802a2b3))
214
+ * fix(outbox-manager): cache from NOTIFY, debounce, serialized pulls, paginated reads ([02508c98](git+https://github.com/bett3r-dev/pv3/commits/02508c98))
215
+ * Ticket: TV1-1415 ([02508c98](git+https://github.com/bett3r-dev/pv3/commits/02508c98))
216
+
217
+
218
+ ## [1.4.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.3.3...@bett3r-dev/pv3-types@1.4.0) "@bett3r-dev/pv3-types" (10/9/2025) <a name="1.4.0"></a>
219
+
220
+ ### Changes
221
+
222
+ * feat(magiclink): add generateMagicLink function for improved magic link handling ([dde2460c](git+https://github.com/bett3r-dev/pv3/commits/dde2460c))
223
+
224
+
225
+ ## [1.3.3](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.3.2...@bett3r-dev/pv3-types@1.3.3) "@bett3r-dev/pv3-types" (10/3/2025) <a name="1.3.3"></a>
226
+
227
+ ### Changes
228
+
229
+ * fix(eventsourcing): Refactor ReadModel => Readmodel across all repo ([094e5dd9](git+https://github.com/bett3r-dev/pv3/commits/094e5dd9))
230
+
231
+
232
+ ## [1.3.2](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.3.1...@bett3r-dev/pv3-types@1.3.2) "@bett3r-dev/pv3-types" (9/23/2025) <a name="1.3.2"></a>
233
+
234
+ ### Changes
235
+
236
+ * fix(eventstore): enhance concurrency error handling and improve commit event logging ([3a9a7462](git+https://github.com/bett3r-dev/pv3/commits/3a9a7462))
237
+ * fix(package): update build scripts and improve type usage in cluster structure ([f7e8d7ec](git+https://github.com/bett3r-dev/pv3/commits/f7e8d7ec))
238
+ * fix(eventHandlers): enhance event schema handling with friendlyName support for Events ([84c6cb74](git+https://github.com/bett3r-dev/pv3/commits/84c6cb74))
239
+
240
+
241
+ ## [1.3.1](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.3.0...@bett3r-dev/pv3-types@1.3.1) "@bett3r-dev/pv3-types" (7/7/2025) <a name="1.3.1"></a>
242
+
243
+ ### Changes
244
+
245
+ * fix(outbox-manager): added an event emitter to notify when error streams are created and fixed ([374c2c8e](git+https://github.com/bett3r-dev/pv3/commits/374c2c8e))
246
+
247
+
248
+ ## [1.3.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.2.0...@bett3r-dev/pv3-types@1.3.0) "@bett3r-dev/pv3-types" (7/4/2025) <a name="1.3.0"></a>
249
+
250
+ ### Changes
251
+
252
+ * feat(cache): add hashLength, setBit, and getBit methods to Memory and Redis cache adapters ([abd06ddd](git+https://github.com/bett3r-dev/pv3/commits/abd06ddd))
253
+
254
+
255
+ ## [1.2.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.1.0...@bett3r-dev/pv3-types@1.2.0) "@bett3r-dev/pv3-types" (7/2/2025) <a name="1.2.0"></a>
256
+
257
+ ### Changes
258
+
259
+ * feat(eventHandlers): add optional byDistinctField property to ReadmodelDefaultQuerySchema for enhanced query flexibility ([11ca6f3a](git+https://github.com/bett3r-dev/pv3/commits/11ca6f3a))
260
+ * feat(outbox-manager): add optional subscriptionId parameter to getSubscriptionStatus route and implement getAllSubscriptionsStatus function for retrieving all subscriptions' statuses ([14a627af](git+https://github.com/bett3r-dev/pv3/commits/14a627af))
261
+
262
+
263
+ ## [1.1.0](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.0.6...@bett3r-dev/pv3-types@1.1.0) "@bett3r-dev/pv3-types" (6/26/2025) <a name="1.1.0"></a>
264
+
265
+ ### Changes
266
+
267
+ * feat(database): enhance count and query functionality with distinct field support ([5a8c8d2a](git+https://github.com/bett3r-dev/pv3/commits/5a8c8d2a))
268
+
269
+
270
+ ## [1.0.6](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.0.5...@bett3r-dev/pv3-types@1.0.6) "@bett3r-dev/pv3-types" (6/24/2025) <a name="1.0.6"></a>
271
+
272
+ ### Changes
273
+
274
+ * fix(eventsourcing): implement rison encoding for filters, sorts and selects ([138fa75d](git+https://github.com/bett3r-dev/pv3/commits/138fa75d))
275
+
276
+
277
+ ## [1.0.5](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.0.4...@bett3r-dev/pv3-types@1.0.5) "@bett3r-dev/pv3-types" (6/20/2025) <a name="1.0.5"></a>
278
+
279
+ ### Changes
280
+
281
+ * fix: client library types improvement ([46190f29](git+https://github.com/bett3r-dev/pv3/commits/46190f29))
282
+ * fix(outbox): standardize subscription state to be compatible with postgres ([06ccef68](git+https://github.com/bett3r-dev/pv3/commits/06ccef68))
283
+ * fix(validation): correct error class name in UnauthorizedError constructor ([093e1e80](git+https://github.com/bett3r-dev/pv3/commits/093e1e80))
284
+ * fix(database): enhance getCollection and translateSQL to support sequenceIdProperty ([fe35ba1f](git+https://github.com/bett3r-dev/pv3/commits/fe35ba1f))
285
+
286
+
287
+ ## [1.0.4](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.0.3...@bett3r-dev/pv3-types@1.0.4) "@bett3r-dev/pv3-types" (6/14/2025) <a name="1.0.4"></a>
288
+
289
+ ### Changes
290
+
291
+ * fix: enhance QueryHandler and Query types to support RETURN_TYPE for improved type safety ([753dabd8](git+https://github.com/bett3r-dev/pv3/commits/753dabd8))
292
+
293
+
294
+ ## [1.0.3](git+https://github.com/bett3r-dev/pv3/compare/@bett3r-dev/pv3-types@1.0.2...@bett3r-dev/pv3-types@1.0.3) "@bett3r-dev/pv3-types" (6/14/2025) <a name="1.0.3"></a>
295
+
296
+ ### Changes
297
+
298
+ * fix: update @bett3r-dev/jsonschema-definer dependency to version 1.5.0 across multiple packages ([a5f23884](git+https://github.com/bett3r-dev/pv3/commits/a5f23884))
299
+
300
+
301
+ ## 1.0.0
302
+
303
+ ### Major Changes
304
+
305
+ - First Official Release of PV3
@@ -0,0 +1,24 @@
1
+ export type AdminPluginTab = {
2
+ name: string;
3
+ route: string;
4
+ };
5
+ export type AdminPluginManifest = {
6
+ name: string;
7
+ route: string;
8
+ entry: string;
9
+ section?: string;
10
+ icon?: string;
11
+ tabs?: AdminPluginTab[];
12
+ permissions?: string[];
13
+ };
14
+ export type AdminUserContext = {
15
+ id: string;
16
+ displayName: string;
17
+ };
18
+ export type AdminPluginProps = {
19
+ backendUrl: string;
20
+ user?: AdminUserContext;
21
+ navigate: (path: string) => void;
22
+ basePath: string;
23
+ };
24
+ //# sourceMappingURL=adminPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminPlugin.d.ts","sourceRoot":"","sources":["../src/adminPlugin.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,CAAE,IAAI,EAAE,MAAM,KAAM,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=utils.js.map
3
+ //# sourceMappingURL=adminPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminPlugin.js","sourceRoot":"","sources":["../src/adminPlugin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ import { BaseSchema, ObjectSchema } from '@bett3r-dev/jsonschema-definer';
2
+ import { AggregateSpec, Document } from './database';
3
+ /**
4
+ * The filter schema embedded under `aggregate.filter`, carrying its OWN `$id` — see
5
+ * `collectionFilterSchemaWithId`. Identical rules to `CollectionFilterSchema`, different identity,
6
+ * because both are materialised in the SAME readmodel query document.
7
+ */
8
+ export declare const AggregateFilterSchema: BaseSchema<Partial<import("./database").CollectionFilterOR<any> & import("./database").CollectionFilterAND<any> & import("./database").CollectionFilterInstance<any>>, true, Readonly<import("@bett3r-dev/jsonschema-definer/dist/base").BaseJsonSchema>>;
9
+ /**
10
+ * Derives the RESPONSE SCHEMA of an aggregate row from the model's schema plus the spec.
11
+ *
12
+ * This is one of the three co-derivations of a single spec value (the other two being the
13
+ * `AggregateRow` TS type and the adapter's SQL). It is deliberately a PURE function of
14
+ * `(modelSchema, spec)` — no ports, no I/O, no dependency on endpoint registration — because
15
+ * the authoring-time consumer (teselly's rule validator) calls it on a spec pv3 never saw at
16
+ * build time. Building it as an internal of endpoint registration is the one decision here
17
+ * that would be expensive to undo.
18
+ *
19
+ * The rules:
20
+ * - a `groupBy` key copies the model's property schema, facets (enum, format) included, made
21
+ * NULLABLE: a row lacking the key groups under SQL NULL, and the adapter projects that group's
22
+ * key as JS `null` (invariant I1 — the schema must accept what the SQL can legitimately hand
23
+ * back);
24
+ * - every OTHER `groupBy` facet survives onto the row rather than being flattened to a loose
25
+ * primitive;
26
+ * - a `count`/`sum` alias is always `number` — neither can be empty (a group exists because a
27
+ * row exists, and the empty sum is COALESCEd to its identity element, 0);
28
+ * - an `avg` alias is `number | null`, and a `min`/`max` alias copies the SOURCE field's
29
+ * property schema verbatim — facets included (invariant I4) — made NULLABLE. This is the
30
+ * half a TS type cannot carry: `AggregateTermType` can say `string`, only the schema can
31
+ * say `format: 'date-time'`, and a consumer generating a client from it would otherwise be
32
+ * handed a looser contract than the readmodel's own. The nullability mirrors
33
+ * `AggregateTermType` exactly: these three functions have no identity element, so a group
34
+ * whose every row lacks the field yields null rather than an invented value. `.nullable()`
35
+ * is the library's own mechanism and preserves the other facets (it widens `type` and, for
36
+ * an enum, appends null to the enum) instead of flattening the schema;
37
+ * - every other model property DISAPPEARS — an aggregate row is a new type, not a partial
38
+ * model.
39
+ */
40
+ export declare const deriveAggregateSchema: <Model extends Document>(modelSchema: ObjectSchema<any, any>, spec: AggregateSpec<Model>) => ObjectSchema<any, any>;
41
+ /**
42
+ * Charset-checks every value in the spec that reaches SQL by interpolation.
43
+ *
44
+ * Called from `validateSpec` (i.e. from INSIDE `deriveAggregateSchema`), so every caller that
45
+ * DERIVES — the endpoint, teselly's authoring-time validator — inherits it. It is deliberately
46
+ * NOT only there: `aggregate()` does NOT derive, so the Postgres adapter runs this check itself
47
+ * (`assertAggregateBoundsAreValid`, postgres.utils.ts) immediately before interpolating. The
48
+ * derivation is a chokepoint for the HTTP path, not for the port. Exported as well, so the
49
+ * boundary can run it FIRST and
50
+ * report "not a safe identifier" instead of the less useful "not a property of the model" that a
51
+ * membership check would report for the same hostile value.
52
+ */
53
+ export declare const assertSafeAggregateIdentifiers: <Model extends Document>(spec: AggregateSpec<Model>) => void;
54
+ /**
55
+ * INVARIANT I5 — the spec must be STATIC.
56
+ *
57
+ * This is the condition the whole design rests on, not a hygiene check. `AggregateRow`, the
58
+ * derived JSON Schema and the SQL are all computed FROM the spec; if a `groupBy` key or an
59
+ * aggregate `field` can arrive from a runtime value (an upstream edge in a rule graph, a
60
+ * template placeholder resolved later) then the row shape is not derivable at authoring time and
61
+ * the entire scheme degrades to `any` — silently, because a spec with a placeholder in it is a
62
+ * perfectly well-formed object.
63
+ *
64
+ * So the two runtime-reference shapes are refused explicitly:
65
+ * - a NON-STRING where an identifier belongs (`{ from: 'input.field' }`, the shape a rules-engine
66
+ * edge would produce);
67
+ * - a string carrying template syntax (`{{...}}`, `${...}`), which would otherwise sail through
68
+ * the charset guard's error path with a confusing message.
69
+ * Run BEFORE the charset guard so the failure names the right problem.
70
+ */
71
+ export declare const assertStaticAggregateSpec: (spec: unknown) => void;
72
+ /**
73
+ * The WIRE schema of an aggregate spec — what a caller may put in the query string.
74
+ *
75
+ * It validates the spec's SHAPE only (the function vocabulary, the bound types, the filter
76
+ * clauses). The SEMANTIC rules — field exists on the model, `sum` over a numeric field, alias
77
+ * collisions — deliberately stay in `deriveAggregateSchema`, which is the single place every
78
+ * caller passes through. Duplicating them here would create two rule sets that can drift.
79
+ *
80
+ * `filter` reuses the same filter DEFINITION (under its own `$id`) so a filter means exactly the same thing on
81
+ * `aggregate` as it does on `query`.
82
+ */
83
+ export declare const AggregateSpecSchema: ObjectSchema<{
84
+ groupBy: string[];
85
+ aggregates: {
86
+ fn: "avg" | "count" | "max" | "min" | "sum";
87
+ field?: string | undefined;
88
+ as: string;
89
+ }[];
90
+ filter?: Partial<import("./database").CollectionFilterOR<any> & import("./database").CollectionFilterAND<any> & import("./database").CollectionFilterInstance<any>>[] | undefined;
91
+ maxGroups?: number | undefined;
92
+ maxGroupSize?: number | undefined;
93
+ }, true>;
94
+ //# sourceMappingURL=aggregateSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregateSchema.d.ts","sourceRoot":"","sources":["../src/aggregateSchema.ts"],"names":[],"mappings":"AAAA,OAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAgC,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,2PAA8D,CAAC;AAkFjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,QAAQ,eAC7C,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,QAC7B,aAAa,CAAC,KAAK,CAAC,KACzB,YAAY,CAAC,GAAG,EAAE,GAAG,CA2BvB,CAAC;AAmCF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,GAAI,KAAK,SAAS,QAAQ,QAAS,aAAa,CAAC,KAAK,CAAC,SAMjG,CAAC;AAIF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,yBAAyB,SAAW,OAAO,KAAI,IA0B3D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;QAmB9B,CAAC"}