@kronos-ts/axon-server 0.4.0 → 0.6.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.
- package/dist/axon-server-event-store.d.ts +0 -16
- package/dist/axon-server-event-store.d.ts.map +1 -1
- package/dist/axon-server-event-store.js +73 -45
- package/dist/axon-server-event-store.js.map +1 -1
- package/dist/axon-server-snapshotting-event-store.d.ts +30 -0
- package/dist/axon-server-snapshotting-event-store.d.ts.map +1 -0
- package/dist/axon-server-snapshotting-event-store.js +154 -0
- package/dist/axon-server-snapshotting-event-store.js.map +1 -0
- package/dist/axon-server.d.ts +46 -65
- package/dist/axon-server.d.ts.map +1 -1
- package/dist/axon-server.js +490 -317
- package/dist/axon-server.js.map +1 -1
- package/dist/bounded-read.d.ts +19 -0
- package/dist/bounded-read.d.ts.map +1 -0
- package/dist/bounded-read.js +39 -0
- package/dist/bounded-read.js.map +1 -0
- package/dist/connection-manager.d.ts +2 -2
- package/dist/connection-manager.d.ts.map +1 -1
- package/dist/connection.d.ts +36 -21
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +84 -45
- package/dist/connection.js.map +1 -1
- package/dist/context-view.d.ts +2 -2
- package/dist/context-view.d.ts.map +1 -1
- package/dist/control-plane.d.ts +14 -24
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js +6 -37
- package/dist/control-plane.js.map +1 -1
- package/dist/event-processor-info.d.ts +7 -25
- package/dist/event-processor-info.d.ts.map +1 -1
- package/dist/event-processor-info.js +16 -20
- package/dist/event-processor-info.js.map +1 -1
- package/dist/flow-controlled-sender.d.ts +2 -2
- package/dist/flow-controlled-sender.d.ts.map +1 -1
- package/dist/flow-controlled-sender.js +37 -17
- package/dist/flow-controlled-sender.js.map +1 -1
- package/dist/generated/command.d.ts +20 -20
- package/dist/generated/command.d.ts.map +1 -1
- package/dist/generated/common.d.ts +20 -20
- package/dist/generated/common.d.ts.map +1 -1
- package/dist/generated/control.d.ts +36 -40
- package/dist/generated/control.d.ts.map +1 -1
- package/dist/generated/dcb.d.ts +88 -94
- package/dist/generated/dcb.d.ts.map +1 -1
- package/dist/generated/event.d.ts +81 -84
- package/dist/generated/event.d.ts.map +1 -1
- package/dist/generated/google/protobuf/empty.d.ts +3 -4
- package/dist/generated/google/protobuf/empty.d.ts.map +1 -1
- package/dist/generated/query.d.ts +40 -40
- package/dist/generated/query.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/message-size.d.ts +2 -2
- package/dist/message-size.d.ts.map +1 -1
- package/dist/outbound-stream.d.ts +7 -11
- package/dist/outbound-stream.d.ts.map +1 -1
- package/dist/outbound-stream.js +65 -16
- package/dist/outbound-stream.js.map +1 -1
- package/dist/platform-service.d.ts +14 -5
- package/dist/platform-service.d.ts.map +1 -1
- package/dist/platform-service.js +70 -10
- package/dist/platform-service.js.map +1 -1
- package/dist/resilience.d.ts +62 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +103 -0
- package/dist/resilience.js.map +1 -0
- package/dist/shutdown-latch.d.ts +5 -4
- package/dist/shutdown-latch.d.ts.map +1 -1
- package/dist/shutdown-latch.js +20 -1
- package/dist/shutdown-latch.js.map +1 -1
- package/dist/stream-recovery.d.ts +9 -0
- package/dist/stream-recovery.d.ts.map +1 -0
- package/dist/stream-recovery.js +70 -0
- package/dist/stream-recovery.js.map +1 -0
- package/package.json +3 -3
- package/src/axon-server-event-store.ts +77 -47
- package/src/axon-server-snapshotting-event-store.ts +194 -0
- package/src/axon-server.ts +472 -374
- package/src/bounded-read.ts +43 -0
- package/src/connection-manager.ts +1 -1
- package/src/connection.ts +93 -59
- package/src/context-view.ts +1 -1
- package/src/control-plane.ts +22 -66
- package/src/event-processor-info.ts +23 -44
- package/src/flow-controlled-sender.ts +34 -15
- package/src/generated/command.ts +10 -10
- package/src/generated/common.ts +10 -10
- package/src/generated/control.ts +20 -20
- package/src/generated/dcb.ts +47 -47
- package/src/generated/event.ts +42 -42
- package/src/generated/google/protobuf/empty.ts +2 -2
- package/src/generated/query.ts +20 -20
- package/src/index.ts +1 -2
- package/src/message-size.ts +1 -1
- package/src/outbound-stream.ts +58 -28
- package/src/platform-service.ts +77 -13
- package/src/resilience.ts +149 -0
- package/src/shutdown-latch.ts +16 -3
- package/src/stream-recovery.ts +72 -0
- package/dist/axon-server-snapshot-store.d.ts +0 -12
- package/dist/axon-server-snapshot-store.d.ts.map +0 -1
- package/dist/axon-server-snapshot-store.js +0 -82
- package/dist/axon-server-snapshot-store.js.map +0 -1
- package/src/axon-server-snapshot-store.ts +0 -110
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import type { SnapshotStore, Snapshot } from "@kronos-ts/core"
|
|
2
|
-
import type { Serializer } from "@kronos-ts/core"
|
|
3
|
-
import type { AxonServerStoreSource } from "./connection.js"
|
|
4
|
-
import { contextView } from "./context-view.js"
|
|
5
|
-
import type { Snapshot as ProtoSnapshot } from "./generated/dcb.js"
|
|
6
|
-
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
// Conversion — framework Snapshot ↔ proto Snapshot
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
const encoder = new TextEncoder()
|
|
12
|
-
|
|
13
|
-
function createSnapshotConverters(serializer: Serializer) {
|
|
14
|
-
return {
|
|
15
|
-
snapshotToProto(snapshot: Snapshot): ProtoSnapshot {
|
|
16
|
-
const serialized = serializer.serialize(snapshot.payload, "snapshot", "")
|
|
17
|
-
return {
|
|
18
|
-
name: "",
|
|
19
|
-
version: "",
|
|
20
|
-
payload: serialized.data,
|
|
21
|
-
timestamp: BigInt(snapshot.timestamp),
|
|
22
|
-
metadata: snapshot.metadata,
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
snapshotFromProto(proto: ProtoSnapshot, position: bigint): Snapshot {
|
|
27
|
-
const payload =
|
|
28
|
-
proto.payload.length > 0
|
|
29
|
-
? serializer.deserialize({ data: proto.payload, type: "snapshot", revision: "" })
|
|
30
|
-
: {}
|
|
31
|
-
|
|
32
|
-
return {
|
|
33
|
-
position,
|
|
34
|
-
payload,
|
|
35
|
-
timestamp: Number(proto.timestamp),
|
|
36
|
-
metadata: proto.metadata ?? {},
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function encodeKey(stateName: string, id: unknown): Uint8Array {
|
|
43
|
-
const idStr = typeof id === "object" && id !== null ? JSON.stringify(id) : String(id)
|
|
44
|
-
return encoder.encode(`${stateName}:${idStr}`)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// ---------------------------------------------------------------------------
|
|
48
|
-
// Axon Server snapshot store
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* A SnapshotStore over Axon Server's gRPC snapshot service, in one context.
|
|
53
|
-
*
|
|
54
|
-
* Uses the `DcbSnapshotStore` gRPC service to store and retrieve state
|
|
55
|
-
* snapshots. `context` is a per-call header, so this shares the one channel
|
|
56
|
-
* `conn` holds with every other context — see `contextView`. Payloads go
|
|
57
|
-
* through the connection's serializer.
|
|
58
|
-
*/
|
|
59
|
-
export function axonServerSnapshotStore(
|
|
60
|
-
conn: AxonServerStoreSource,
|
|
61
|
-
context: string,
|
|
62
|
-
): SnapshotStore {
|
|
63
|
-
const { connection, serializer, metadata: createAxonMetadata } = contextView(conn, context)
|
|
64
|
-
const { snapshotToProto, snapshotFromProto } = createSnapshotConverters(serializer)
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
async store(stateName: string, id: unknown, snapshot: Snapshot): Promise<void> {
|
|
68
|
-
await connection.snapshotStore.add(
|
|
69
|
-
{
|
|
70
|
-
key: encodeKey(stateName, id),
|
|
71
|
-
sequence: snapshot.position,
|
|
72
|
-
prune: true,
|
|
73
|
-
snapshot: snapshotToProto(snapshot),
|
|
74
|
-
},
|
|
75
|
-
{ metadata: createAxonMetadata() },
|
|
76
|
-
)
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
async load(stateName: string, id: unknown): Promise<Snapshot | undefined> {
|
|
80
|
-
try {
|
|
81
|
-
const response = await connection.snapshotStore.getLast(
|
|
82
|
-
{ key: encodeKey(stateName, id) },
|
|
83
|
-
{ metadata: createAxonMetadata() },
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
if (!response.snapshot) {
|
|
87
|
-
return undefined
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return snapshotFromProto(response.snapshot, response.sequence)
|
|
91
|
-
} catch (err) {
|
|
92
|
-
// Axon Server throws when no snapshot exists — treat as "not found"
|
|
93
|
-
if (String(err).includes("No snapshot found")) {
|
|
94
|
-
return undefined
|
|
95
|
-
}
|
|
96
|
-
throw err
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
|
|
100
|
-
async deleteSnapshots(stateName: string, id: unknown): Promise<void> {
|
|
101
|
-
await connection.snapshotStore.delete(
|
|
102
|
-
{
|
|
103
|
-
key: encodeKey(stateName, id),
|
|
104
|
-
toSequence: BigInt(Number.MAX_SAFE_INTEGER),
|
|
105
|
-
},
|
|
106
|
-
{ metadata: createAxonMetadata() },
|
|
107
|
-
)
|
|
108
|
-
},
|
|
109
|
-
}
|
|
110
|
-
}
|