@kronos-ts/axon-server 0.3.2 → 0.5.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 (102) hide show
  1. package/dist/axon-server-event-store.d.ts +3 -15
  2. package/dist/axon-server-event-store.d.ts.map +1 -1
  3. package/dist/axon-server-event-store.js +85 -44
  4. package/dist/axon-server-event-store.js.map +1 -1
  5. package/dist/axon-server-snapshotting-event-store.d.ts +30 -0
  6. package/dist/axon-server-snapshotting-event-store.d.ts.map +1 -0
  7. package/dist/axon-server-snapshotting-event-store.js +153 -0
  8. package/dist/axon-server-snapshotting-event-store.js.map +1 -0
  9. package/dist/axon-server.d.ts +92 -208
  10. package/dist/axon-server.d.ts.map +1 -1
  11. package/dist/axon-server.js +221 -323
  12. package/dist/axon-server.js.map +1 -1
  13. package/dist/connection-manager.d.ts +2 -2
  14. package/dist/connection-manager.d.ts.map +1 -1
  15. package/dist/connection.d.ts +134 -4
  16. package/dist/connection.d.ts.map +1 -1
  17. package/dist/connection.js +135 -10
  18. package/dist/connection.js.map +1 -1
  19. package/dist/context-view.d.ts +30 -0
  20. package/dist/context-view.d.ts.map +1 -0
  21. package/dist/context-view.js +19 -0
  22. package/dist/context-view.js.map +1 -0
  23. package/dist/control-plane.d.ts +18 -17
  24. package/dist/control-plane.d.ts.map +1 -1
  25. package/dist/control-plane.js +8 -6
  26. package/dist/control-plane.js.map +1 -1
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js.map +1 -1
  29. package/dist/event-processor-info.d.ts +4 -4
  30. package/dist/event-processor-info.d.ts.map +1 -1
  31. package/dist/flow-controlled-sender.d.ts +2 -2
  32. package/dist/flow-controlled-sender.d.ts.map +1 -1
  33. package/dist/flow-controlled-sender.js.map +1 -1
  34. package/dist/generated/command.d.ts +20 -20
  35. package/dist/generated/command.d.ts.map +1 -1
  36. package/dist/generated/command.js.map +1 -1
  37. package/dist/generated/common.d.ts +20 -20
  38. package/dist/generated/common.d.ts.map +1 -1
  39. package/dist/generated/common.js.map +1 -1
  40. package/dist/generated/control.d.ts +36 -40
  41. package/dist/generated/control.d.ts.map +1 -1
  42. package/dist/generated/control.js.map +1 -1
  43. package/dist/generated/dcb.d.ts +88 -94
  44. package/dist/generated/dcb.d.ts.map +1 -1
  45. package/dist/generated/dcb.js.map +1 -1
  46. package/dist/generated/event.d.ts +81 -84
  47. package/dist/generated/event.d.ts.map +1 -1
  48. package/dist/generated/event.js.map +1 -1
  49. package/dist/generated/google/protobuf/empty.d.ts +3 -4
  50. package/dist/generated/google/protobuf/empty.d.ts.map +1 -1
  51. package/dist/generated/google/protobuf/empty.js.map +1 -1
  52. package/dist/generated/query.d.ts +40 -40
  53. package/dist/generated/query.d.ts.map +1 -1
  54. package/dist/generated/query.js.map +1 -1
  55. package/dist/index.d.ts +4 -6
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +4 -5
  58. package/dist/index.js.map +1 -1
  59. package/dist/message-size.d.ts +2 -2
  60. package/dist/message-size.d.ts.map +1 -1
  61. package/dist/metadata-conversion.d.ts +1 -1
  62. package/dist/metadata-conversion.d.ts.map +1 -1
  63. package/dist/outbound-stream.d.ts +2 -2
  64. package/dist/outbound-stream.d.ts.map +1 -1
  65. package/dist/platform-service.d.ts +4 -4
  66. package/dist/platform-service.d.ts.map +1 -1
  67. package/dist/resilience.d.ts +62 -0
  68. package/dist/resilience.d.ts.map +1 -0
  69. package/dist/resilience.js +103 -0
  70. package/dist/resilience.js.map +1 -0
  71. package/dist/shutdown-latch.d.ts +4 -4
  72. package/dist/shutdown-latch.d.ts.map +1 -1
  73. package/dist/shutdown-latch.js.map +1 -1
  74. package/package.json +5 -9
  75. package/src/axon-server-event-store.ts +97 -57
  76. package/src/axon-server-snapshotting-event-store.ts +191 -0
  77. package/src/axon-server.ts +365 -524
  78. package/src/connection-manager.ts +1 -1
  79. package/src/connection.ts +274 -20
  80. package/src/context-view.ts +46 -0
  81. package/src/control-plane.ts +19 -19
  82. package/src/event-processor-info.ts +2 -2
  83. package/src/flow-controlled-sender.ts +1 -1
  84. package/src/generated/command.ts +10 -10
  85. package/src/generated/common.ts +10 -10
  86. package/src/generated/control.ts +20 -20
  87. package/src/generated/dcb.ts +47 -47
  88. package/src/generated/event.ts +42 -42
  89. package/src/generated/google/protobuf/empty.ts +2 -2
  90. package/src/generated/query.ts +20 -20
  91. package/src/index.ts +12 -18
  92. package/src/message-size.ts +1 -1
  93. package/src/metadata-conversion.ts +1 -1
  94. package/src/outbound-stream.ts +1 -1
  95. package/src/platform-service.ts +2 -2
  96. package/src/resilience.ts +149 -0
  97. package/src/shutdown-latch.ts +2 -2
  98. package/dist/axon-server-snapshot-store.d.ts +0 -12
  99. package/dist/axon-server-snapshot-store.d.ts.map +0 -1
  100. package/dist/axon-server-snapshot-store.js +0 -88
  101. package/dist/axon-server-snapshot-store.js.map +0 -1
  102. package/src/axon-server-snapshot-store.ts +0 -118
@@ -1,16 +1,4 @@
1
- import { type Serializer } from "@kronos-ts/common";
2
- import type { EventStore } from "@kronos-ts/eventsourcing";
3
- import type { AxonServerConnection } from "./connection.js";
4
- /**
5
- * Creates an EventStore implementation backed by Axon Server's DCB event store.
6
- *
7
- * This bridges the framework's EventStore interface to the gRPC
8
- * DcbEventStore service, handling conversion between framework types
9
- * and proto messages.
10
- *
11
- * The {@link open} method returns a persistent {@link MessageStream} backed by
12
- * a single gRPC Stream RPC call that stays open indefinitely, aligned with
13
- * Java's infinite {@code ResultStream}.
14
- */
15
- export declare function axonServerEventStore(connection: AxonServerConnection, serializer: Serializer): EventStore;
1
+ import type { EventStore } from "@kronos-ts/core";
2
+ import type { AxonServerStoreSource } from "./connection.js";
3
+ export declare function axonServerEventStore(conn: AxonServerStoreSource, context: string): EventStore;
16
4
  //# sourceMappingURL=axon-server-event-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"axon-server-event-store.d.ts","sourceRoot":"","sources":["../src/axon-server-event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAA;AAS1B,OAAO,KAAK,EACV,UAAU,EAMX,MAAM,0BAA0B,CAAA;AAIjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAmH3D;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CA+MzG"}
1
+ {"version":3,"file":"axon-server-event-store.d.ts","sourceRoot":"","sources":["../src/axon-server-event-store.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,UAAU,EAMX,MAAM,iBAAiB,CAAA;AAIxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAuJ5D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CA8N7F"}
@@ -1,8 +1,8 @@
1
- import { qualifiedNameToString, qualifiedNameFromString, } from "@kronos-ts/common";
2
- import { messageStream } from "@kronos-ts/messaging";
3
- import { globalSequenceToken, FIRST_TOKEN } from "@kronos-ts/messaging";
4
- import { markerAt, noMarker } from "@kronos-ts/eventsourcing";
5
- import { Metadata } from "nice-grpc";
1
+ import { qualifiedNameToString, qualifiedNameFromString, } from "@kronos-ts/core";
2
+ import { messageStream, compileQuery } from "@kronos-ts/core";
3
+ import { globalSequenceToken, FIRST_TOKEN } from "@kronos-ts/core";
4
+ import { markerAt, noMarker } from "@kronos-ts/core";
5
+ import { contextView } from "./context-view.js";
6
6
  // ---------------------------------------------------------------------------
7
7
  // Criteria conversion — framework EventCriteria → proto Criterion[]
8
8
  // ---------------------------------------------------------------------------
@@ -23,23 +23,25 @@ function tagFromProto(tag) {
23
23
  function criteriaToCriterions(criteria) {
24
24
  switch (criteria.kind) {
25
25
  case "tags":
26
- return [{
26
+ return [
27
+ {
27
28
  tagsAndNames: {
28
29
  name: [],
29
30
  tag: criteria.tags.map(tagToProto),
30
31
  },
31
- }];
32
+ },
33
+ ];
32
34
  case "type-restricted":
33
35
  // Inner must be tags or any-tag
34
- const innerTags = criteria.inner.kind === "tags"
35
- ? criteria.inner.tags.map(tagToProto)
36
- : [];
37
- return [{
36
+ const innerTags = criteria.inner.kind === "tags" ? criteria.inner.tags.map(tagToProto) : [];
37
+ return [
38
+ {
38
39
  tagsAndNames: {
39
40
  name: [...criteria.types],
40
41
  tag: innerTags,
41
42
  },
42
- }];
43
+ },
44
+ ];
43
45
  case "either":
44
46
  // Flatten all sub-criteria into a list of criterions (OR semantics)
45
47
  return criteria.criteria.flatMap(criteriaToCriterions);
@@ -70,7 +72,11 @@ function createEventConverters(serializer) {
70
72
  },
71
73
  eventFromProto(protoEvent, tags) {
72
74
  const payload = protoEvent.payload.length > 0
73
- ? serializer.deserialize({ data: protoEvent.payload, type: protoEvent.name, revision: protoEvent.version })
75
+ ? serializer.deserialize({
76
+ data: protoEvent.payload,
77
+ type: protoEvent.name,
78
+ revision: protoEvent.version,
79
+ })
74
80
  : {};
75
81
  const metadata = {};
76
82
  for (const [k, v] of Object.entries(protoEvent.metadata)) {
@@ -93,26 +99,36 @@ function createEventConverters(serializer) {
93
99
  // AxonServerDcbEventStore — implements our EventStore interface via gRPC
94
100
  // ---------------------------------------------------------------------------
95
101
  /**
96
- * Creates an EventStore implementation backed by Axon Server's DCB event store.
102
+ * An EventStore over Axon Server's DCB event store, in one context.
97
103
  *
98
104
  * This bridges the framework's EventStore interface to the gRPC
99
105
  * DcbEventStore service, handling conversion between framework types
100
106
  * and proto messages.
101
107
  *
108
+ * `context` is Axon Server's tenancy boundary and is a per-call header, so
109
+ * several contexts share the one channel `conn` holds — see `contextView`. The
110
+ * serializer is the connection's: one codec for everything this client puts on
111
+ * the wire.
112
+ *
102
113
  * The {@link open} method returns a persistent {@link MessageStream} backed by
103
114
  * a single gRPC Stream RPC call that stays open indefinitely, aligned with
104
115
  * Java's infinite {@code ResultStream}.
105
116
  */
106
- export function axonServerEventStore(connection, serializer) {
117
+ /**
118
+ * Axon Server's way of saying "there is nothing at or after that position".
119
+ *
120
+ * Matched on the gRPC status code first — `OUT_OF_RANGE` is 11 — with the
121
+ * server's own message as a second, narrower gate, so an unrelated future
122
+ * OUT_OF_RANGE is not swallowed along with it.
123
+ */
124
+ function isStartPastHead(err) {
125
+ const code = err.code;
126
+ const details = String(err.details ?? "");
127
+ return code === 11 && details.includes("Start sequence cannot be larger than end sequence");
128
+ }
129
+ export function axonServerEventStore(conn, context) {
130
+ const { connection, serializer, metadata: createAxonMetadata } = contextView(conn, context);
107
131
  const { eventToProto, eventFromProto } = createEventConverters(serializer);
108
- function createAxonMetadata() {
109
- const axonMetadata = new Metadata();
110
- axonMetadata.set("AxonIQ-Context", connection.config.context);
111
- if (connection.config.token) {
112
- axonMetadata.set("AxonIQ-Access-Token", connection.config.token);
113
- }
114
- return axonMetadata;
115
- }
116
132
  // Push-based subscriber registry (EventBus.subscribe contract). Axon Server's
117
133
  // own distribution is the server-side Stream RPC (see open()); these in-process
118
134
  // subscribers are notified best-effort on every successful local append.
@@ -129,38 +145,61 @@ export function axonServerEventStore(connection, serializer) {
129
145
  }
130
146
  return {
131
147
  async source(condition) {
132
- const criterions = criteriaToCriterions(condition.criteria);
148
+ const criterions = criteriaToCriterions(compileQuery(condition.query));
149
+ const start = condition.start ?? 0n;
133
150
  const request = {
134
- fromSequence: condition.start ?? 0n,
151
+ fromSequence: start,
135
152
  criterion: criterions,
136
153
  };
137
154
  const events = [];
138
155
  let marker = noMarker();
139
- const stream = connection.eventStore.source(request, { metadata: createAxonMetadata() });
140
- for await (const response of stream) {
141
- if (response.event) {
142
- const taggedEvent = response.event;
143
- const protoEvent = taggedEvent.event;
144
- if (protoEvent) {
145
- // DCB source/stream responses carry no tags — the server indexes
146
- // them write-side but does not echo them back (SequencedEvent has
147
- // only sequence + event). Reconstructed events get empty tags.
148
- events.push(eventFromProto(protoEvent, []));
156
+ try {
157
+ const stream = connection.eventStore.source(request, { metadata: createAxonMetadata() });
158
+ for await (const response of stream) {
159
+ if (response.event) {
160
+ const taggedEvent = response.event;
161
+ const protoEvent = taggedEvent.event;
162
+ if (protoEvent) {
163
+ // DCB source/stream responses carry no tags the server indexes
164
+ // them write-side but does not echo them back (SequencedEvent has
165
+ // only sequence + event). Reconstructed events get empty tags.
166
+ events.push(eventFromProto(protoEvent, []));
167
+ }
168
+ }
169
+ if (response.consistencyMarker !== undefined) {
170
+ marker = markerAt(response.consistencyMarker);
149
171
  }
150
- }
151
- if (response.consistencyMarker !== undefined) {
152
- marker = markerAt(response.consistencyMarker);
153
172
  }
154
173
  }
174
+ catch (err) {
175
+ // READING PAST THE HEAD IS AN EMPTY ANSWER, NOT AN ERROR — and Axon
176
+ // Server disagrees, so this is where the two vocabularies are
177
+ // reconciled. `Source` fails OUT_OF_RANGE with "Start sequence cannot
178
+ // be larger than end sequence" whenever `fromSequence` is beyond the
179
+ // global head, which is the ORDINARY STEADY STATE of a snapshotted
180
+ // load: an entry written at the head means the very next read resumes
181
+ // at head + 1 and legitimately finds nothing.
182
+ //
183
+ // The marker is `start - 1`, and it is exact rather than conservative:
184
+ // the caller has already accounted for everything up to there (that is
185
+ // what asking to start later MEANS), and nothing can exist after it or
186
+ // the server would not have refused. So an append conditioned on this
187
+ // read is checked against precisely the range that was read.
188
+ if (!isStartPastHead(err))
189
+ throw err;
190
+ return { events: [], marker: start > 0n ? markerAt(start - 1n) : noMarker() };
191
+ }
155
192
  return { events, marker };
156
193
  },
157
194
  async appendEvents(newEvents, condition) {
158
195
  const taggedEvents = newEvents.map(eventToProto);
159
196
  const request = {
160
- condition: condition ? {
161
- consistencyMarker: condition.marker.position,
162
- criterion: criteriaToCriterions(condition.criteria),
163
- } : undefined,
197
+ condition: condition
198
+ ? {
199
+ consistencyMarker: condition.marker.position,
200
+ criterion: criteriaToCriterions(compileQuery(condition.query)),
201
+ }
202
+ : undefined,
164
203
  event: taggedEvents,
165
204
  };
166
205
  // Axon Server's Append RPC is atomic — commit happens on the server
@@ -171,7 +210,9 @@ export function axonServerEventStore(connection, serializer) {
171
210
  async function* requestStream() {
172
211
  yield request;
173
212
  }
174
- const response = await connection.eventStore.append(requestStream(), { metadata: createAxonMetadata() });
213
+ const response = await connection.eventStore.append(requestStream(), {
214
+ metadata: createAxonMetadata(),
215
+ });
175
216
  responseMarker = response.consistencyMarker;
176
217
  await notifySubscribers(newEvents);
177
218
  },
@@ -189,7 +230,7 @@ export function axonServerEventStore(connection, serializer) {
189
230
  return tx.afterCommit();
190
231
  },
191
232
  open(condition) {
192
- const criterions = condition.criteria ? criteriaToCriterions(condition.criteria) : [];
233
+ const criterions = condition.query ? criteriaToCriterions(compileQuery(condition.query)) : [];
193
234
  const request = {
194
235
  fromSequence: condition.position,
195
236
  criterion: criterions,
@@ -1 +1 @@
1
- {"version":3,"file":"axon-server-event-store.js","sourceRoot":"","sources":["../src/axon-server-event-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"axon-server-event-store.js","sourceRoot":"","sources":["../src/axon-server-event-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { EventStore, SnapshotCapability } from "@kronos-ts/core";
2
+ import type { AxonServerStoreSource } from "./connection.js";
3
+ /**
4
+ * Add the snapshotting capability to an Axon Server-backed log.
5
+ *
6
+ * ```ts
7
+ * const eventStore = axonServerSnapshottingEventStore(
8
+ * axonServerEventStore(axon, "default"),
9
+ * axon,
10
+ * "default",
11
+ * )
12
+ * ```
13
+ *
14
+ * ADDITIVE, NOT COLLAPSING. It returns `E & SnapshotCapability` — the store you
15
+ * passed in, plus the write — so capabilities stack in either order and nothing
16
+ * the inner store carried is laundered on the way through.
17
+ *
18
+ * `context` is a per-call header, so this shares the one channel `conn` holds
19
+ * with every other context — see `contextView`. Payloads go through the
20
+ * connection's serializer.
21
+ *
22
+ * LATEST-ONLY, over a service that is not. `DcbSnapshotStore` keeps a sequence
23
+ * of snapshots per key; the capability keeps one. `add` therefore sets
24
+ * `prune: true`, so writing an entry retires the ones before it, and `getLast`
25
+ * is the only read. That is the narrowing doing its job: the framework programs
26
+ * against the cache it needs, not against everything the backend happens to
27
+ * offer.
28
+ */
29
+ export declare function axonServerSnapshottingEventStore<E extends EventStore>(next: E, conn: AxonServerStoreSource, context: string): E & SnapshotCapability;
30
+ //# sourceMappingURL=axon-server-snapshotting-event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axon-server-snapshotting-event-store.d.ts","sourceRoot":"","sources":["../src/axon-server-snapshotting-event-store.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAGnB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAkD5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,UAAU,EACnE,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,kBAAkB,CA6ExB"}
@@ -0,0 +1,153 @@
1
+ // ---------------------------------------------------------------------------
2
+ // AXON SERVER SNAPSHOTS — the capability tier, served by `DcbSnapshotStore`.
3
+ //
4
+ // THE PROBE, AND WHAT IT SETTLED. Axon Server's public API defines both a
5
+ // snapshot STORE service (`DcbSnapshotStore`: Add / Delete / List / GetLast)
6
+ // and, on newer API drops, a fused `SnapshottedDcbEventStore.Source` whose
7
+ // stream leads with the snapshot. Only the first of those is actually served:
8
+ //
9
+ // axoniq/axonserver:2025.2.5 DcbSnapshotStore/GetLast → answers
10
+ // SnapshottedDcbEventStore/Source → UNIMPLEMENTED
11
+ // axoniq/axonserver:2026.0.4 same, both ways
12
+ //
13
+ // So there is no server-side fusion to call here — there is nothing on the
14
+ // other end of the wire. The READ is therefore fused CLIENT-SIDE: `GetLast` for
15
+ // the entry, then a source after its position, assembled into the one
16
+ // `SourcingResult` a fold expects. Two round trips, the same answers, correct
17
+ // today.
18
+ //
19
+ // When a server version does serve `SnapshottedDcbEventStore.Source`, the fused
20
+ // call lands INSIDE this function — `source` stops making two calls and starts
21
+ // making one — and no host changes a line, because the capability was never a
22
+ // promise about round trips.
23
+ // ---------------------------------------------------------------------------
24
+ import { withoutSnapshotKey } from "@kronos-ts/core";
25
+ import { contextView } from "./context-view.js";
26
+ // ---------------------------------------------------------------------------
27
+ // Conversion — framework Snapshot ↔ proto Snapshot
28
+ // ---------------------------------------------------------------------------
29
+ const encoder = new TextEncoder();
30
+ /**
31
+ * The proto message carries `name`, `version`, `timestamp` and a metadata map
32
+ * the narrowed seam has no equivalent for. `name` carries the cache key,
33
+ * `timestamp` is filled at write time for operators, and `version` stays EMPTY
34
+ * — snapshots have no versions, and inventing one to fill a proto field would
35
+ * be exactly the bookkeeping this design removed. The metadata map stays empty
36
+ * too: a cache entry carries no cargo.
37
+ */
38
+ function createSnapshotConverters(serializer) {
39
+ return {
40
+ snapshotToProto(name, snapshot) {
41
+ const serialized = serializer.serialize(snapshot.state, name, "");
42
+ return {
43
+ name,
44
+ version: "",
45
+ payload: serialized.data,
46
+ timestamp: BigInt(Date.now()),
47
+ metadata: {},
48
+ };
49
+ },
50
+ snapshotFromProto(name, proto, position) {
51
+ const state = proto.payload.length > 0
52
+ ? serializer.deserialize({ data: proto.payload, type: name, revision: "" })
53
+ : {};
54
+ return { state, position };
55
+ },
56
+ };
57
+ }
58
+ function encodeKey(key) {
59
+ return encoder.encode(key);
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // Axon Server snapshot store
63
+ // ---------------------------------------------------------------------------
64
+ /**
65
+ * Add the snapshotting capability to an Axon Server-backed log.
66
+ *
67
+ * ```ts
68
+ * const eventStore = axonServerSnapshottingEventStore(
69
+ * axonServerEventStore(axon, "default"),
70
+ * axon,
71
+ * "default",
72
+ * )
73
+ * ```
74
+ *
75
+ * ADDITIVE, NOT COLLAPSING. It returns `E & SnapshotCapability` — the store you
76
+ * passed in, plus the write — so capabilities stack in either order and nothing
77
+ * the inner store carried is laundered on the way through.
78
+ *
79
+ * `context` is a per-call header, so this shares the one channel `conn` holds
80
+ * with every other context — see `contextView`. Payloads go through the
81
+ * connection's serializer.
82
+ *
83
+ * LATEST-ONLY, over a service that is not. `DcbSnapshotStore` keeps a sequence
84
+ * of snapshots per key; the capability keeps one. `add` therefore sets
85
+ * `prune: true`, so writing an entry retires the ones before it, and `getLast`
86
+ * is the only read. That is the narrowing doing its job: the framework programs
87
+ * against the cache it needs, not against everything the backend happens to
88
+ * offer.
89
+ */
90
+ export function axonServerSnapshottingEventStore(next, conn, context) {
91
+ const { connection, serializer, metadata: createAxonMetadata } = contextView(conn, context);
92
+ const { snapshotToProto, snapshotFromProto } = createSnapshotConverters(serializer);
93
+ /** The cached fold filed under `key`, or nothing — the first of the two calls. */
94
+ async function loadSnapshot(key) {
95
+ try {
96
+ const response = await connection.snapshotStore.getLast({ key: encodeKey(key) }, { metadata: createAxonMetadata() });
97
+ if (!response.snapshot) {
98
+ return undefined;
99
+ }
100
+ return snapshotFromProto(key, response.snapshot, response.sequence);
101
+ }
102
+ catch (err) {
103
+ // Axon Server throws rather than answering empty when no snapshot
104
+ // exists — and a cache miss is not an error to anybody upstream.
105
+ if (String(err).includes("No snapshot found") ||
106
+ String(err).includes("not found")) {
107
+ return undefined;
108
+ }
109
+ throw err;
110
+ }
111
+ }
112
+ return {
113
+ ...next,
114
+ async storeSnapshot(key, snapshot) {
115
+ await connection.snapshotStore.add({
116
+ key: encodeKey(key),
117
+ sequence: snapshot.position,
118
+ prune: true,
119
+ snapshot: snapshotToProto(key, snapshot),
120
+ }, { metadata: createAxonMetadata() });
121
+ },
122
+ /**
123
+ * THE CLIENT-SIDE FUSION. Two calls, assembled into the one result a fold
124
+ * expects — and the cache is NEVER LOAD-BEARING, so a miss or an outright
125
+ * throw from the snapshot service both fall through to a full read.
126
+ */
127
+ async source(condition) {
128
+ const key = condition.snapshot;
129
+ if (key === undefined)
130
+ return next.source(condition);
131
+ // The strategy is CONSUMED here; the store below gets a plain condition.
132
+ const plain = withoutSnapshotKey(condition);
133
+ let snapshot;
134
+ try {
135
+ snapshot = await loadSnapshot(key.key);
136
+ }
137
+ catch {
138
+ // A cache you cannot reach is a cache miss. Loads stay correct; they
139
+ // just cost what they always cost.
140
+ return next.source(plain);
141
+ }
142
+ if (snapshot === undefined)
143
+ return next.source(plain);
144
+ // Resume AFTER the position the snapshot already folded; a condition that
145
+ // independently asked to start later keeps its own floor.
146
+ const resumeFrom = snapshot.position + 1n;
147
+ const start = plain.start !== undefined && plain.start > resumeFrom ? plain.start : resumeFrom;
148
+ const result = await next.source({ ...plain, start });
149
+ return { ...result, snapshot };
150
+ },
151
+ };
152
+ }
153
+ //# sourceMappingURL=axon-server-snapshotting-event-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axon-server-snapshotting-event-store.js","sourceRoot":"","sources":["../src/axon-server-snapshotting-event-store.ts"],"names":[],"mappings":"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"}