@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.
Files changed (106) hide show
  1. package/dist/axon-server-event-store.d.ts +0 -16
  2. package/dist/axon-server-event-store.d.ts.map +1 -1
  3. package/dist/axon-server-event-store.js +73 -45
  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 +154 -0
  8. package/dist/axon-server-snapshotting-event-store.js.map +1 -0
  9. package/dist/axon-server.d.ts +46 -65
  10. package/dist/axon-server.d.ts.map +1 -1
  11. package/dist/axon-server.js +490 -317
  12. package/dist/axon-server.js.map +1 -1
  13. package/dist/bounded-read.d.ts +19 -0
  14. package/dist/bounded-read.d.ts.map +1 -0
  15. package/dist/bounded-read.js +39 -0
  16. package/dist/bounded-read.js.map +1 -0
  17. package/dist/connection-manager.d.ts +2 -2
  18. package/dist/connection-manager.d.ts.map +1 -1
  19. package/dist/connection.d.ts +36 -21
  20. package/dist/connection.d.ts.map +1 -1
  21. package/dist/connection.js +84 -45
  22. package/dist/connection.js.map +1 -1
  23. package/dist/context-view.d.ts +2 -2
  24. package/dist/context-view.d.ts.map +1 -1
  25. package/dist/control-plane.d.ts +14 -24
  26. package/dist/control-plane.d.ts.map +1 -1
  27. package/dist/control-plane.js +6 -37
  28. package/dist/control-plane.js.map +1 -1
  29. package/dist/event-processor-info.d.ts +7 -25
  30. package/dist/event-processor-info.d.ts.map +1 -1
  31. package/dist/event-processor-info.js +16 -20
  32. package/dist/event-processor-info.js.map +1 -1
  33. package/dist/flow-controlled-sender.d.ts +2 -2
  34. package/dist/flow-controlled-sender.d.ts.map +1 -1
  35. package/dist/flow-controlled-sender.js +37 -17
  36. package/dist/flow-controlled-sender.js.map +1 -1
  37. package/dist/generated/command.d.ts +20 -20
  38. package/dist/generated/command.d.ts.map +1 -1
  39. package/dist/generated/common.d.ts +20 -20
  40. package/dist/generated/common.d.ts.map +1 -1
  41. package/dist/generated/control.d.ts +36 -40
  42. package/dist/generated/control.d.ts.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/event.d.ts +81 -84
  46. package/dist/generated/event.d.ts.map +1 -1
  47. package/dist/generated/google/protobuf/empty.d.ts +3 -4
  48. package/dist/generated/google/protobuf/empty.d.ts.map +1 -1
  49. package/dist/generated/query.d.ts +40 -40
  50. package/dist/generated/query.d.ts.map +1 -1
  51. package/dist/index.d.ts +2 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +1 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/message-size.d.ts +2 -2
  56. package/dist/message-size.d.ts.map +1 -1
  57. package/dist/outbound-stream.d.ts +7 -11
  58. package/dist/outbound-stream.d.ts.map +1 -1
  59. package/dist/outbound-stream.js +65 -16
  60. package/dist/outbound-stream.js.map +1 -1
  61. package/dist/platform-service.d.ts +14 -5
  62. package/dist/platform-service.d.ts.map +1 -1
  63. package/dist/platform-service.js +70 -10
  64. package/dist/platform-service.js.map +1 -1
  65. package/dist/resilience.d.ts +62 -0
  66. package/dist/resilience.d.ts.map +1 -0
  67. package/dist/resilience.js +103 -0
  68. package/dist/resilience.js.map +1 -0
  69. package/dist/shutdown-latch.d.ts +5 -4
  70. package/dist/shutdown-latch.d.ts.map +1 -1
  71. package/dist/shutdown-latch.js +20 -1
  72. package/dist/shutdown-latch.js.map +1 -1
  73. package/dist/stream-recovery.d.ts +9 -0
  74. package/dist/stream-recovery.d.ts.map +1 -0
  75. package/dist/stream-recovery.js +70 -0
  76. package/dist/stream-recovery.js.map +1 -0
  77. package/package.json +3 -3
  78. package/src/axon-server-event-store.ts +77 -47
  79. package/src/axon-server-snapshotting-event-store.ts +194 -0
  80. package/src/axon-server.ts +472 -374
  81. package/src/bounded-read.ts +43 -0
  82. package/src/connection-manager.ts +1 -1
  83. package/src/connection.ts +93 -59
  84. package/src/context-view.ts +1 -1
  85. package/src/control-plane.ts +22 -66
  86. package/src/event-processor-info.ts +23 -44
  87. package/src/flow-controlled-sender.ts +34 -15
  88. package/src/generated/command.ts +10 -10
  89. package/src/generated/common.ts +10 -10
  90. package/src/generated/control.ts +20 -20
  91. package/src/generated/dcb.ts +47 -47
  92. package/src/generated/event.ts +42 -42
  93. package/src/generated/google/protobuf/empty.ts +2 -2
  94. package/src/generated/query.ts +20 -20
  95. package/src/index.ts +1 -2
  96. package/src/message-size.ts +1 -1
  97. package/src/outbound-stream.ts +58 -28
  98. package/src/platform-service.ts +77 -13
  99. package/src/resilience.ts +149 -0
  100. package/src/shutdown-latch.ts +16 -3
  101. package/src/stream-recovery.ts +72 -0
  102. package/dist/axon-server-snapshot-store.d.ts +0 -12
  103. package/dist/axon-server-snapshot-store.d.ts.map +0 -1
  104. package/dist/axon-server-snapshot-store.js +0 -82
  105. package/dist/axon-server-snapshot-store.js.map +0 -1
  106. 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
- }