@vibesdotdev/integrations-kafka 0.0.0-stage → 1.0.0-rc.4
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/AUDIT-CODE.md +40 -0
- package/AUDIT-SEAL.md +12 -0
- package/LICENSE +126 -0
- package/README.md +76 -2
- package/SEALED.md +13 -0
- package/dist/admin.d.ts +20 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +51 -0
- package/dist/admin.js.map +1 -0
- package/dist/auth/sasl.node.impl.d.ts +18 -0
- package/dist/auth/sasl.node.impl.d.ts.map +1 -0
- package/dist/auth/sasl.node.impl.js +62 -0
- package/dist/auth/sasl.node.impl.js.map +1 -0
- package/dist/chat/realtime-transport/host.d.ts +14 -0
- package/dist/chat/realtime-transport/host.d.ts.map +1 -0
- package/dist/chat/realtime-transport/host.js +7 -0
- package/dist/chat/realtime-transport/host.js.map +1 -0
- package/dist/chat/realtime-transport/index.d.ts +15 -0
- package/dist/chat/realtime-transport/index.d.ts.map +1 -0
- package/dist/chat/realtime-transport/index.js +13 -0
- package/dist/chat/realtime-transport/index.js.map +1 -0
- package/dist/chat/realtime-transport/lifecycle.d.ts +30 -0
- package/dist/chat/realtime-transport/lifecycle.d.ts.map +1 -0
- package/dist/chat/realtime-transport/lifecycle.js +125 -0
- package/dist/chat/realtime-transport/lifecycle.js.map +1 -0
- package/dist/chat/realtime-transport/projection.d.ts +127 -0
- package/dist/chat/realtime-transport/projection.d.ts.map +1 -0
- package/dist/chat/realtime-transport/projection.js +156 -0
- package/dist/chat/realtime-transport/projection.js.map +1 -0
- package/dist/chat/realtime-transport/sse-kafka-bridge.d.ts +32 -0
- package/dist/chat/realtime-transport/sse-kafka-bridge.d.ts.map +1 -0
- package/dist/chat/realtime-transport/sse-kafka-bridge.js +58 -0
- package/dist/chat/realtime-transport/sse-kafka-bridge.js.map +1 -0
- package/dist/chat/realtime-transport/ws-kafka-bridge.d.ts +10 -0
- package/dist/chat/realtime-transport/ws-kafka-bridge.d.ts.map +1 -0
- package/dist/chat/realtime-transport/ws-kafka-bridge.js +13 -0
- package/dist/chat/realtime-transport/ws-kafka-bridge.js.map +1 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +29 -0
- package/dist/client.js.map +1 -0
- package/dist/config/kafka.config.descriptor.d.ts +109 -0
- package/dist/config/kafka.config.descriptor.d.ts.map +1 -0
- package/dist/config/kafka.config.descriptor.js +60 -0
- package/dist/config/kafka.config.descriptor.js.map +1 -0
- package/dist/connections.d.ts +27 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +20 -0
- package/dist/connections.js.map +1 -0
- package/dist/connections.node.impl.d.ts +34 -0
- package/dist/connections.node.impl.d.ts.map +1 -0
- package/dist/connections.node.impl.js +236 -0
- package/dist/connections.node.impl.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/kafka-client.node.impl.d.ts +9 -0
- package/dist/kafka-client.node.impl.d.ts.map +1 -0
- package/dist/kafka-client.node.impl.js +10 -0
- package/dist/kafka-client.node.impl.js.map +1 -0
- package/dist/kafka-connector.impl.d.ts +53 -0
- package/dist/kafka-connector.impl.d.ts.map +1 -0
- package/dist/kafka-connector.impl.js +97 -0
- package/dist/kafka-connector.impl.js.map +1 -0
- package/dist/kafka-event-adapter.descriptor.d.ts +11 -0
- package/dist/kafka-event-adapter.descriptor.d.ts.map +1 -0
- package/dist/kafka-event-adapter.descriptor.js +20 -0
- package/dist/kafka-event-adapter.descriptor.js.map +1 -0
- package/dist/kafka-event-adapter.impl.d.ts +22 -0
- package/dist/kafka-event-adapter.impl.d.ts.map +1 -0
- package/dist/kafka-event-adapter.impl.js +140 -0
- package/dist/kafka-event-adapter.impl.js.map +1 -0
- package/dist/kafka-substrate.descriptor.d.ts +4 -0
- package/dist/kafka-substrate.descriptor.d.ts.map +1 -0
- package/dist/kafka-substrate.descriptor.js +12 -0
- package/dist/kafka-substrate.descriptor.js.map +1 -0
- package/dist/kafka.d.ts +18 -0
- package/dist/kafka.d.ts.map +1 -0
- package/dist/kafka.js +23 -0
- package/dist/kafka.js.map +1 -0
- package/dist/kafka.node.plugin.d.ts +3 -0
- package/dist/kafka.node.plugin.d.ts.map +1 -0
- package/dist/kafka.node.plugin.js +66 -0
- package/dist/kafka.node.plugin.js.map +1 -0
- package/dist/kafka.plugin.d.ts +10 -0
- package/dist/kafka.plugin.d.ts.map +1 -0
- package/dist/kafka.plugin.js +28 -0
- package/dist/kafka.plugin.js.map +1 -0
- package/dist/logging/kafka.logger.descriptor.d.ts +7 -0
- package/dist/logging/kafka.logger.descriptor.d.ts.map +1 -0
- package/dist/logging/kafka.logger.descriptor.js +13 -0
- package/dist/logging/kafka.logger.descriptor.js.map +1 -0
- package/dist/message-schemas.d.ts +94 -0
- package/dist/message-schemas.d.ts.map +1 -0
- package/dist/message-schemas.js +68 -0
- package/dist/message-schemas.js.map +1 -0
- package/dist/request-queue-timeout-guard.d.ts +29 -0
- package/dist/request-queue-timeout-guard.d.ts.map +1 -0
- package/dist/request-queue-timeout-guard.js +245 -0
- package/dist/request-queue-timeout-guard.js.map +1 -0
- package/dist/schemas/contracts.d.ts +190 -0
- package/dist/schemas/contracts.d.ts.map +1 -0
- package/dist/schemas/contracts.js +85 -0
- package/dist/schemas/contracts.js.map +1 -0
- package/dist/schemas/kafka.d.ts +116 -0
- package/dist/schemas/kafka.d.ts.map +1 -0
- package/dist/schemas/kafka.js +13 -0
- package/dist/schemas/kafka.js.map +1 -0
- package/dist/schemas/realtime.d.ts +135 -0
- package/dist/schemas/realtime.d.ts.map +1 -0
- package/dist/schemas/realtime.js +44 -0
- package/dist/schemas/realtime.js.map +1 -0
- package/dist/schemas/worker-context.d.ts +14 -0
- package/dist/schemas/worker-context.d.ts.map +1 -0
- package/dist/schemas/worker-context.js +26 -0
- package/dist/schemas/worker-context.js.map +1 -0
- package/dist/topics.d.ts +85 -0
- package/dist/topics.d.ts.map +1 -0
- package/dist/topics.js +90 -0
- package/dist/topics.js.map +1 -0
- package/dist/workers/adapter/db-ops.d.ts +28 -0
- package/dist/workers/adapter/db-ops.d.ts.map +1 -0
- package/dist/workers/adapter/db-ops.js +14 -0
- package/dist/workers/adapter/db-ops.js.map +1 -0
- package/dist/workers/adapter/index.d.ts +16 -0
- package/dist/workers/adapter/index.d.ts.map +1 -0
- package/dist/workers/adapter/index.js +15 -0
- package/dist/workers/adapter/index.js.map +1 -0
- package/dist/workers/adapter/provider.d.ts +151 -0
- package/dist/workers/adapter/provider.d.ts.map +1 -0
- package/dist/workers/adapter/provider.js +654 -0
- package/dist/workers/adapter/provider.js.map +1 -0
- package/dist/workers/adapter/worker-adapter.kafka.descriptor.d.ts +36 -0
- package/dist/workers/adapter/worker-adapter.kafka.descriptor.d.ts.map +1 -0
- package/dist/workers/adapter/worker-adapter.kafka.descriptor.js +22 -0
- package/dist/workers/adapter/worker-adapter.kafka.descriptor.js.map +1 -0
- package/dist/workers/adapter/worker-adapter.kafka.impl.d.ts +36 -0
- package/dist/workers/adapter/worker-adapter.kafka.impl.d.ts.map +1 -0
- package/dist/workers/adapter/worker-adapter.kafka.impl.js +84 -0
- package/dist/workers/adapter/worker-adapter.kafka.impl.js.map +1 -0
- package/dist/workers/adapter/workers-kafka.db.context.d.ts +6 -0
- package/dist/workers/adapter/workers-kafka.db.context.d.ts.map +1 -0
- package/dist/workers/adapter/workers-kafka.db.context.descriptor.d.ts +43 -0
- package/dist/workers/adapter/workers-kafka.db.context.descriptor.d.ts.map +1 -0
- package/dist/workers/adapter/workers-kafka.db.context.descriptor.js +20 -0
- package/dist/workers/adapter/workers-kafka.db.context.descriptor.js.map +1 -0
- package/dist/workers/adapter/workers-kafka.db.context.js +5 -0
- package/dist/workers/adapter/workers-kafka.db.context.js.map +1 -0
- package/dist/workers/index.d.ts +8 -0
- package/dist/workers/index.d.ts.map +1 -0
- package/dist/workers/index.js +9 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/provider-jobs.sqlite-schema.d.ts +438 -0
- package/dist/workers/provider-jobs.sqlite-schema.d.ts.map +1 -0
- package/dist/workers/provider-jobs.sqlite-schema.js +37 -0
- package/dist/workers/provider-jobs.sqlite-schema.js.map +1 -0
- package/dist/workers/shared-store.context.d.ts +25 -0
- package/dist/workers/shared-store.context.d.ts.map +1 -0
- package/dist/workers/shared-store.context.js +88 -0
- package/dist/workers/shared-store.context.js.map +1 -0
- package/dist/workers/shared-store.plugin.d.ts +8 -0
- package/dist/workers/shared-store.plugin.d.ts.map +1 -0
- package/dist/workers/shared-store.plugin.js +22 -0
- package/dist/workers/shared-store.plugin.js.map +1 -0
- package/dist/workers/workers-kafka.consumer.plugin.d.ts +4 -0
- package/dist/workers/workers-kafka.consumer.plugin.d.ts.map +1 -0
- package/dist/workers/workers-kafka.consumer.plugin.js +11 -0
- package/dist/workers/workers-kafka.consumer.plugin.js.map +1 -0
- package/dist/workers/workers-kafka.plugin.d.ts +9 -0
- package/dist/workers/workers-kafka.plugin.d.ts.map +1 -0
- package/dist/workers/workers-kafka.plugin.js +27 -0
- package/dist/workers/workers-kafka.plugin.js.map +1 -0
- package/package.json +210 -4
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ResolutionOptions } from '@vibesdotdev/integrations/base';
|
|
2
|
+
import { Kafka } from 'kafkajs';
|
|
3
|
+
import { type KafkaConnectorConfig, type ResolvedKafkaConnectorConfig } from './schemas/contracts.ts';
|
|
4
|
+
export type { KafkaConnectorConfig, ResolvedKafkaConnectorConfig } from './schemas/contracts.ts';
|
|
5
|
+
type KafkaClientCapabilities = Pick<Kafka, 'producer' | 'consumer' | 'admin'>;
|
|
6
|
+
declare abstract class KafkaConnector {
|
|
7
|
+
readonly config: ResolvedKafkaConnectorConfig;
|
|
8
|
+
readonly kafka: KafkaClientCapabilities;
|
|
9
|
+
constructor(config: ResolvedKafkaConnectorConfig, kafka?: Kafka);
|
|
10
|
+
static resolveConfig(raw: KafkaConnectorConfig, opts: ResolutionOptions): Promise<{
|
|
11
|
+
ssl: boolean;
|
|
12
|
+
brokers: string[];
|
|
13
|
+
sasl?: {
|
|
14
|
+
username: string;
|
|
15
|
+
password: {
|
|
16
|
+
source: "secret";
|
|
17
|
+
key: string;
|
|
18
|
+
store?: string | undefined;
|
|
19
|
+
operation?: object | undefined;
|
|
20
|
+
};
|
|
21
|
+
mechanism: "plain";
|
|
22
|
+
} | {
|
|
23
|
+
username: string;
|
|
24
|
+
password: {
|
|
25
|
+
source: "secret";
|
|
26
|
+
key: string;
|
|
27
|
+
store?: string | undefined;
|
|
28
|
+
operation?: object | undefined;
|
|
29
|
+
};
|
|
30
|
+
mechanism: "scram-sha-256";
|
|
31
|
+
} | {
|
|
32
|
+
username: string;
|
|
33
|
+
password: {
|
|
34
|
+
source: "secret";
|
|
35
|
+
key: string;
|
|
36
|
+
store?: string | undefined;
|
|
37
|
+
operation?: object | undefined;
|
|
38
|
+
};
|
|
39
|
+
mechanism: "scram-sha-512";
|
|
40
|
+
} | undefined;
|
|
41
|
+
clientId?: string | undefined;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
export declare class KafkaProducerConnector extends KafkaConnector {
|
|
45
|
+
static create(raw: KafkaConnectorConfig, opts: ResolutionOptions): Promise<KafkaProducerConnector>;
|
|
46
|
+
}
|
|
47
|
+
export declare class KafkaConsumerConnector extends KafkaConnector {
|
|
48
|
+
static create(raw: KafkaConnectorConfig, opts: ResolutionOptions): Promise<KafkaConsumerConnector>;
|
|
49
|
+
}
|
|
50
|
+
export declare class KafkaAdminConnector extends KafkaConnector {
|
|
51
|
+
static create(raw: KafkaConnectorConfig, opts: ResolutionOptions): Promise<KafkaAdminConnector>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=kafka-connector.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-connector.impl.d.ts","sourceRoot":"","sources":["../src/kafka-connector.impl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAoB,MAAM,SAAS,CAAC;AAGlD,OAAO,EAGN,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAqDjG,KAAK,uBAAuB,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC;AAU9E,uBAAe,cAAc;IAC5B,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;gBAE5B,MAAM,EAAE,4BAA4B,EAAE,KAAK,CAAC,EAAE,KAAK;WAWlD,aAAa,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG7E;AAED,qBAAa,sBAAuB,SAAQ,cAAc;WAC5C,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB;CAKtE;AAED,qBAAa,sBAAuB,SAAQ,cAAc;WAC5C,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB;CAKtE;AAED,qBAAa,mBAAoB,SAAQ,cAAc;WACzC,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB;CAKtE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { resolveConfigValue } from '@vibesdotdev/integrations/base';
|
|
2
|
+
import { Kafka } from 'kafkajs';
|
|
3
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
4
|
+
import { createAuthenticatedKafka } from "./auth/sasl.node.impl.js";
|
|
5
|
+
import { KafkaConnectorConfigSchema, ResolvedKafkaConnectorConfigSchema } from "./schemas/contracts.js";
|
|
6
|
+
function toKafkaConfig(config) {
|
|
7
|
+
return {
|
|
8
|
+
brokers: config.brokers,
|
|
9
|
+
ssl: config.ssl,
|
|
10
|
+
clientId: config.clientId
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
async function resolveKafkaConfig(raw, opts) {
|
|
14
|
+
const parsed = KafkaConnectorConfigSchema.safeParse(raw);
|
|
15
|
+
if (!parsed.success) {
|
|
16
|
+
throw new CapabilityError('Invalid Kafka connector options.', 'INVALID_INPUT', {
|
|
17
|
+
reason: 'kafka-connector-options-invalid'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const config = parsed.data;
|
|
21
|
+
const brokersRaw = Array.isArray(config.brokers) ? config.brokers.join(',') : config.brokers;
|
|
22
|
+
const brokers = await resolveConfigValue(brokersRaw, 'brokers', opts);
|
|
23
|
+
const sasl = config.sasl ? {
|
|
24
|
+
...config.sasl,
|
|
25
|
+
username: await resolveConfigValue(config.sasl.username, 'sasl.username', opts)
|
|
26
|
+
} : undefined;
|
|
27
|
+
const resolvedConfig = {
|
|
28
|
+
brokers: brokers.split(',').map(broker => broker.trim()),
|
|
29
|
+
ssl: config.ssl
|
|
30
|
+
};
|
|
31
|
+
if (sasl)
|
|
32
|
+
resolvedConfig.sasl = sasl;
|
|
33
|
+
if (config.clientId)
|
|
34
|
+
resolvedConfig.clientId = config.clientId;
|
|
35
|
+
const resolved = ResolvedKafkaConnectorConfigSchema.safeParse(resolvedConfig);
|
|
36
|
+
if (!resolved.success) {
|
|
37
|
+
throw new CapabilityError('Invalid resolved Kafka connector options.', 'INVALID_INPUT', {
|
|
38
|
+
reason: 'kafka-connector-options-invalid'
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return resolved.data;
|
|
42
|
+
}
|
|
43
|
+
function unauthenticatedKafka(config) {
|
|
44
|
+
if (config.sasl) {
|
|
45
|
+
throw new CapabilityError('Authenticated Kafka construction requires a runtime.', 'UNAVAILABLE', {
|
|
46
|
+
reason: 'kafka-credential-runtime-required',
|
|
47
|
+
retryable: false
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return new Kafka(toKafkaConfig(config));
|
|
51
|
+
}
|
|
52
|
+
function exposeKafkaCapabilities(client) {
|
|
53
|
+
return {
|
|
54
|
+
producer: (options) => client.producer(options),
|
|
55
|
+
consumer: (options) => client.consumer(options),
|
|
56
|
+
admin: (options) => client.admin(options)
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
class KafkaConnector {
|
|
60
|
+
config;
|
|
61
|
+
kafka;
|
|
62
|
+
constructor(config, kafka) {
|
|
63
|
+
const parsed = ResolvedKafkaConnectorConfigSchema.safeParse(config);
|
|
64
|
+
if (!parsed.success) {
|
|
65
|
+
throw new CapabilityError('Invalid Kafka connector options.', 'INVALID_INPUT', {
|
|
66
|
+
reason: 'kafka-connector-options-invalid'
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
this.config = parsed.data;
|
|
70
|
+
this.kafka = exposeKafkaCapabilities(kafka ?? unauthenticatedKafka(this.config));
|
|
71
|
+
}
|
|
72
|
+
static async resolveConfig(raw, opts) {
|
|
73
|
+
return resolveKafkaConfig(raw, opts);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export class KafkaProducerConnector extends KafkaConnector {
|
|
77
|
+
static async create(raw, opts) {
|
|
78
|
+
const config = await resolveKafkaConfig(raw, opts);
|
|
79
|
+
const kafka = await createAuthenticatedKafka(opts.runtime, config, { clientId: config.clientId });
|
|
80
|
+
return new KafkaProducerConnector(config, kafka);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export class KafkaConsumerConnector extends KafkaConnector {
|
|
84
|
+
static async create(raw, opts) {
|
|
85
|
+
const config = await resolveKafkaConfig(raw, opts);
|
|
86
|
+
const kafka = await createAuthenticatedKafka(opts.runtime, config, { clientId: config.clientId });
|
|
87
|
+
return new KafkaConsumerConnector(config, kafka);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export class KafkaAdminConnector extends KafkaConnector {
|
|
91
|
+
static async create(raw, opts) {
|
|
92
|
+
const config = await resolveKafkaConfig(raw, opts);
|
|
93
|
+
const kafka = await createAuthenticatedKafka(opts.runtime, config, { clientId: config.clientId });
|
|
94
|
+
return new KafkaAdminConnector(config, kafka);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=kafka-connector.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-connector.impl.js","sourceRoot":"","sources":["../src/kafka-connector.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EventAdapterDescriptor } from '@vibesdotdev/kernel/events';
|
|
2
|
+
/**
|
|
3
|
+
* The default Kafka transport used by the runtime events bus.
|
|
4
|
+
*
|
|
5
|
+
* Purpose-specific connections remain available through the public provider
|
|
6
|
+
* API; the runtime asset uses chat as its default purpose for event-bus
|
|
7
|
+
* composition.
|
|
8
|
+
*/
|
|
9
|
+
declare const kafkaEventAdapterDescriptor: EventAdapterDescriptor;
|
|
10
|
+
export default kafkaEventAdapterDescriptor;
|
|
11
|
+
//# sourceMappingURL=kafka-event-adapter.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-event-adapter.descriptor.d.ts","sourceRoot":"","sources":["../src/kafka-event-adapter.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEzE;;;;;;GAMG;AACH,QAAA,MAAM,2BAA2B,EAAE,sBAUlC,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default Kafka transport used by the runtime events bus.
|
|
3
|
+
*
|
|
4
|
+
* Purpose-specific connections remain available through the public provider
|
|
5
|
+
* API; the runtime asset uses chat as its default purpose for event-bus
|
|
6
|
+
* composition.
|
|
7
|
+
*/
|
|
8
|
+
const kafkaEventAdapterDescriptor = {
|
|
9
|
+
kind: 'events/adapter',
|
|
10
|
+
id: 'kafka',
|
|
11
|
+
name: 'Kafka event adapter',
|
|
12
|
+
description: 'Kafka transport for the runtime events bus.',
|
|
13
|
+
protocol: 'kafka',
|
|
14
|
+
options: { purpose: 'chat' },
|
|
15
|
+
hardware: ['cloud', 'consumer'],
|
|
16
|
+
enabled: true,
|
|
17
|
+
tags: ['events', 'kafka', 'transport']
|
|
18
|
+
};
|
|
19
|
+
export default kafkaEventAdapterDescriptor;
|
|
20
|
+
//# sourceMappingURL=kafka-event-adapter.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-event-adapter.descriptor.js","sourceRoot":"","sources":["../src/kafka-event-adapter.descriptor.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,2BAA2B,GAA2B;IAC3D,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,6CAA6C;IAC1D,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;IAC/B,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;CACtC,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type VibesRuntime } from '@vibesdotdev/kernel';
|
|
2
|
+
import type { EventAdapter as EventAdapterInterface, EventEnvelope } from '@vibesdotdev/kernel/events';
|
|
3
|
+
export declare class KafkaEventAdapter implements EventAdapterInterface {
|
|
4
|
+
private readonly runtime;
|
|
5
|
+
readonly protocol = "kafka";
|
|
6
|
+
readonly descriptor: {
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
private purpose;
|
|
10
|
+
private readonly subscriptions;
|
|
11
|
+
private readonly pending;
|
|
12
|
+
private closed;
|
|
13
|
+
constructor(runtime: VibesRuntime, { id }: {
|
|
14
|
+
id: string;
|
|
15
|
+
}, config: unknown);
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
publish(envelope: EventEnvelope): Promise<void>;
|
|
18
|
+
subscribe(busId: string, eventPattern: string, handler: (envelope: EventEnvelope) => void | Promise<void>): Promise<() => Promise<void>>;
|
|
19
|
+
private openSubscription;
|
|
20
|
+
disconnect(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=kafka-event-adapter.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-event-adapter.impl.d.ts","sourceRoot":"","sources":["../src/kafka-event-adapter.impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,KAAK,EACX,YAAY,IAAI,qBAAqB,EACrC,aAAa,EACb,MAAM,4BAA4B,CAAC;AAUpC,qBAAa,iBAAkB,YAAW,qBAAqB;IAS7D,OAAO,CAAC,QAAQ,CAAC,OAAO;IARzB,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,MAAM,CAAS;gBAGL,OAAO,EAAE,YAAY,EACtC,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EACtB,MAAM,EAAE,OAAO;IAShB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlB,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD,SAAS,CACR,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxD,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YASjB,gBAAgB;IA+DxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAcjC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
2
|
+
import { getKafkaConnections, KafkaConnectionPurpose } from "./connections.js";
|
|
3
|
+
import { matchEventPattern } from '@vibesdotdev/kernel/events';
|
|
4
|
+
import { getLogger } from '@vibesdotdev/logging';
|
|
5
|
+
import { requireKafkaClient } from "./client.js";
|
|
6
|
+
import { KafkaAdapterOptionsSchema, KafkaEventEnvelopeSchema, parseKafkaEventJson } from "./schemas/contracts.js";
|
|
7
|
+
function toTopicName(envelope) {
|
|
8
|
+
return envelope.event.replace(/\./g, '-');
|
|
9
|
+
}
|
|
10
|
+
export class KafkaEventAdapter {
|
|
11
|
+
runtime;
|
|
12
|
+
protocol = 'kafka';
|
|
13
|
+
descriptor;
|
|
14
|
+
purpose;
|
|
15
|
+
subscriptions = new Set();
|
|
16
|
+
pending = new Set();
|
|
17
|
+
closed = false;
|
|
18
|
+
constructor(runtime, { id }, config) {
|
|
19
|
+
this.runtime = runtime;
|
|
20
|
+
this.descriptor = { id };
|
|
21
|
+
const parsed = KafkaAdapterOptionsSchema.safeParse(config);
|
|
22
|
+
if (!parsed.success)
|
|
23
|
+
throw new CapabilityError('Invalid Kafka adapter purpose.', 'INVALID_INPUT', { reason: 'kafka-adapter-purpose-invalid' });
|
|
24
|
+
this.purpose = parsed.data.purpose;
|
|
25
|
+
requireKafkaClient(runtime).ownAdapter(this);
|
|
26
|
+
}
|
|
27
|
+
connect() {
|
|
28
|
+
return Promise.resolve();
|
|
29
|
+
}
|
|
30
|
+
async publish(envelope) {
|
|
31
|
+
const parsed = KafkaEventEnvelopeSchema.safeParse(envelope);
|
|
32
|
+
if (!parsed.success)
|
|
33
|
+
throw new CapabilityError('Invalid Kafka event envelope.', 'INVALID_INPUT', { reason: 'kafka-event-envelope-invalid' });
|
|
34
|
+
const producer = await getKafkaConnections(this.runtime).getProducer(this.purpose);
|
|
35
|
+
if (!producer) {
|
|
36
|
+
throw new CapabilityError('Kafka producer unavailable in build scope.', 'UNAVAILABLE', { reason: 'kafka-build-scope' });
|
|
37
|
+
}
|
|
38
|
+
const topic = toTopicName(parsed.data);
|
|
39
|
+
await producer.send({
|
|
40
|
+
topic,
|
|
41
|
+
messages: [
|
|
42
|
+
{
|
|
43
|
+
key: parsed.data.bus,
|
|
44
|
+
value: JSON.stringify(parsed.data)
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
subscribe(busId, eventPattern, handler) {
|
|
50
|
+
if (this.closed || this.runtime.lifecycle.signal.aborted)
|
|
51
|
+
return Promise.reject(new CapabilityError('Kafka event adapter is disconnected.', 'UNAVAILABLE', { reason: 'kafka-adapter-disconnected' }));
|
|
52
|
+
const setup = this.openSubscription(busId, eventPattern, handler);
|
|
53
|
+
this.pending.add(setup);
|
|
54
|
+
// The setup caller owns its result; this observer only retires bookkeeping.
|
|
55
|
+
void Promise.allSettled([setup]).then(() => { this.pending.delete(setup); });
|
|
56
|
+
return setup;
|
|
57
|
+
}
|
|
58
|
+
async openSubscription(busId, eventPattern, handler) {
|
|
59
|
+
const connections = getKafkaConnections(this.runtime);
|
|
60
|
+
const consumer = await connections.createCustomConsumer(this.purpose, `events-${this.descriptor.id}-${crypto.randomUUID()}`);
|
|
61
|
+
if (!consumer) {
|
|
62
|
+
throw new CapabilityError('Kafka consumer unavailable in build scope.', 'UNAVAILABLE', { reason: 'kafka-build-scope' });
|
|
63
|
+
}
|
|
64
|
+
const matches = matchEventPattern(eventPattern);
|
|
65
|
+
const topic = eventPattern.includes('*')
|
|
66
|
+
? new RegExp(`^${eventPattern.split('*').map((part) => part.replace(/\./g, '-').replace(/[.+?^${}()|[\]\\]/g, '\\$&')).join('.*')}$`)
|
|
67
|
+
: eventPattern.replace(/\./g, '-');
|
|
68
|
+
let active = true;
|
|
69
|
+
let stopping;
|
|
70
|
+
const unsubscribe = () => stopping ??= (async () => {
|
|
71
|
+
active = false;
|
|
72
|
+
try {
|
|
73
|
+
await connections.releaseCustomConsumer(consumer);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
this.subscriptions.delete(unsubscribe);
|
|
77
|
+
}
|
|
78
|
+
})();
|
|
79
|
+
this.subscriptions.add(unsubscribe);
|
|
80
|
+
try {
|
|
81
|
+
if (this.closed || this.runtime.lifecycle.signal.aborted) {
|
|
82
|
+
await unsubscribe();
|
|
83
|
+
return unsubscribe;
|
|
84
|
+
}
|
|
85
|
+
await consumer.subscribe({ topic, fromBeginning: false });
|
|
86
|
+
if (this.closed || this.runtime.lifecycle.signal.aborted) {
|
|
87
|
+
await unsubscribe();
|
|
88
|
+
return unsubscribe;
|
|
89
|
+
}
|
|
90
|
+
await consumer.run({
|
|
91
|
+
eachMessage: async ({ message }) => {
|
|
92
|
+
if (!active || this.closed || this.runtime.lifecycle.signal.aborted)
|
|
93
|
+
return;
|
|
94
|
+
const raw = message.value?.toString() ?? '';
|
|
95
|
+
if (!raw)
|
|
96
|
+
return;
|
|
97
|
+
const parsed = parseKafkaEventJson(raw);
|
|
98
|
+
if (!parsed.ok) {
|
|
99
|
+
getLogger('kafka-adapter', this.runtime).warn('Invalid Kafka event envelope', { reason: 'kafka-event-envelope-invalid' });
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (parsed.value.bus !== busId || !matches(parsed.value.event))
|
|
103
|
+
return;
|
|
104
|
+
await handler(parsed.value);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
if (this.closed || this.runtime.lifecycle.signal.aborted)
|
|
108
|
+
await unsubscribe();
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
try {
|
|
112
|
+
await unsubscribe();
|
|
113
|
+
}
|
|
114
|
+
catch (cleanupError) {
|
|
115
|
+
throw new AggregateError([error, cleanupError], 'Kafka subscription setup and cleanup failed', { cause: error });
|
|
116
|
+
}
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
return unsubscribe;
|
|
120
|
+
}
|
|
121
|
+
async disconnect() {
|
|
122
|
+
this.closed = true;
|
|
123
|
+
const pending = await Promise.allSettled(this.pending);
|
|
124
|
+
const outcomes = await Promise.allSettled([...this.subscriptions].map((unsubscribe) => unsubscribe()));
|
|
125
|
+
const failures = [];
|
|
126
|
+
for (const outcome of pending) {
|
|
127
|
+
if (outcome.status === 'rejected')
|
|
128
|
+
failures.push(outcome.reason);
|
|
129
|
+
}
|
|
130
|
+
for (const outcome of outcomes) {
|
|
131
|
+
if (outcome.status === 'rejected')
|
|
132
|
+
failures.push(outcome.reason);
|
|
133
|
+
}
|
|
134
|
+
if (failures.length === 1)
|
|
135
|
+
throw failures[0];
|
|
136
|
+
if (failures.length > 1)
|
|
137
|
+
throw new AggregateError(failures, 'Kafka adapter cleanup failed');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=kafka-event-adapter.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-event-adapter.impl.js","sourceRoot":"","sources":["../src/kafka-event-adapter.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-substrate.descriptor.d.ts","sourceRoot":"","sources":["../src/kafka-substrate.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAErF,QAAA,MAAM,UAAU,EAAE,8BASjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const descriptor = {
|
|
2
|
+
id: 'kafka',
|
|
3
|
+
kind: 'integration/substrate',
|
|
4
|
+
name: 'Kafka',
|
|
5
|
+
description: 'Kafka messaging substrate providing producer, consumer, and admin sub-connectors.',
|
|
6
|
+
provider: 'kafka',
|
|
7
|
+
subConnectors: ['producer', 'consumer', 'admin'],
|
|
8
|
+
hardware: ['cloud', 'server', 'consumer'],
|
|
9
|
+
enabled: true,
|
|
10
|
+
};
|
|
11
|
+
export default descriptor;
|
|
12
|
+
//# sourceMappingURL=kafka-substrate.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-substrate.descriptor.js","sourceRoot":"","sources":["../src/kafka-substrate.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAmC;IAClD,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,mFAAmF;IAChG,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;IAChD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC;IACzC,OAAO,EAAE,IAAI;CACb,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/kafka.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { VibesRuntime } from '@vibesdotdev/kernel';
|
|
2
|
+
import { type KafkaPublicConfig } from './schemas/contracts.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Read the public Kafka connection settings of `runtime`. Brokers and TLS come
|
|
5
|
+
* from the `integrations.kafka` manifest (schema defaults: `localhost:9092`, TLS
|
|
6
|
+
* off). This public configuration surface never resolves or returns credentials.
|
|
7
|
+
* Authenticated KafkaJS construction is owned by the Node client and provider
|
|
8
|
+
* entrypoints, which resolve credential references internally.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readKafkaBaseConfig(runtime: VibesRuntime, overrides?: {
|
|
11
|
+
brokers?: string[];
|
|
12
|
+
}): Promise<KafkaPublicConfig>;
|
|
13
|
+
/**
|
|
14
|
+
* The consumer-group prefix a bridge instance uses. Default `local` (the
|
|
15
|
+
* previous HOSTNAME fallback) lives on the `integrations.kafka` manifest.
|
|
16
|
+
*/
|
|
17
|
+
export declare function readKafkaConsumerGroupPrefix(runtime: VibesRuntime, bridge: 'sse-bridge' | 'ws-bridge'): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=kafka.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.d.ts","sourceRoot":"","sources":["../src/kafka.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAqD,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEnH;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,YAAY,EACrB,SAAS,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CACjD,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,YAAY,GAAG,WAAW,GAChC,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
package/dist/kafka.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { loadKafkaSettings } from "./config/kafka.config.descriptor.js";
|
|
2
|
+
import { KafkaBaseOverridesSchema, KafkaPublicConfigSchema } from "./schemas/contracts.js";
|
|
3
|
+
/**
|
|
4
|
+
* Read the public Kafka connection settings of `runtime`. Brokers and TLS come
|
|
5
|
+
* from the `integrations.kafka` manifest (schema defaults: `localhost:9092`, TLS
|
|
6
|
+
* off). This public configuration surface never resolves or returns credentials.
|
|
7
|
+
* Authenticated KafkaJS construction is owned by the Node client and provider
|
|
8
|
+
* entrypoints, which resolve credential references internally.
|
|
9
|
+
*/
|
|
10
|
+
export async function readKafkaBaseConfig(runtime, overrides = {}) {
|
|
11
|
+
const settings = await loadKafkaSettings(runtime);
|
|
12
|
+
const brokers = KafkaBaseOverridesSchema.parse(overrides).brokers ?? settings.brokers.split(',').map((broker) => broker.trim()).filter(Boolean);
|
|
13
|
+
return KafkaPublicConfigSchema.parse({ brokers, ssl: settings.ssl });
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The consumer-group prefix a bridge instance uses. Default `local` (the
|
|
17
|
+
* previous HOSTNAME fallback) lives on the `integrations.kafka` manifest.
|
|
18
|
+
*/
|
|
19
|
+
export async function readKafkaConsumerGroupPrefix(runtime, bridge) {
|
|
20
|
+
const settings = await loadKafkaSettings(runtime);
|
|
21
|
+
return `${bridge}-${settings.consumerGroupPrefix}`;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=kafka.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.js","sourceRoot":"","sources":["../src/kafka.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAA0B,MAAM,wBAAwB,CAAC;AAEnH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,OAAqB,EACrB,YAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GACZ,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjI,OAAO,uBAAuB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CACjD,OAAqB,EACrB,MAAkC;IAElC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,GAAG,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.node.plugin.d.ts","sourceRoot":"","sources":["../src/kafka.node.plugin.ts"],"names":[],"mappings":"AAoCA,eAAO,MAAM,eAAe,6CAmC1B,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Node hosts explicitly select this slice to load KafkaJS and its queue guard. */
|
|
2
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
3
|
+
import { createRuntimePlugin, loader } from '@vibesdotdev/kernel/factory';
|
|
4
|
+
import { EventAdapterDescriptorSchema } from '@vibesdotdev/kernel/events';
|
|
5
|
+
import { BaseIntegrationProvider } from '@vibesdotdev/integrations/kinds/integration';
|
|
6
|
+
import { KafkaConnectorDeclaredConfigSchema } from "./schemas/contracts.js";
|
|
7
|
+
import { readKafkaBaseConfig } from "./kafka.js";
|
|
8
|
+
import { getKafkaClient } from "./client.js";
|
|
9
|
+
function providerImplementation(Connector) {
|
|
10
|
+
return class KafkaProvider extends BaseIntegrationProvider {
|
|
11
|
+
runtimeContext;
|
|
12
|
+
constructor(descriptor, runtimeContext) {
|
|
13
|
+
super(descriptor, runtimeContext);
|
|
14
|
+
this.runtimeContext = runtimeContext;
|
|
15
|
+
}
|
|
16
|
+
async getConnector() {
|
|
17
|
+
const runtime = this.runtimeContext.runtime;
|
|
18
|
+
const base = await readKafkaBaseConfig(runtime);
|
|
19
|
+
const declared = KafkaConnectorDeclaredConfigSchema.safeParse(await this.getConfig());
|
|
20
|
+
if (!declared.success) {
|
|
21
|
+
throw new CapabilityError('Invalid Kafka connector options.', 'INVALID_INPUT', {
|
|
22
|
+
reason: 'kafka-connector-options-invalid'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return Connector.create({ ...base, ...declared.data }, { runtime });
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export const kafkaNodePlugin = createRuntimePlugin({
|
|
30
|
+
id: 'integrations-kafka.node',
|
|
31
|
+
name: 'Integrations Kafka (Node)',
|
|
32
|
+
dependencies: ['integrations-kafka'],
|
|
33
|
+
loaders: [
|
|
34
|
+
loader('kafka', { kind: 'runtime/client' }, async () => {
|
|
35
|
+
const { NodeKafkaClient } = await import("./kafka-client.node.impl.js");
|
|
36
|
+
return { impl: NodeKafkaClient };
|
|
37
|
+
}),
|
|
38
|
+
loader('kafka-producer', { kind: 'integration/provider' }, async () => {
|
|
39
|
+
const { KafkaProducerConnector } = await import("./kafka-connector.impl.js");
|
|
40
|
+
return { impl: providerImplementation(KafkaProducerConnector) };
|
|
41
|
+
}),
|
|
42
|
+
loader('kafka-consumer', { kind: 'integration/provider' }, async () => {
|
|
43
|
+
const { KafkaConsumerConnector } = await import("./kafka-connector.impl.js");
|
|
44
|
+
return { impl: providerImplementation(KafkaConsumerConnector) };
|
|
45
|
+
}),
|
|
46
|
+
loader('kafka-admin', { kind: 'integration/provider' }, async () => {
|
|
47
|
+
const { KafkaAdminConnector } = await import("./kafka-connector.impl.js");
|
|
48
|
+
return { impl: providerImplementation(KafkaAdminConnector) };
|
|
49
|
+
}),
|
|
50
|
+
loader('kafka', { kind: 'events/adapter' }, async () => {
|
|
51
|
+
const { KafkaEventAdapter } = await import("./kafka-event-adapter.impl.js");
|
|
52
|
+
return {
|
|
53
|
+
impl: class RuntimeKafkaEventAdapter extends KafkaEventAdapter {
|
|
54
|
+
constructor(descriptor, context) {
|
|
55
|
+
super(context.runtime, descriptor, EventAdapterDescriptorSchema.parse(descriptor).options);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
})
|
|
60
|
+
],
|
|
61
|
+
async onRegister(runtime) {
|
|
62
|
+
await getKafkaClient(runtime);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
export default kafkaNodePlugin;
|
|
66
|
+
//# sourceMappingURL=kafka.node.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.node.plugin.js","sourceRoot":"","sources":["../src/kafka.node.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integrations Kafka plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers the Kafka substrate, event adapter and settings descriptors, so every scope can
|
|
5
|
+
* name Kafka without loading it. The implementations speak TCP through kafkajs and register
|
|
6
|
+
* from `@vibesdotdev/integrations-kafka/node.plugin`, which only Node/Bun hosts select.
|
|
7
|
+
*/
|
|
8
|
+
export declare const kafkaPlugin: import("@vibesdotdev/kernel").RuntimePlugin;
|
|
9
|
+
export default kafkaPlugin;
|
|
10
|
+
//# sourceMappingURL=kafka.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.plugin.d.ts","sourceRoot":"","sources":["../src/kafka.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,eAAO,MAAM,WAAW,6CAatB,CAAC;AAEH,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integrations Kafka plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers the Kafka substrate, event adapter and settings descriptors, so every scope can
|
|
5
|
+
* name Kafka without loading it. The implementations speak TCP through kafkajs and register
|
|
6
|
+
* from `@vibesdotdev/integrations-kafka/node.plugin`, which only Node/Bun hosts select.
|
|
7
|
+
*/
|
|
8
|
+
import { runtimeClientPlugin } from '@vibesdotdev/kernel/client';
|
|
9
|
+
import { createRuntimePlugin } from '@vibesdotdev/kernel/factory';
|
|
10
|
+
import kafkaSubstrateDescriptor from "./kafka-substrate.descriptor.js";
|
|
11
|
+
import kafkaEventAdapterDescriptor from "./kafka-event-adapter.descriptor.js";
|
|
12
|
+
import kafkaSettingsDescriptor from "./config/kafka.config.descriptor.js";
|
|
13
|
+
export const kafkaPlugin = createRuntimePlugin({
|
|
14
|
+
id: 'integrations-kafka',
|
|
15
|
+
name: 'Integrations Kafka',
|
|
16
|
+
description: 'Kafka messaging substrate providing producer, consumer, and admin sub-connectors.',
|
|
17
|
+
dependencies: ['integrations/base', 'events'],
|
|
18
|
+
onRegister: async (runtime) => { await runtime.registerPlugin(runtimeClientPlugin); },
|
|
19
|
+
descriptors: [
|
|
20
|
+
...['producer', 'consumer', 'admin'].map(service => ({
|
|
21
|
+
id: `kafka-${service}`, kind: 'integration/provider', provider: 'kafka',
|
|
22
|
+
name: `Kafka ${service}`, config: {}
|
|
23
|
+
})),
|
|
24
|
+
kafkaSubstrateDescriptor, kafkaEventAdapterDescriptor, kafkaSettingsDescriptor, { id: 'kafka', kind: 'runtime/client', name: 'Kafka' }
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
export default kafkaPlugin;
|
|
28
|
+
//# sourceMappingURL=kafka.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.plugin.js","sourceRoot":"","sources":["../src/kafka.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,wBAAwB,MAAM,iCAAiC,CAAC;AACvE,OAAO,2BAA2B,MAAM,qCAAqC,CAAC;AAC9E,OAAO,uBAAuB,MAAM,qCAAqC,CAAC;AAE1E,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;IAC9C,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,mFAAmF;IAChG,YAAY,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAE7C,UAAU,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACnF,WAAW,EAAE;QACZ,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACpD,EAAE,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,OAAO;YACvE,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;SACpC,CAAC,CAAC;QACH,wBAAwB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE;KAAC;CACxI,CAAC,CAAC;AAEH,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.logger.descriptor.d.ts","sourceRoot":"","sources":["../../src/logging/kafka.logger.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,QAAA,MAAM,UAAU,EAAE,gBAOjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kafka Logger Descriptor
|
|
3
|
+
*/
|
|
4
|
+
const descriptor = {
|
|
5
|
+
kind: 'logging/logger',
|
|
6
|
+
id: 'kafka',
|
|
7
|
+
namespace: 'kafka',
|
|
8
|
+
runtime: 'server',
|
|
9
|
+
sinks: ['console'],
|
|
10
|
+
level: 'info'
|
|
11
|
+
};
|
|
12
|
+
export default descriptor;
|
|
13
|
+
//# sourceMappingURL=kafka.logger.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.logger.descriptor.js","sourceRoot":"","sources":["../../src/logging/kafka.logger.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,GAAqB;IACpC,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,OAAO;IACX,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,CAAC,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM;CACb,CAAC;AAEF,eAAe,UAAU,CAAC"}
|