@burdenoff/be-sdk 2026.513.4 → 2026.513.6
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/EventQueueFactory-TWDDFMQY.js +8 -0
- package/dist/{EventQueueFactory-FNE7H66N.js.map → EventQueueFactory-TWDDFMQY.js.map} +1 -1
- package/dist/{chunk-WPGSKLAG.js → chunk-3JBKPVWY.js} +24 -5
- package/dist/chunk-3JBKPVWY.js.map +1 -0
- package/dist/{chunk-KSO6QQVD.js → chunk-EMSON3UD.js} +952 -10
- package/dist/chunk-EMSON3UD.js.map +1 -0
- package/dist/{chunk-LRL6GKXI.js → chunk-L72RC2EI.js} +3 -3
- package/dist/{chunk-LRL6GKXI.js.map → chunk-L72RC2EI.js.map} +1 -1
- package/dist/{chunk-NUZZRJNN.js → chunk-MI72VKNQ.js} +171 -5
- package/dist/chunk-MI72VKNQ.js.map +1 -0
- package/dist/{chunk-SXIL2AJF.js → chunk-OMKFTTAN.js} +5 -5
- package/dist/{chunk-SXIL2AJF.js.map → chunk-OMKFTTAN.js.map} +1 -1
- package/dist/{chunk-S52PJKSW.js → chunk-Q6HJARHV.js} +3 -3
- package/dist/{chunk-S52PJKSW.js.map → chunk-Q6HJARHV.js.map} +1 -1
- package/dist/{chunk-COSUYUCB.js → chunk-QKJR4L7B.js} +149 -3
- package/dist/chunk-QKJR4L7B.js.map +1 -0
- package/dist/{chunk-VOFKF27Q.js → chunk-UVYDP6P6.js} +3 -2
- package/dist/chunk-UVYDP6P6.js.map +1 -0
- package/dist/{chunk-DR5AQJT6.js → chunk-Y4TPKRZB.js} +3 -3
- package/dist/{chunk-DR5AQJT6.js.map → chunk-Y4TPKRZB.js.map} +1 -1
- package/dist/config-QVYSAUMT.js +4 -0
- package/dist/{config-7U7J3QXQ.js.map → config-QVYSAUMT.js.map} +1 -1
- package/dist/esm-M2M7HGV4.js +1356 -0
- package/dist/esm-M2M7HGV4.js.map +1 -0
- package/dist/event-queue/index.d.ts +1 -1
- package/dist/event-queue/index.js +5 -5
- package/dist/graph/index.js +6 -6
- package/dist/graphql/index.d.ts +1 -1
- package/dist/graphql/index.js +2 -2
- package/dist/{index-HkD7NBED.d.ts → index-CDFQRL-h.d.ts} +24 -2
- package/dist/{index-BF2uh_h9.d.ts → index-eUvoVdr7.d.ts} +158 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +12 -12
- package/dist/init/index.js +4 -4
- package/dist/prisma/index.js +5 -5
- package/dist/server/index.js +20 -0
- package/dist/server/index.js.map +1 -1
- package/dist/telemetry/index.js.map +1 -1
- package/package.json +14 -3
- package/dist/EventQueueFactory-FNE7H66N.js +0 -8
- package/dist/chunk-COSUYUCB.js.map +0 -1
- package/dist/chunk-KSO6QQVD.js.map +0 -1
- package/dist/chunk-NUZZRJNN.js.map +0 -1
- package/dist/chunk-VOFKF27Q.js.map +0 -1
- package/dist/chunk-WPGSKLAG.js.map +0 -1
- package/dist/config-7U7J3QXQ.js +0 -4
- package/dist/esm-K6H7EIWK.js +0 -1450
- package/dist/esm-K6H7EIWK.js.map +0 -1
|
@@ -2,6 +2,152 @@ import { logger } from './chunk-CBZNP6RF.js';
|
|
|
2
2
|
import { __name } from './chunk-XE4OXN2W.js';
|
|
3
3
|
import { connect, credsAuthenticator } from 'nats';
|
|
4
4
|
|
|
5
|
+
// src/event-queue/implementations/redis-streams/RedisStreamsConnection.ts
|
|
6
|
+
var ioredisModulePromise = null;
|
|
7
|
+
async function loadIoRedis() {
|
|
8
|
+
if (!ioredisModulePromise) {
|
|
9
|
+
ioredisModulePromise = (async () => {
|
|
10
|
+
try {
|
|
11
|
+
const mod = await import('ioredis');
|
|
12
|
+
return mod.default ?? mod.Redis ?? null;
|
|
13
|
+
} catch (err) {
|
|
14
|
+
logger.error("[RedisStreamsConnection] ioredis not installed", {
|
|
15
|
+
error: err instanceof Error ? err.message : String(err)
|
|
16
|
+
});
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
})();
|
|
20
|
+
}
|
|
21
|
+
const ctor = await ioredisModulePromise;
|
|
22
|
+
if (!ctor) {
|
|
23
|
+
throw new Error("[RedisStreamsConnection] ioredis is required for the redis-streams event-queue backend. Install it with: bun add ioredis (or npm i ioredis)");
|
|
24
|
+
}
|
|
25
|
+
return ctor;
|
|
26
|
+
}
|
|
27
|
+
__name(loadIoRedis, "loadIoRedis");
|
|
28
|
+
function normaliseUrl(rawUrl) {
|
|
29
|
+
let url = rawUrl;
|
|
30
|
+
let tls = false;
|
|
31
|
+
if (/^valkeys:\/\//.test(url)) {
|
|
32
|
+
tls = true;
|
|
33
|
+
url = url.replace(/^valkeys:\/\//, "rediss://");
|
|
34
|
+
} else if (/^valkey:\/\//.test(url)) {
|
|
35
|
+
url = url.replace(/^valkey:\/\//, "redis://");
|
|
36
|
+
} else if (/^rediss:\/\//.test(url)) {
|
|
37
|
+
tls = true;
|
|
38
|
+
}
|
|
39
|
+
let host = "localhost";
|
|
40
|
+
try {
|
|
41
|
+
const parsed = new URL(url);
|
|
42
|
+
host = parsed.hostname || host;
|
|
43
|
+
} catch {
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
url,
|
|
47
|
+
tls,
|
|
48
|
+
host
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
__name(normaliseUrl, "normaliseUrl");
|
|
52
|
+
var RedisStreamsConnection = class {
|
|
53
|
+
static {
|
|
54
|
+
__name(this, "RedisStreamsConnection");
|
|
55
|
+
}
|
|
56
|
+
config;
|
|
57
|
+
client = null;
|
|
58
|
+
connecting = null;
|
|
59
|
+
tls;
|
|
60
|
+
host;
|
|
61
|
+
normalisedUrl;
|
|
62
|
+
constructor(config) {
|
|
63
|
+
this.config = config;
|
|
64
|
+
const { url, tls, host } = normaliseUrl(config.url);
|
|
65
|
+
this.normalisedUrl = url;
|
|
66
|
+
this.tls = tls || process.env["REDIS_TLS"] === "true";
|
|
67
|
+
this.host = host;
|
|
68
|
+
}
|
|
69
|
+
/** True once `connect()` has resolved and ioredis is in `ready` state. */
|
|
70
|
+
isConnected() {
|
|
71
|
+
return this.client !== null && this.client.status === "ready";
|
|
72
|
+
}
|
|
73
|
+
/** Connect lazily; subsequent calls await the in-flight promise. */
|
|
74
|
+
async connect() {
|
|
75
|
+
if (this.isConnected()) return;
|
|
76
|
+
if (this.connecting) {
|
|
77
|
+
await this.connecting;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.connecting = this.doConnect().finally(() => {
|
|
81
|
+
this.connecting = null;
|
|
82
|
+
});
|
|
83
|
+
await this.connecting;
|
|
84
|
+
}
|
|
85
|
+
async doConnect() {
|
|
86
|
+
const Redis = await loadIoRedis();
|
|
87
|
+
const opts = {
|
|
88
|
+
lazyConnect: true,
|
|
89
|
+
maxRetriesPerRequest: null,
|
|
90
|
+
enableReadyCheck: true,
|
|
91
|
+
connectTimeout: this.config.connectionTimeout ?? 15e3,
|
|
92
|
+
reconnectOnError: /* @__PURE__ */ __name(() => true, "reconnectOnError"),
|
|
93
|
+
retryStrategy: /* @__PURE__ */ __name((times) => Math.min(times * 200, 2e3), "retryStrategy")
|
|
94
|
+
};
|
|
95
|
+
if (this.config.password) opts["password"] = this.config.password;
|
|
96
|
+
if (this.config.user) opts["username"] = this.config.user;
|
|
97
|
+
if (this.tls) {
|
|
98
|
+
opts["tls"] = {
|
|
99
|
+
servername: this.host
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
this.client = new Redis(this.normalisedUrl, opts);
|
|
103
|
+
this.client.on("error", (...args) => {
|
|
104
|
+
const err = args[0];
|
|
105
|
+
logger.warn("[RedisStreamsConnection] redis error", {
|
|
106
|
+
error: err?.message ?? "unknown"
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
this.client.on("reconnecting", () => {
|
|
110
|
+
logger.info("[RedisStreamsConnection] reconnecting");
|
|
111
|
+
});
|
|
112
|
+
await this.client.connect();
|
|
113
|
+
logger.info("[RedisStreamsConnection] connected", {
|
|
114
|
+
url: this.normalisedUrl.replace(/:[^:@/]*@/, ":***@"),
|
|
115
|
+
tls: this.tls
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
async disconnect() {
|
|
119
|
+
if (!this.client) return;
|
|
120
|
+
try {
|
|
121
|
+
await this.client.quit();
|
|
122
|
+
} catch {
|
|
123
|
+
this.client.disconnect();
|
|
124
|
+
}
|
|
125
|
+
this.client = null;
|
|
126
|
+
}
|
|
127
|
+
/** The shared command client. Throws if not connected. */
|
|
128
|
+
getClient() {
|
|
129
|
+
if (!this.client) {
|
|
130
|
+
throw new Error("[RedisStreamsConnection] not connected \u2014 call connect() first");
|
|
131
|
+
}
|
|
132
|
+
return this.client;
|
|
133
|
+
}
|
|
134
|
+
/** Make a dedicated client (e.g. for a blocking XREADGROUP loop). */
|
|
135
|
+
async makeBlockingClient() {
|
|
136
|
+
await this.connect();
|
|
137
|
+
const dup = this.getClient().duplicate();
|
|
138
|
+
if ("connect" in dup && typeof dup.connect === "function") {
|
|
139
|
+
try {
|
|
140
|
+
await dup.connect();
|
|
141
|
+
} catch {
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return dup;
|
|
145
|
+
}
|
|
146
|
+
async ping() {
|
|
147
|
+
await this.connect();
|
|
148
|
+
return this.getClient().ping();
|
|
149
|
+
}
|
|
150
|
+
};
|
|
5
151
|
var NatsConnectionManager = class {
|
|
6
152
|
static {
|
|
7
153
|
__name(this, "NatsConnectionManager");
|
|
@@ -173,6 +319,6 @@ function normalizeNatsCreds(creds) {
|
|
|
173
319
|
}
|
|
174
320
|
__name(normalizeNatsCreds, "normalizeNatsCreds");
|
|
175
321
|
|
|
176
|
-
export { NatsConnectionManager };
|
|
177
|
-
//# sourceMappingURL=chunk-
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
322
|
+
export { NatsConnectionManager, RedisStreamsConnection };
|
|
323
|
+
//# sourceMappingURL=chunk-QKJR4L7B.js.map
|
|
324
|
+
//# sourceMappingURL=chunk-QKJR4L7B.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event-queue/implementations/redis-streams/RedisStreamsConnection.ts","../src/event-queue/implementations/nats/NatsConnection.ts"],"names":["ioredisModulePromise","loadIoRedis","mod","default","Redis","err","logger","error","Error","message","String","ctor","normaliseUrl","rawUrl","url","tls","test","replace","host","parsed","URL","hostname","RedisStreamsConnection","client","connecting","normalisedUrl","config","process","env","isConnected","status","connect","doConnect","finally","opts","lazyConnect","maxRetriesPerRequest","enableReadyCheck","connectTimeout","connectionTimeout","reconnectOnError","retryStrategy","times","Math","min","password","user","servername","on","args","warn","info","disconnect","quit","getClient","makeBlockingClient","dup","duplicate","ping","NatsConnectionManager","nc","js","jsm","connected","connectionPromise","debug","_doConnect","connectionOptions","createNatsConnectionOptions","jetstream","jetstreamManager","name","setupEventHandlers","type","catch","drain","close","isClosed","getJetStream","getJetStreamManager","getNatsConnection","servers","pass","token","maxReconnectAttempts","reconnectTimeWait","creds","resolveNatsCreds","authenticator","credsAuthenticator","TextEncoder","encode","normalizeNatsCreds","credsFile","undefined","fs","readFile","startsWith","Buffer","from","slice","length","toString","includes","replaceAll"],"mappings":"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","file":"chunk-QKJR4L7B.js","sourcesContent":["/**\n * Manages a single ioredis client (or cluster) for the Redis Streams backend.\n *\n * Connection URL conventions:\n * - `redis://host:port` — plaintext\n * - `rediss://host:port` — TLS (Azure Managed Redis uses port 10000)\n * - `valkey://`/`valkeys://` — accepted as aliases, normalised internally\n *\n * Hostname → SNI is set automatically for TLS endpoints so Azure-managed certs\n * validate.\n */\nimport { logger } from '../../../logger/index.js';\nimport type { BaseQueueConfig } from '../../types/config.js';\n\ntype IoRedis = {\n status: string;\n connect: () => Promise<void>;\n disconnect: () => void;\n quit: () => Promise<unknown>;\n ping: () => Promise<string>;\n on: (event: string, handler: (...args: unknown[]) => void) => void;\n duplicate: () => IoRedis;\n // Stream + key commands used by publisher/consumer/sweeper\n xadd: (...args: unknown[]) => Promise<string>;\n xack: (...args: unknown[]) => Promise<number>;\n xreadgroup: (...args: unknown[]) => Promise<unknown>;\n xgroup: (...args: unknown[]) => Promise<unknown>;\n xautoclaim: (...args: unknown[]) => Promise<unknown>;\n xpending: (...args: unknown[]) => Promise<unknown>;\n xlen: (key: string) => Promise<number>;\n xinfo: (...args: unknown[]) => Promise<unknown>;\n xrevrange: (...args: unknown[]) => Promise<unknown>;\n xrange: (...args: unknown[]) => Promise<unknown>;\n xdel: (key: string, ...ids: string[]) => Promise<number>;\n set: (...args: unknown[]) => Promise<string | null>;\n expire: (key: string, seconds: number) => Promise<number>;\n del: (...keys: string[]) => Promise<number>;\n sadd: (key: string, ...members: string[]) => Promise<number>;\n smembers: (key: string) => Promise<string[]>;\n zadd: (...args: unknown[]) => Promise<number>;\n zrangebyscore: (...args: unknown[]) => Promise<string[]>;\n zrem: (key: string, ...members: string[]) => Promise<number>;\n pipeline: () => { xadd: (...args: unknown[]) => unknown; exec: () => Promise<Array<[Error | null, unknown]>> };\n};\n\ntype IoRedisCtor = new (url: string, opts: Record<string, unknown>) => IoRedis;\n\nlet ioredisModulePromise: Promise<IoRedisCtor | null> | null = null;\n\nasync function loadIoRedis(): Promise<IoRedisCtor> {\n if (!ioredisModulePromise) {\n ioredisModulePromise = (async () => {\n try {\n const mod = (await import('ioredis')) as unknown as { default?: IoRedisCtor; Redis?: IoRedisCtor };\n return mod.default ?? mod.Redis ?? null;\n } catch (err) {\n logger.error('[RedisStreamsConnection] ioredis not installed', {\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n })();\n }\n const ctor = await ioredisModulePromise;\n if (!ctor) {\n throw new Error(\n '[RedisStreamsConnection] ioredis is required for the redis-streams event-queue backend. ' +\n \"Install it with: bun add ioredis (or npm i ioredis)\"\n );\n }\n return ctor;\n}\n\nfunction normaliseUrl(rawUrl: string): { url: string; tls: boolean; host: string } {\n let url = rawUrl;\n let tls = false;\n if (/^valkeys:\\/\\//.test(url)) {\n tls = true;\n url = url.replace(/^valkeys:\\/\\//, 'rediss://');\n } else if (/^valkey:\\/\\//.test(url)) {\n url = url.replace(/^valkey:\\/\\//, 'redis://');\n } else if (/^rediss:\\/\\//.test(url)) {\n tls = true;\n }\n let host = 'localhost';\n try {\n const parsed = new URL(url);\n host = parsed.hostname || host;\n } catch {\n /* keep default */\n }\n return { url, tls, host };\n}\n\nexport class RedisStreamsConnection {\n private client: IoRedis | null = null;\n private connecting: Promise<void> | null = null;\n private readonly tls: boolean;\n private readonly host: string;\n private readonly normalisedUrl: string;\n\n constructor(private readonly config: BaseQueueConfig) {\n const { url, tls, host } = normaliseUrl(config.url);\n this.normalisedUrl = url;\n this.tls = tls || process.env['REDIS_TLS'] === 'true';\n this.host = host;\n }\n\n /** True once `connect()` has resolved and ioredis is in `ready` state. */\n isConnected(): boolean {\n return this.client !== null && this.client.status === 'ready';\n }\n\n /** Connect lazily; subsequent calls await the in-flight promise. */\n async connect(): Promise<void> {\n if (this.isConnected()) return;\n if (this.connecting) {\n await this.connecting;\n return;\n }\n this.connecting = this.doConnect().finally(() => {\n this.connecting = null;\n });\n await this.connecting;\n }\n\n private async doConnect(): Promise<void> {\n const Redis = await loadIoRedis();\n const opts: Record<string, unknown> = {\n lazyConnect: true,\n maxRetriesPerRequest: null,\n enableReadyCheck: true,\n connectTimeout: this.config.connectionTimeout ?? 15000,\n reconnectOnError: () => true,\n retryStrategy: (times: number): number => Math.min(times * 200, 2000),\n };\n if (this.config.password) opts['password'] = this.config.password;\n if (this.config.user) opts['username'] = this.config.user;\n if (this.tls) {\n opts['tls'] = { servername: this.host };\n }\n this.client = new Redis(this.normalisedUrl, opts);\n this.client.on('error', (...args: unknown[]) => {\n const err = args[0] as Error | undefined;\n logger.warn('[RedisStreamsConnection] redis error', {\n error: err?.message ?? 'unknown',\n });\n });\n this.client.on('reconnecting', () => {\n logger.info('[RedisStreamsConnection] reconnecting');\n });\n await this.client.connect();\n logger.info('[RedisStreamsConnection] connected', {\n url: this.normalisedUrl.replace(/:[^:@/]*@/, ':***@'),\n tls: this.tls,\n });\n }\n\n async disconnect(): Promise<void> {\n if (!this.client) return;\n try {\n await this.client.quit();\n } catch {\n this.client.disconnect();\n }\n this.client = null;\n }\n\n /** The shared command client. Throws if not connected. */\n getClient(): IoRedis {\n if (!this.client) {\n throw new Error('[RedisStreamsConnection] not connected — call connect() first');\n }\n return this.client;\n }\n\n /** Make a dedicated client (e.g. for a blocking XREADGROUP loop). */\n async makeBlockingClient(): Promise<IoRedis> {\n await this.connect();\n const dup = this.getClient().duplicate();\n if ('connect' in dup && typeof dup.connect === 'function') {\n try {\n await dup.connect();\n } catch {\n /* ioredis auto-connects in some versions */\n }\n }\n return dup;\n }\n\n async ping(): Promise<string> {\n await this.connect();\n return this.getClient().ping();\n }\n}\n\nexport type { IoRedis };\n","/**\n * NATS JetStream Connection Manager\n * Handles connection lifecycle and provides access to NATS clients\n */\nimport { logger } from '../../../logger/index.js';\nimport {\n type ConnectionOptions,\n type JetStreamClient,\n type JetStreamManager,\n type NatsConnection,\n connect,\n credsAuthenticator,\n} from 'nats';\n\nimport type { BaseQueueConfig } from '../../types/config.js';\n\n/**\n * Internal connection manager for NATS JetStream\n * Shared between NatsEventPublisher and NatsEventConsumer\n */\nexport class NatsConnectionManager {\n private nc: NatsConnection | null = null;\n private js: JetStreamClient | null = null;\n private jsm: JetStreamManager | null = null;\n private connected: boolean = false;\n private connectionPromise: Promise<void> | null = null;\n\n constructor(private config: BaseQueueConfig) {}\n\n /**\n * Connect to NATS server\n */\n async connect(): Promise<void> {\n // Prevent multiple concurrent connections\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n if (this.connected) {\n logger.debug('[NatsConnection] Already connected');\n return;\n }\n\n this.connectionPromise = this._doConnect();\n try {\n await this.connectionPromise;\n } finally {\n this.connectionPromise = null;\n }\n }\n\n /**\n * Internal connection logic\n */\n private async _doConnect(): Promise<void> {\n try {\n const connectionOptions = await createNatsConnectionOptions(this.config);\n\n this.nc = await connect(connectionOptions);\n this.js = this.nc.jetstream();\n this.jsm = await this.nc.jetstreamManager();\n this.connected = true;\n\n logger.info('[NatsConnection] Connected to NATS', {\n url: this.config.url,\n name: this.config.name,\n });\n\n // Handle connection events\n this.setupEventHandlers();\n } catch (error) {\n logger.error('[NatsConnection] Failed to connect to NATS', {\n error: error instanceof Error ? error.message : 'Unknown error',\n url: this.config.url,\n });\n throw error;\n }\n }\n\n /**\n * Setup connection event handlers\n */\n private setupEventHandlers(): void {\n if (!this.nc) return;\n\n (async (): Promise<void> => {\n if (!this.nc) return;\n\n for await (const status of this.nc.status()) {\n if (status.type === 'disconnect') {\n this.connected = false;\n } else if (status.type === 'reconnect') {\n this.connected = true;\n }\n }\n })().catch((error) => {\n logger.error('[NatsConnection] Error handling connection events', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n });\n }\n\n /**\n * Disconnect from NATS\n */\n async disconnect(): Promise<void> {\n if (!this.connected || !this.nc) {\n return;\n }\n\n try {\n await this.nc.drain();\n await this.nc.close();\n this.connected = false;\n this.nc = null;\n this.js = null;\n this.jsm = null;\n\n logger.info('[NatsConnection] Disconnected from NATS');\n } catch (error) {\n logger.error('[NatsConnection] Error disconnecting from NATS', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connected && this.nc !== null && !this.nc.isClosed();\n }\n\n /**\n * Get JetStream client\n */\n getJetStream(): JetStreamClient {\n if (!this.js) {\n throw new Error('NATS not connected - call connect() first');\n }\n return this.js;\n }\n\n /**\n * Get JetStream Manager\n */\n getJetStreamManager(): JetStreamManager {\n if (!this.jsm) {\n throw new Error('NATS not connected - call connect() first');\n }\n return this.jsm;\n }\n\n /**\n * Get NATS connection\n */\n getNatsConnection(): NatsConnection {\n if (!this.nc) {\n throw new Error('NATS not connected - call connect() first');\n }\n return this.nc;\n }\n}\n\nexport async function createNatsConnectionOptions(config: BaseQueueConfig): Promise<ConnectionOptions> {\n const connectionOptions: ConnectionOptions = {\n servers: config.url,\n name: config.name,\n user: config.user,\n pass: config.password,\n token: config.token,\n maxReconnectAttempts: config.maxReconnectAttempts ?? -1,\n reconnectTimeWait: config.reconnectTimeWait ?? 2000,\n };\n\n const creds = await resolveNatsCreds(config);\n if (creds) {\n connectionOptions.authenticator = credsAuthenticator(new TextEncoder().encode(creds));\n delete connectionOptions.user;\n delete connectionOptions.pass;\n delete connectionOptions.token;\n }\n\n return connectionOptions;\n}\n\nexport async function resolveNatsCreds(\n config: Pick<BaseQueueConfig, 'creds' | 'credsFile'>\n): Promise<string | undefined> {\n if (config.creds) {\n return normalizeNatsCreds(config.creds);\n }\n\n if (!config.credsFile) {\n return undefined;\n }\n\n const fs = await import('node:fs/promises');\n return normalizeNatsCreds(await fs.readFile(config.credsFile, 'utf8'));\n}\n\nfunction normalizeNatsCreds(creds: string): string {\n if (creds.startsWith('base64:')) {\n return Buffer.from(creds.slice('base64:'.length), 'base64').toString('utf8');\n }\n\n if (creds.includes('\\\\n') && !creds.includes('\\n')) {\n return creds.replaceAll('\\\\n', '\\n');\n }\n\n return creds;\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// src/event-queue/types/config.ts
|
|
2
2
|
var QueueType = /* @__PURE__ */ (function(QueueType2) {
|
|
3
3
|
QueueType2["NATS"] = "nats";
|
|
4
|
+
QueueType2["REDIS_STREAMS"] = "redis-streams";
|
|
4
5
|
QueueType2["RABBITMQ"] = "rabbitmq";
|
|
5
6
|
QueueType2["KAFKA"] = "kafka";
|
|
6
7
|
QueueType2["SQS"] = "sqs";
|
|
@@ -8,5 +9,5 @@ var QueueType = /* @__PURE__ */ (function(QueueType2) {
|
|
|
8
9
|
})({});
|
|
9
10
|
|
|
10
11
|
export { QueueType };
|
|
11
|
-
//# sourceMappingURL=chunk-
|
|
12
|
-
//# sourceMappingURL=chunk-
|
|
12
|
+
//# sourceMappingURL=chunk-UVYDP6P6.js.map
|
|
13
|
+
//# sourceMappingURL=chunk-UVYDP6P6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event-queue/types/config.ts"],"names":["QueueType"],"mappings":";AAOO,IAAKA,SAAAA,6BAAAA,UAAAA,EAAAA;;;;;;AAAAA,EAAAA,OAAAA,UAAAA","file":"chunk-UVYDP6P6.js","sourcesContent":["/**\n * Event Queue Configuration Types\n */\n\n/**\n * Queue type enum\n */\nexport enum QueueType {\n NATS = 'nats',\n REDIS_STREAMS = 'redis-streams',\n RABBITMQ = 'rabbitmq',\n KAFKA = 'kafka',\n SQS = 'sqs',\n}\n\n/**\n * Base configuration for event queue\n */\nexport interface BaseQueueConfig {\n /** Queue type */\n type: QueueType | string;\n /** Connection URL */\n url: string;\n /** Optional username */\n user?: string;\n /** Optional password */\n password?: string;\n /** Optional auth token */\n token?: string;\n /** Optional NATS credentials file contents (JWT + NKEY seed) */\n creds?: string;\n /** Optional path to a NATS credentials file */\n credsFile?: string;\n /** Maximum reconnection attempts (-1 for infinite) */\n maxReconnectAttempts?: number;\n /** Time to wait between reconnection attempts (ms) */\n reconnectTimeWait?: number;\n /** Connection timeout (ms) */\n connectionTimeout?: number;\n /** Connection name/identifier */\n name?: string;\n}\n\n/**\n * Publisher-specific configuration\n */\nexport interface PublisherConfig extends BaseQueueConfig {\n /** Default message TTL (ms) */\n defaultTTL?: number;\n /** Enable message deduplication */\n enableDeduplication?: boolean;\n /** Default priority for messages */\n defaultPriority?: 'low' | 'normal' | 'high';\n}\n\n/**\n * Consumer-specific configuration\n */\nexport interface ConsumerConfig extends Partial<BaseQueueConfig> {\n /** Stream name to consume from */\n stream: string;\n /** Consumer name (durable) */\n consumer: string;\n /** Subject filter pattern */\n filterSubject?: string;\n /** Maximum concurrent message processing */\n maxConcurrent?: number;\n /** Maximum delivery attempts */\n maxDeliver?: number;\n /** Acknowledgment wait time (nanoseconds) */\n ackWait?: number;\n /** Acknowledgment policy */\n ackPolicy?: 'explicit' | 'all' | 'none';\n /** Delivery policy */\n deliverPolicy?: 'all' | 'last' | 'new' | 'byStartSequence' | 'byStartTime';\n /** Maximum pending acknowledgments */\n maxAckPending?: number;\n}\n\n/**\n * Health check result\n */\nexport interface EventQueueHealthCheckResult {\n /** Overall health status */\n status: 'healthy' | 'unhealthy' | 'degraded';\n /** Timestamp of health check */\n timestamp: string;\n /** Connection status */\n connected?: boolean;\n /** Latency in milliseconds */\n latencyMs?: number;\n /** Additional details */\n details?: Record<string, unknown>;\n /** Error message if unhealthy */\n error?: string;\n}\n\n/**\n * Statistics\n */\nexport interface QueueStatistics {\n /** Total messages published */\n messagesPublished?: number;\n /** Total messages consumed */\n messagesConsumed?: number;\n /** Messages currently pending */\n messagesPending?: number;\n /** Messages in queue */\n queueSize?: number;\n /** Failed message count */\n messagesFailed?: number;\n /** Active consumers count */\n activeConsumers?: number;\n /** Active publishers count */\n activePublishers?: number;\n /** Average processing time (ms) */\n avgProcessingTimeMs?: number;\n /** Last activity timestamp */\n lastActivity?: string | null;\n /** Custom metrics */\n details?: Record<string, unknown>;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { shouldSyncRelationship, shouldSyncEntity, parseRelationship, getCollectionForEntity, extractMinimalFields, extractEntityTitle, createRelationshipEvent, createEntityEvent, addGraphExtension, GraphRegistry } from './chunk-TKBD2ONF.js';
|
|
2
|
-
import { getGraphEventEmitter, NatsGraphEventEmitter } from './chunk-
|
|
2
|
+
import { getGraphEventEmitter, NatsGraphEventEmitter } from './chunk-Q6HJARHV.js';
|
|
3
3
|
import { ValidationError } from './chunk-RTQIRGVB.js';
|
|
4
4
|
import { logger } from './chunk-CBZNP6RF.js';
|
|
5
5
|
import { __export, __name } from './chunk-XE4OXN2W.js';
|
|
@@ -1871,5 +1871,5 @@ var GraphModule = class {
|
|
|
1871
1871
|
};
|
|
1872
1872
|
|
|
1873
1873
|
export { AUDIT_FIELDS, GraphEventsPublisher, GraphExportService, GraphModule, SOFT_DELETE_FIELDS, STANDARD_FIELDS, TENANT_FIELDS, createGraphEventsHelper, createGraphExportService, createPrismaGraphIntegration, createRelationshipFromEntity, defineEntity, defineGraphConfig, defineModuleGraph, defineRelationship, getGraphEventsPublisher, getGraphStats, graph_exports, initializeGraph, isGraphInitialized };
|
|
1874
|
-
//# sourceMappingURL=chunk-
|
|
1875
|
-
//# sourceMappingURL=chunk-
|
|
1874
|
+
//# sourceMappingURL=chunk-Y4TPKRZB.js.map
|
|
1875
|
+
//# sourceMappingURL=chunk-Y4TPKRZB.js.map
|