@kronos-ts/axon-server 0.1.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 +16 -0
- package/dist/axon-server-event-store.d.ts.map +1 -0
- package/dist/axon-server-event-store.js +282 -0
- package/dist/axon-server-event-store.js.map +1 -0
- package/dist/axon-server-snapshot-store.d.ts +12 -0
- package/dist/axon-server-snapshot-store.d.ts.map +1 -0
- package/dist/axon-server-snapshot-store.js +88 -0
- package/dist/axon-server-snapshot-store.js.map +1 -0
- package/dist/axon-server.d.ts +115 -0
- package/dist/axon-server.d.ts.map +1 -0
- package/dist/axon-server.js +986 -0
- package/dist/axon-server.js.map +1 -0
- package/dist/connection-manager.d.ts +49 -0
- package/dist/connection-manager.d.ts.map +1 -0
- package/dist/connection-manager.js +37 -0
- package/dist/connection-manager.js.map +1 -0
- package/dist/connection.d.ts +129 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +130 -0
- package/dist/connection.js.map +1 -0
- package/dist/errors.d.ts +96 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +189 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-processor-info.d.ts +35 -0
- package/dist/event-processor-info.d.ts.map +1 -0
- package/dist/event-processor-info.js +28 -0
- package/dist/event-processor-info.js.map +1 -0
- package/dist/flow-controlled-sender.d.ts +30 -0
- package/dist/flow-controlled-sender.d.ts.map +1 -0
- package/dist/flow-controlled-sender.js +60 -0
- package/dist/flow-controlled-sender.js.map +1 -0
- package/dist/generated/command.d.ts +158 -0
- package/dist/generated/command.d.ts.map +1 -0
- package/dist/generated/command.js +970 -0
- package/dist/generated/command.js.map +1 -0
- package/dist/generated/common.d.ts +130 -0
- package/dist/generated/common.d.ts.map +1 -0
- package/dist/generated/common.js +908 -0
- package/dist/generated/common.js.map +1 -0
- package/dist/generated/control.d.ts +293 -0
- package/dist/generated/control.d.ts.map +1 -0
- package/dist/generated/control.js +1938 -0
- package/dist/generated/control.js.map +1 -0
- package/dist/generated/dcb.d.ts +650 -0
- package/dist/generated/dcb.d.ts.map +1 -0
- package/dist/generated/dcb.js +2943 -0
- package/dist/generated/dcb.js.map +1 -0
- package/dist/generated/event.d.ts +667 -0
- package/dist/generated/event.d.ts.map +1 -0
- package/dist/generated/event.js +3185 -0
- package/dist/generated/event.js.map +1 -0
- package/dist/generated/google/protobuf/empty.d.ts +30 -0
- package/dist/generated/google/protobuf/empty.d.ts.map +1 -0
- package/dist/generated/google/protobuf/empty.js +46 -0
- package/dist/generated/google/protobuf/empty.js.map +1 -0
- package/dist/generated/query.d.ts +300 -0
- package/dist/generated/query.d.ts.map +1 -0
- package/dist/generated/query.js +2183 -0
- package/dist/generated/query.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/message-size.d.ts +38 -0
- package/dist/message-size.d.ts.map +1 -0
- package/dist/message-size.js +57 -0
- package/dist/message-size.js.map +1 -0
- package/dist/metadata-conversion.d.ts +11 -0
- package/dist/metadata-conversion.d.ts.map +1 -0
- package/dist/metadata-conversion.js +51 -0
- package/dist/metadata-conversion.js.map +1 -0
- package/dist/outbound-stream.d.ts +15 -0
- package/dist/outbound-stream.d.ts.map +1 -0
- package/dist/outbound-stream.js +39 -0
- package/dist/outbound-stream.js.map +1 -0
- package/dist/platform-service.d.ts +119 -0
- package/dist/platform-service.d.ts.map +1 -0
- package/dist/platform-service.js +250 -0
- package/dist/platform-service.js.map +1 -0
- package/dist/shutdown-latch.d.ts +38 -0
- package/dist/shutdown-latch.d.ts.map +1 -0
- package/dist/shutdown-latch.js +51 -0
- package/dist/shutdown-latch.js.map +1 -0
- package/package.json +69 -0
- package/src/axon-server-event-store.ts +358 -0
- package/src/axon-server-snapshot-store.ts +118 -0
- package/src/axon-server.ts +1202 -0
- package/src/connection-manager.ts +88 -0
- package/src/connection.ts +272 -0
- package/src/errors.ts +223 -0
- package/src/event-processor-info.ts +62 -0
- package/src/flow-controlled-sender.ts +91 -0
- package/src/generated/command.ts +1231 -0
- package/src/generated/common.ts +1097 -0
- package/src/generated/control.ts +2419 -0
- package/src/generated/dcb.ts +3826 -0
- package/src/generated/event.ts +4076 -0
- package/src/generated/google/protobuf/empty.ts +84 -0
- package/src/generated/query.ts +2723 -0
- package/src/index.ts +75 -0
- package/src/message-size.ts +75 -0
- package/src/metadata-conversion.ts +46 -0
- package/src/outbound-stream.ts +52 -0
- package/src/platform-service.ts +361 -0
- package/src/shutdown-latch.ts +97 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow-controlled sender for subscription query updates.
|
|
3
|
+
*
|
|
4
|
+
* Implements request-based backpressure: the receiver requests N updates,
|
|
5
|
+
* and the sender only sends when permits are available. When permits are
|
|
6
|
+
* exhausted, updates are buffered until more permits arrive.
|
|
7
|
+
*
|
|
8
|
+
* Aligned with Java's `FlowControlledResponseSender`.
|
|
9
|
+
*/
|
|
10
|
+
export interface FlowControlledSender<T> {
|
|
11
|
+
/** Send an update. Buffers if no permits available. */
|
|
12
|
+
offer(value: T): boolean
|
|
13
|
+
/** Grant additional permits to the sender. */
|
|
14
|
+
addPermits(count: number): void
|
|
15
|
+
/** Complete the stream normally. */
|
|
16
|
+
complete(): void
|
|
17
|
+
/** Complete the stream with an error. */
|
|
18
|
+
completeExceptionally(error: Error): void
|
|
19
|
+
/** Whether the stream is still active. */
|
|
20
|
+
readonly active: boolean
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Creates a flow-controlled sender that buffers updates when permits are
|
|
25
|
+
* exhausted and drains the buffer when new permits arrive.
|
|
26
|
+
*
|
|
27
|
+
* @param send Function called to actually send an update downstream.
|
|
28
|
+
* @param maxBufferSize Maximum number of updates to buffer. Default: 256.
|
|
29
|
+
*/
|
|
30
|
+
export function createFlowControlledSender<T>(
|
|
31
|
+
send: (value: T) => void,
|
|
32
|
+
onComplete?: () => void,
|
|
33
|
+
onError?: (error: Error) => void,
|
|
34
|
+
maxBufferSize: number = 256,
|
|
35
|
+
): FlowControlledSender<T> {
|
|
36
|
+
const buffer: T[] = []
|
|
37
|
+
let permits = 0
|
|
38
|
+
let isActive = true
|
|
39
|
+
|
|
40
|
+
function drain() {
|
|
41
|
+
while (permits > 0 && buffer.length > 0 && isActive) {
|
|
42
|
+
const value = buffer.shift()!
|
|
43
|
+
permits--
|
|
44
|
+
try {
|
|
45
|
+
send(value)
|
|
46
|
+
} catch (err) {
|
|
47
|
+
console.warn("FlowControlledSender: send error", err)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
offer(value: T): boolean {
|
|
54
|
+
if (!isActive) return false
|
|
55
|
+
|
|
56
|
+
if (permits > 0) {
|
|
57
|
+
permits--
|
|
58
|
+
send(value)
|
|
59
|
+
return true
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (buffer.length >= maxBufferSize) {
|
|
63
|
+
return false
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
buffer.push(value)
|
|
67
|
+
return true
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
addPermits(count: number) {
|
|
71
|
+
permits += count
|
|
72
|
+
drain()
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
complete() {
|
|
76
|
+
isActive = false
|
|
77
|
+
buffer.length = 0
|
|
78
|
+
if (onComplete) onComplete()
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
completeExceptionally(error: Error) {
|
|
82
|
+
isActive = false
|
|
83
|
+
buffer.length = 0
|
|
84
|
+
if (onError) onError(error)
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
get active() {
|
|
88
|
+
return isActive
|
|
89
|
+
},
|
|
90
|
+
}
|
|
91
|
+
}
|