@kronos-ts/kronosdb 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.
Files changed (96) hide show
  1. package/dist/connection.d.ts +86 -0
  2. package/dist/connection.d.ts.map +1 -0
  3. package/dist/connection.js +133 -0
  4. package/dist/connection.js.map +1 -0
  5. package/dist/errors.d.ts +72 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +149 -0
  8. package/dist/errors.js.map +1 -0
  9. package/dist/event-processor-info.d.ts +32 -0
  10. package/dist/event-processor-info.d.ts.map +1 -0
  11. package/dist/event-processor-info.js +24 -0
  12. package/dist/event-processor-info.js.map +1 -0
  13. package/dist/flow-controlled-sender.d.ts +12 -0
  14. package/dist/flow-controlled-sender.d.ts.map +1 -0
  15. package/dist/flow-controlled-sender.js +53 -0
  16. package/dist/flow-controlled-sender.js.map +1 -0
  17. package/dist/generated/command.d.ts +169 -0
  18. package/dist/generated/command.d.ts.map +1 -0
  19. package/dist/generated/command.js +964 -0
  20. package/dist/generated/command.js.map +1 -0
  21. package/dist/generated/common.d.ts +76 -0
  22. package/dist/generated/common.d.ts.map +1 -0
  23. package/dist/generated/common.js +648 -0
  24. package/dist/generated/common.js.map +1 -0
  25. package/dist/generated/eventstore.d.ts +337 -0
  26. package/dist/generated/eventstore.d.ts.map +1 -0
  27. package/dist/generated/eventstore.js +1757 -0
  28. package/dist/generated/eventstore.js.map +1 -0
  29. package/dist/generated/platform.d.ts +242 -0
  30. package/dist/generated/platform.d.ts.map +1 -0
  31. package/dist/generated/platform.js +1525 -0
  32. package/dist/generated/platform.js.map +1 -0
  33. package/dist/generated/query.d.ts +265 -0
  34. package/dist/generated/query.d.ts.map +1 -0
  35. package/dist/generated/query.js +2114 -0
  36. package/dist/generated/query.js.map +1 -0
  37. package/dist/generated/snapshot.d.ts +180 -0
  38. package/dist/generated/snapshot.d.ts.map +1 -0
  39. package/dist/generated/snapshot.js +861 -0
  40. package/dist/generated/snapshot.js.map +1 -0
  41. package/dist/index.d.ts +13 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +13 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/kronosdb-event-store.d.ts +17 -0
  46. package/dist/kronosdb-event-store.d.ts.map +1 -0
  47. package/dist/kronosdb-event-store.js +328 -0
  48. package/dist/kronosdb-event-store.js.map +1 -0
  49. package/dist/kronosdb-snapshot-store.d.ts +10 -0
  50. package/dist/kronosdb-snapshot-store.d.ts.map +1 -0
  51. package/dist/kronosdb-snapshot-store.js +79 -0
  52. package/dist/kronosdb-snapshot-store.js.map +1 -0
  53. package/dist/kronosdb.d.ts +53 -0
  54. package/dist/kronosdb.d.ts.map +1 -0
  55. package/dist/kronosdb.js +852 -0
  56. package/dist/kronosdb.js.map +1 -0
  57. package/dist/metadata-conversion.d.ts +37 -0
  58. package/dist/metadata-conversion.d.ts.map +1 -0
  59. package/dist/metadata-conversion.js +75 -0
  60. package/dist/metadata-conversion.js.map +1 -0
  61. package/dist/outbound-stream.d.ts +15 -0
  62. package/dist/outbound-stream.d.ts.map +1 -0
  63. package/dist/outbound-stream.js +39 -0
  64. package/dist/outbound-stream.js.map +1 -0
  65. package/dist/platform-service.d.ts +87 -0
  66. package/dist/platform-service.d.ts.map +1 -0
  67. package/dist/platform-service.js +218 -0
  68. package/dist/platform-service.js.map +1 -0
  69. package/dist/service-definitions.d.ts +187 -0
  70. package/dist/service-definitions.d.ts.map +1 -0
  71. package/dist/service-definitions.js +18 -0
  72. package/dist/service-definitions.js.map +1 -0
  73. package/dist/shutdown-latch.d.ts +18 -0
  74. package/dist/shutdown-latch.d.ts.map +1 -0
  75. package/dist/shutdown-latch.js +51 -0
  76. package/dist/shutdown-latch.js.map +1 -0
  77. package/package.json +69 -0
  78. package/src/connection.ts +235 -0
  79. package/src/errors.ts +173 -0
  80. package/src/event-processor-info.ts +53 -0
  81. package/src/flow-controlled-sender.ts +73 -0
  82. package/src/generated/command.ts +1226 -0
  83. package/src/generated/common.ts +770 -0
  84. package/src/generated/eventstore.ts +2241 -0
  85. package/src/generated/platform.ts +1914 -0
  86. package/src/generated/query.ts +2571 -0
  87. package/src/generated/snapshot.ts +1110 -0
  88. package/src/index.ts +87 -0
  89. package/src/kronosdb-event-store.ts +401 -0
  90. package/src/kronosdb-snapshot-store.ts +104 -0
  91. package/src/kronosdb.ts +1000 -0
  92. package/src/metadata-conversion.ts +85 -0
  93. package/src/outbound-stream.ts +52 -0
  94. package/src/platform-service.ts +297 -0
  95. package/src/service-definitions.ts +25 -0
  96. package/src/shutdown-latch.ts +74 -0
@@ -0,0 +1,86 @@
1
+ import { type Channel, type Client } from "nice-grpc";
2
+ import { Metadata } from "nice-grpc";
3
+ import { PlatformServiceDefinition, CommandServiceDefinition, QueryServiceDefinition, EventStoreDefinition, SnapshotStoreDefinition } from "./service-definitions.js";
4
+ /**
5
+ * Configuration for connecting to KronosDB.
6
+ */
7
+ export interface KronosDbConnectionConfig {
8
+ /** Host of the KronosDB server. Defaults to "localhost". */
9
+ host?: string;
10
+ /** gRPC port of the KronosDB server. Defaults to 50051. */
11
+ port?: number;
12
+ /**
13
+ * Multiple server addresses for cluster deployments.
14
+ * Each entry is `"host:port"`. When provided, overrides `host` and `port`.
15
+ * The connector tries servers in order and fails over to the next on failure.
16
+ */
17
+ servers?: string[];
18
+ /** The context to connect to. Defaults to "default". */
19
+ context?: string;
20
+ /** Name identifying this component to KronosDB. */
21
+ componentName: string;
22
+ /** Unique client identifier. Defaults to a generated UUID. */
23
+ clientId?: string;
24
+ /** Access token for authentication. Optional. */
25
+ token?: string;
26
+ /** Reconnection interval in ms. Defaults to 2000. */
27
+ reconnectIntervalMs?: number;
28
+ /** Maximum reconnection attempts before giving up. 0 = unlimited. Defaults to 0. */
29
+ maxReconnectAttempts?: number;
30
+ /** gRPC keepalive ping interval in ms. Default: 30000. */
31
+ keepAliveTimeMs?: number;
32
+ /** gRPC keepalive timeout in ms. Default: 10000. */
33
+ keepAliveTimeoutMs?: number;
34
+ /** Allow keepalive pings without active RPCs. Default: true. */
35
+ keepAlivePermitWithoutCalls?: boolean;
36
+ /** TLS/SSL configuration. */
37
+ ssl?: {
38
+ enabled: boolean;
39
+ certFile?: string;
40
+ clientCertFile?: string;
41
+ clientKeyFile?: string;
42
+ };
43
+ }
44
+ export type ConnectionState = "disconnected" | "connecting" | "connected" | "reconnecting" | "closed";
45
+ /**
46
+ * An active connection to KronosDB, providing typed gRPC clients
47
+ * for all services. Supports reconnection on failure.
48
+ */
49
+ export interface KronosDbConnection {
50
+ readonly channel: Channel;
51
+ /** Platform service client. */
52
+ readonly platform: Client<typeof PlatformServiceDefinition>;
53
+ /** Command service client. */
54
+ readonly commands: Client<typeof CommandServiceDefinition>;
55
+ /** Query service client. */
56
+ readonly queries: Client<typeof QueryServiceDefinition>;
57
+ /** Event store client. */
58
+ readonly eventStore: Client<typeof EventStoreDefinition>;
59
+ /** Snapshot store client. */
60
+ readonly snapshotStore: Client<typeof SnapshotStoreDefinition>;
61
+ /** The resolved configuration. `servers` and `ssl` stay optional — they have no defaults. */
62
+ readonly config: Omit<Required<KronosDbConnectionConfig>, "servers" | "ssl"> & {
63
+ servers?: KronosDbConnectionConfig["servers"];
64
+ ssl?: KronosDbConnectionConfig["ssl"];
65
+ };
66
+ readonly state: ConnectionState;
67
+ onReconnect(callback: () => void): void;
68
+ onDisconnect(callback: (error?: Error) => void): void;
69
+ close(): void;
70
+ reconnect(): Promise<void>;
71
+ }
72
+ /**
73
+ * Creates gRPC metadata for KronosDB requests.
74
+ * Injects context and optional auth token as headers.
75
+ */
76
+ export declare function createKronosMetadata(config: {
77
+ context: string;
78
+ token: string;
79
+ }): Metadata;
80
+ /**
81
+ * Connects to KronosDB and returns typed gRPC clients for all services.
82
+ *
83
+ * Configures gRPC channel-level keepalive to maintain persistent connections.
84
+ */
85
+ export declare function connectToKronosDb(config: KronosDbConnectionConfig): KronosDbConnection;
86
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { createChannel, createClient } from "nice-grpc";
2
+ import { ChannelCredentials as GrpcChannelCredentials } from "@grpc/grpc-js";
3
+ import { Metadata } from "nice-grpc";
4
+ import { readFileSync } from "node:fs";
5
+ import { kronosDbServiceDefinitions, PlatformServiceDefinition, CommandServiceDefinition, QueryServiceDefinition, EventStoreDefinition, SnapshotStoreDefinition, } from "./service-definitions.js";
6
+ /**
7
+ * Creates gRPC metadata for KronosDB requests.
8
+ * Injects context and optional auth token as headers.
9
+ */
10
+ export function createKronosMetadata(config) {
11
+ const metadata = new Metadata();
12
+ metadata.set("kronosdb-context", config.context);
13
+ if (config.token) {
14
+ metadata.set("kronosdb-token", config.token);
15
+ }
16
+ return metadata;
17
+ }
18
+ /**
19
+ * Connects to KronosDB and returns typed gRPC clients for all services.
20
+ *
21
+ * Configures gRPC channel-level keepalive to maintain persistent connections.
22
+ */
23
+ export function connectToKronosDb(config) {
24
+ const serviceDefinitions = kronosDbServiceDefinitions;
25
+ const resolvedConfig = {
26
+ host: config.host ?? "localhost",
27
+ port: config.port ?? 50051,
28
+ context: config.context ?? "default",
29
+ componentName: config.componentName,
30
+ clientId: config.clientId ?? crypto.randomUUID(),
31
+ token: config.token ?? "",
32
+ reconnectIntervalMs: config.reconnectIntervalMs ?? 2000,
33
+ maxReconnectAttempts: config.maxReconnectAttempts ?? 0,
34
+ keepAliveTimeMs: config.keepAliveTimeMs ?? 30000,
35
+ keepAliveTimeoutMs: config.keepAliveTimeoutMs ?? 10000,
36
+ keepAlivePermitWithoutCalls: config.keepAlivePermitWithoutCalls ?? true,
37
+ servers: config.servers,
38
+ ssl: config.ssl,
39
+ };
40
+ const sslConfig = config.ssl;
41
+ let credentials;
42
+ if (sslConfig?.enabled) {
43
+ const rootCerts = sslConfig.certFile ? readFileSync(sslConfig.certFile) : null;
44
+ const clientKey = sslConfig.clientKeyFile ? readFileSync(sslConfig.clientKeyFile) : null;
45
+ const clientCert = sslConfig.clientCertFile ? readFileSync(sslConfig.clientCertFile) : null;
46
+ credentials = GrpcChannelCredentials.createSsl(rootCerts, clientKey, clientCert);
47
+ }
48
+ const channelOptions = {
49
+ "grpc.keepalive_time_ms": config.keepAliveTimeMs ?? 30000,
50
+ "grpc.keepalive_timeout_ms": config.keepAliveTimeoutMs ?? 10000,
51
+ "grpc.keepalive_permit_without_calls": (config.keepAlivePermitWithoutCalls ?? true) ? 1 : 0,
52
+ };
53
+ const serverAddresses = config.servers && config.servers.length > 0
54
+ ? config.servers
55
+ : [`${resolvedConfig.host}:${resolvedConfig.port}`];
56
+ let currentServerIndex = 0;
57
+ function createGrpcChannel() {
58
+ const address = serverAddresses[currentServerIndex % serverAddresses.length];
59
+ return credentials
60
+ ? createChannel(address, credentials, channelOptions)
61
+ : createChannel(address, undefined, channelOptions);
62
+ }
63
+ let channel = createGrpcChannel();
64
+ let state = "connected";
65
+ const reconnectCallbacks = [];
66
+ const disconnectCallbacks = [];
67
+ function createClients() {
68
+ return {
69
+ platform: createClient(serviceDefinitions.platform, channel),
70
+ commands: createClient(serviceDefinitions.commands, channel),
71
+ queries: createClient(serviceDefinitions.queries, channel),
72
+ eventStore: createClient(serviceDefinitions.eventStore, channel),
73
+ snapshotStore: createClient(serviceDefinitions.snapshotStore, channel),
74
+ };
75
+ }
76
+ let clients = createClients();
77
+ const connection = {
78
+ get channel() { return channel; },
79
+ get platform() { return clients.platform; },
80
+ get commands() { return clients.commands; },
81
+ get queries() { return clients.queries; },
82
+ get eventStore() { return clients.eventStore; },
83
+ get snapshotStore() { return clients.snapshotStore; },
84
+ config: resolvedConfig,
85
+ get state() { return state; },
86
+ onReconnect(callback) {
87
+ reconnectCallbacks.push(callback);
88
+ },
89
+ onDisconnect(callback) {
90
+ disconnectCallbacks.push(callback);
91
+ },
92
+ close() {
93
+ state = "closed";
94
+ channel.close();
95
+ },
96
+ async reconnect() {
97
+ if (state === "closed") {
98
+ throw new Error("Connection is permanently closed");
99
+ }
100
+ if (state === "connected" || state === "connecting")
101
+ return;
102
+ state = "reconnecting";
103
+ const maxAttempts = resolvedConfig.maxReconnectAttempts;
104
+ let attempt = 0;
105
+ while (state === "reconnecting") {
106
+ attempt++;
107
+ try {
108
+ currentServerIndex++;
109
+ channel = createGrpcChannel();
110
+ clients = createClients();
111
+ state = "connected";
112
+ for (const cb of reconnectCallbacks) {
113
+ try {
114
+ cb();
115
+ }
116
+ catch { /* ignore listener errors */ }
117
+ }
118
+ return;
119
+ }
120
+ catch (err) {
121
+ if (maxAttempts > 0 && attempt >= maxAttempts) {
122
+ state = "disconnected";
123
+ throw new Error(`Failed to reconnect after ${attempt} attempts: ${err}`);
124
+ }
125
+ const delay = Math.min(resolvedConfig.reconnectIntervalMs * Math.pow(2, attempt - 1), 30000);
126
+ await new Promise((r) => setTimeout(r, delay));
127
+ }
128
+ }
129
+ },
130
+ };
131
+ return connection;
132
+ }
133
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * KronosDB error codes.
3
+ *
4
+ * Error codes follow the KRONOS-XXXX pattern where the first digit
5
+ * indicates the category:
6
+ * - 1xxx: Authentication/instruction errors
7
+ * - 2xxx: Event store errors
8
+ * - 3xxx: Communication errors
9
+ * - 4xxx: Command errors
10
+ * - 5xxx: Query errors
11
+ * - 9xxx: Internal/storage errors
12
+ */
13
+ export declare const KronosDbErrorCode: {
14
+ readonly AUTHENTICATION_TOKEN_MISSING: "KRONOS-1000";
15
+ readonly AUTHENTICATION_INVALID_TOKEN: "KRONOS-1001";
16
+ readonly CONSISTENCY_CONDITION_VIOLATED: "KRONOS-2000";
17
+ readonly EVENT_PAYLOAD_TOO_LARGE: "KRONOS-2001";
18
+ readonly NO_EVENT_STORE_LEADER: "KRONOS-2100";
19
+ readonly CONNECTION_FAILED: "KRONOS-3001";
20
+ readonly GRPC_MESSAGE_TOO_LARGE: "KRONOS-3002";
21
+ readonly NO_HANDLER_FOR_COMMAND: "KRONOS-4000";
22
+ readonly COMMAND_EXECUTION_ERROR: "KRONOS-4002";
23
+ readonly COMMAND_DISPATCH_ERROR: "KRONOS-4003";
24
+ readonly NO_HANDLER_FOR_QUERY: "KRONOS-5000";
25
+ readonly QUERY_EXECUTION_ERROR: "KRONOS-5001";
26
+ readonly QUERY_DISPATCH_ERROR: "KRONOS-5002";
27
+ readonly DATAFILE_READ_ERROR: "KRONOS-9000";
28
+ readonly DATAFILE_WRITE_ERROR: "KRONOS-9100";
29
+ readonly OTHER: "KRONOS-0001";
30
+ };
31
+ export type KronosDbErrorCodeValue = typeof KronosDbErrorCode[keyof typeof KronosDbErrorCode];
32
+ /**
33
+ * Base error for all KronosDB errors.
34
+ */
35
+ export declare class KronosDbError extends Error {
36
+ readonly errorCode: string;
37
+ readonly transient: boolean;
38
+ constructor(message: string, errorCode: string, transient: boolean);
39
+ }
40
+ export declare class NoHandlerForCommandError extends KronosDbError {
41
+ constructor(message: string);
42
+ }
43
+ export declare class NoHandlerForQueryError extends KronosDbError {
44
+ constructor(message: string);
45
+ }
46
+ export declare class CommandExecutionError extends KronosDbError {
47
+ constructor(message: string);
48
+ }
49
+ export declare class QueryExecutionError extends KronosDbError {
50
+ constructor(message: string);
51
+ }
52
+ export declare class CommandDispatchError extends KronosDbError {
53
+ constructor(message: string);
54
+ }
55
+ export declare class QueryDispatchError extends KronosDbError {
56
+ constructor(message: string);
57
+ }
58
+ export declare class ConcurrencyError extends KronosDbError {
59
+ constructor(message: string);
60
+ }
61
+ export declare class ConnectionFailedError extends KronosDbError {
62
+ constructor(message: string);
63
+ }
64
+ export declare class AuthenticationError extends KronosDbError {
65
+ constructor(message: string, code: string);
66
+ }
67
+ /**
68
+ * Convert a KronosDB error code + message into a typed exception.
69
+ */
70
+ export declare function mapErrorCode(errorCode: string, message: string): KronosDbError;
71
+ export declare function isTransientError(error: unknown): boolean;
72
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CA8BpB,CAAA;AAEV,MAAM,MAAM,sBAAsB,GAAG,OAAO,iBAAiB,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7F;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;gBAEf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;CAMnE;AAED,qBAAa,wBAAyB,SAAQ,aAAa;gBAC7C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,sBAAuB,SAAQ,aAAa;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,aAAa;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI1C;AAaD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CA6B9E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxD"}
package/dist/errors.js ADDED
@@ -0,0 +1,149 @@
1
+ /**
2
+ * KronosDB error codes.
3
+ *
4
+ * Error codes follow the KRONOS-XXXX pattern where the first digit
5
+ * indicates the category:
6
+ * - 1xxx: Authentication/instruction errors
7
+ * - 2xxx: Event store errors
8
+ * - 3xxx: Communication errors
9
+ * - 4xxx: Command errors
10
+ * - 5xxx: Query errors
11
+ * - 9xxx: Internal/storage errors
12
+ */
13
+ export const KronosDbErrorCode = {
14
+ // Authentication & instructions
15
+ AUTHENTICATION_TOKEN_MISSING: "KRONOS-1000",
16
+ AUTHENTICATION_INVALID_TOKEN: "KRONOS-1001",
17
+ // Event store
18
+ CONSISTENCY_CONDITION_VIOLATED: "KRONOS-2000",
19
+ EVENT_PAYLOAD_TOO_LARGE: "KRONOS-2001",
20
+ NO_EVENT_STORE_LEADER: "KRONOS-2100",
21
+ // Communication
22
+ CONNECTION_FAILED: "KRONOS-3001",
23
+ GRPC_MESSAGE_TOO_LARGE: "KRONOS-3002",
24
+ // Commands
25
+ NO_HANDLER_FOR_COMMAND: "KRONOS-4000",
26
+ COMMAND_EXECUTION_ERROR: "KRONOS-4002",
27
+ COMMAND_DISPATCH_ERROR: "KRONOS-4003",
28
+ // Queries
29
+ NO_HANDLER_FOR_QUERY: "KRONOS-5000",
30
+ QUERY_EXECUTION_ERROR: "KRONOS-5001",
31
+ QUERY_DISPATCH_ERROR: "KRONOS-5002",
32
+ // Internal/storage
33
+ DATAFILE_READ_ERROR: "KRONOS-9000",
34
+ DATAFILE_WRITE_ERROR: "KRONOS-9100",
35
+ // Default
36
+ OTHER: "KRONOS-0001",
37
+ };
38
+ /**
39
+ * Base error for all KronosDB errors.
40
+ */
41
+ export class KronosDbError extends Error {
42
+ errorCode;
43
+ transient;
44
+ constructor(message, errorCode, transient) {
45
+ super(message);
46
+ this.name = "KronosDbError";
47
+ this.errorCode = errorCode;
48
+ this.transient = transient;
49
+ }
50
+ }
51
+ export class NoHandlerForCommandError extends KronosDbError {
52
+ constructor(message) {
53
+ super(message, KronosDbErrorCode.NO_HANDLER_FOR_COMMAND, false);
54
+ this.name = "NoHandlerForCommandError";
55
+ }
56
+ }
57
+ export class NoHandlerForQueryError extends KronosDbError {
58
+ constructor(message) {
59
+ super(message, KronosDbErrorCode.NO_HANDLER_FOR_QUERY, false);
60
+ this.name = "NoHandlerForQueryError";
61
+ }
62
+ }
63
+ export class CommandExecutionError extends KronosDbError {
64
+ constructor(message) {
65
+ super(message, KronosDbErrorCode.COMMAND_EXECUTION_ERROR, true);
66
+ this.name = "CommandExecutionError";
67
+ }
68
+ }
69
+ export class QueryExecutionError extends KronosDbError {
70
+ constructor(message) {
71
+ super(message, KronosDbErrorCode.QUERY_EXECUTION_ERROR, true);
72
+ this.name = "QueryExecutionError";
73
+ }
74
+ }
75
+ export class CommandDispatchError extends KronosDbError {
76
+ constructor(message) {
77
+ super(message, KronosDbErrorCode.COMMAND_DISPATCH_ERROR, true);
78
+ this.name = "CommandDispatchError";
79
+ }
80
+ }
81
+ export class QueryDispatchError extends KronosDbError {
82
+ constructor(message) {
83
+ super(message, KronosDbErrorCode.QUERY_DISPATCH_ERROR, true);
84
+ this.name = "QueryDispatchError";
85
+ }
86
+ }
87
+ export class ConcurrencyError extends KronosDbError {
88
+ constructor(message) {
89
+ super(message, KronosDbErrorCode.CONSISTENCY_CONDITION_VIOLATED, true);
90
+ this.name = "ConcurrencyError";
91
+ }
92
+ }
93
+ export class ConnectionFailedError extends KronosDbError {
94
+ constructor(message) {
95
+ super(message, KronosDbErrorCode.CONNECTION_FAILED, true);
96
+ this.name = "ConnectionFailedError";
97
+ }
98
+ }
99
+ export class AuthenticationError extends KronosDbError {
100
+ constructor(message, code) {
101
+ super(message, code, false);
102
+ this.name = "AuthenticationError";
103
+ }
104
+ }
105
+ const TRANSIENT_CODES = new Set([
106
+ KronosDbErrorCode.COMMAND_EXECUTION_ERROR,
107
+ KronosDbErrorCode.QUERY_EXECUTION_ERROR,
108
+ KronosDbErrorCode.COMMAND_DISPATCH_ERROR,
109
+ KronosDbErrorCode.QUERY_DISPATCH_ERROR,
110
+ KronosDbErrorCode.CONNECTION_FAILED,
111
+ KronosDbErrorCode.GRPC_MESSAGE_TOO_LARGE,
112
+ KronosDbErrorCode.CONSISTENCY_CONDITION_VIOLATED,
113
+ KronosDbErrorCode.NO_EVENT_STORE_LEADER,
114
+ ]);
115
+ /**
116
+ * Convert a KronosDB error code + message into a typed exception.
117
+ */
118
+ export function mapErrorCode(errorCode, message) {
119
+ switch (errorCode) {
120
+ case KronosDbErrorCode.NO_HANDLER_FOR_COMMAND:
121
+ return new NoHandlerForCommandError(message);
122
+ case KronosDbErrorCode.NO_HANDLER_FOR_QUERY:
123
+ return new NoHandlerForQueryError(message);
124
+ case KronosDbErrorCode.COMMAND_EXECUTION_ERROR:
125
+ return new CommandExecutionError(message);
126
+ case KronosDbErrorCode.QUERY_EXECUTION_ERROR:
127
+ return new QueryExecutionError(message);
128
+ case KronosDbErrorCode.COMMAND_DISPATCH_ERROR:
129
+ return new CommandDispatchError(message);
130
+ case KronosDbErrorCode.QUERY_DISPATCH_ERROR:
131
+ return new QueryDispatchError(message);
132
+ case KronosDbErrorCode.CONSISTENCY_CONDITION_VIOLATED:
133
+ return new ConcurrencyError(message);
134
+ case KronosDbErrorCode.CONNECTION_FAILED:
135
+ case KronosDbErrorCode.GRPC_MESSAGE_TOO_LARGE:
136
+ return new ConnectionFailedError(message);
137
+ case KronosDbErrorCode.AUTHENTICATION_TOKEN_MISSING:
138
+ case KronosDbErrorCode.AUTHENTICATION_INVALID_TOKEN:
139
+ return new AuthenticationError(message, errorCode);
140
+ default:
141
+ return new KronosDbError(message, errorCode, TRANSIENT_CODES.has(errorCode));
142
+ }
143
+ }
144
+ export function isTransientError(error) {
145
+ if (error instanceof KronosDbError)
146
+ return error.transient;
147
+ return false;
148
+ }
149
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Status of a single event processor, reported to KronosDB.
3
+ */
4
+ export interface ProcessorStatus {
5
+ readonly name: string;
6
+ readonly running: boolean;
7
+ readonly mode: "Tracking" | "Subscribing";
8
+ readonly isStreamingProcessor: boolean;
9
+ readonly activeThreads: number;
10
+ readonly availableThreads: number;
11
+ readonly error: boolean;
12
+ readonly errorMessage?: string;
13
+ readonly tokenStoreIdentifier: string;
14
+ readonly segments: SegmentStatus[];
15
+ }
16
+ export interface SegmentStatus {
17
+ readonly segmentId: number;
18
+ readonly caughtUp: boolean;
19
+ readonly replaying: boolean;
20
+ readonly onePartOf: number;
21
+ readonly tokenPosition: bigint;
22
+ readonly errorState: string;
23
+ }
24
+ /**
25
+ * Converts a ProcessorStatus to the proto EventProcessorInfo format.
26
+ */
27
+ export declare function toEventProcessorInfo(status: ProcessorStatus): any;
28
+ /**
29
+ * Supplier function that returns the current status of all event processors.
30
+ */
31
+ export type ProcessorStatusSupplier = () => ProcessorStatus[];
32
+ //# sourceMappingURL=event-processor-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-processor-info.d.ts","sourceRoot":"","sources":["../src/event-processor-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAAA;IACzC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,GAAG,CAmBjE;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,eAAe,EAAE,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Converts a ProcessorStatus to the proto EventProcessorInfo format.
3
+ */
4
+ export function toEventProcessorInfo(status) {
5
+ return {
6
+ processorName: status.name,
7
+ mode: status.mode,
8
+ activeThreads: status.activeThreads,
9
+ running: status.running,
10
+ error: status.error,
11
+ segmentStatus: status.segments.map((seg) => ({
12
+ segmentId: seg.segmentId,
13
+ caughtUp: seg.caughtUp,
14
+ replaying: seg.replaying,
15
+ onePartOf: seg.onePartOf,
16
+ tokenPosition: seg.tokenPosition,
17
+ errorState: seg.errorState,
18
+ })),
19
+ availableThreads: status.availableThreads,
20
+ tokenStoreIdentifier: status.tokenStoreIdentifier,
21
+ isStreamingProcessor: status.isStreamingProcessor,
22
+ };
23
+ }
24
+ //# sourceMappingURL=event-processor-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-processor-info.js","sourceRoot":"","sources":["../src/event-processor-info.ts"],"names":[],"mappings":"AAyBA;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,IAAI;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC,CAAC;QACH,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;KAClD,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Flow-controlled sender for subscription query updates.
3
+ */
4
+ export interface FlowControlledSender<T> {
5
+ offer(value: T): boolean;
6
+ addPermits(count: number): void;
7
+ complete(): void;
8
+ completeExceptionally(error: Error): void;
9
+ readonly active: boolean;
10
+ }
11
+ export declare function createFlowControlledSender<T>(send: (value: T) => void, onComplete?: () => void, onError?: (error: Error) => void, maxBufferSize?: number): FlowControlledSender<T>;
12
+ //# sourceMappingURL=flow-controlled-sender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-controlled-sender.d.ts","sourceRoot":"","sources":["../src/flow-controlled-sender.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAA;IACxB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,IAAI,IAAI,CAAA;IAChB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACzC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EACxB,UAAU,CAAC,EAAE,MAAM,IAAI,EACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAChC,aAAa,GAAE,MAAY,GAC1B,oBAAoB,CAAC,CAAC,CAAC,CAwDzB"}
@@ -0,0 +1,53 @@
1
+ export function createFlowControlledSender(send, onComplete, onError, maxBufferSize = 256) {
2
+ const buffer = [];
3
+ let permits = 0;
4
+ let isActive = true;
5
+ function drain() {
6
+ while (permits > 0 && buffer.length > 0 && isActive) {
7
+ const value = buffer.shift();
8
+ permits--;
9
+ try {
10
+ send(value);
11
+ }
12
+ catch (err) {
13
+ console.warn("FlowControlledSender: send error", err);
14
+ }
15
+ }
16
+ }
17
+ return {
18
+ offer(value) {
19
+ if (!isActive)
20
+ return false;
21
+ if (permits > 0) {
22
+ permits--;
23
+ send(value);
24
+ return true;
25
+ }
26
+ if (buffer.length >= maxBufferSize) {
27
+ return false;
28
+ }
29
+ buffer.push(value);
30
+ return true;
31
+ },
32
+ addPermits(count) {
33
+ permits += count;
34
+ drain();
35
+ },
36
+ complete() {
37
+ isActive = false;
38
+ buffer.length = 0;
39
+ if (onComplete)
40
+ onComplete();
41
+ },
42
+ completeExceptionally(error) {
43
+ isActive = false;
44
+ buffer.length = 0;
45
+ if (onError)
46
+ onError(error);
47
+ },
48
+ get active() {
49
+ return isActive;
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=flow-controlled-sender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-controlled-sender.js","sourceRoot":"","sources":["../src/flow-controlled-sender.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,0BAA0B,CACxC,IAAwB,EACxB,UAAuB,EACvB,OAAgC,EAChC,gBAAwB,GAAG;IAE3B,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,QAAQ,GAAG,IAAI,CAAA;IAEnB,SAAS,KAAK;QACZ,OAAO,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAG,CAAA;YAC7B,OAAO,EAAE,CAAA;YACT,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,CAAA;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAQ;YACZ,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAA;YAE3B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAA;gBACT,IAAI,CAAC,KAAK,CAAC,CAAA;gBACX,OAAO,IAAI,CAAA;YACb,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,UAAU,CAAC,KAAa;YACtB,OAAO,IAAI,KAAK,CAAA;YAChB,KAAK,EAAE,CAAA;QACT,CAAC;QAED,QAAQ;YACN,QAAQ,GAAG,KAAK,CAAA;YAChB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YACjB,IAAI,UAAU;gBAAE,UAAU,EAAE,CAAA;QAC9B,CAAC;QAED,qBAAqB,CAAC,KAAY;YAChC,QAAQ,GAAG,KAAK,CAAA;YAChB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YACjB,IAAI,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,MAAM;YACR,OAAO,QAAQ,CAAA;QACjB,CAAC;KACF,CAAA;AACH,CAAC"}