@halcyon-agile/node-event-sourcing
Advanced tools
Comparing version 1.0.1 to 1.0.2
interface EventDto { | ||
topic?: string; | ||
aggregateId?: string; | ||
version?: number; | ||
aggregateId: string; | ||
version: number; | ||
event: string; | ||
@@ -6,0 +5,0 @@ payload: unknown; |
@@ -18,6 +18,5 @@ import DynamoDB from "aws-sdk/clients/dynamodb"; | ||
published: number; | ||
committedAt: number; | ||
topic?: string | undefined; | ||
aggregateId?: string | undefined; | ||
version?: number | undefined; | ||
committedAt: string; | ||
aggregateId: string; | ||
version: number; | ||
event: string; | ||
@@ -24,0 +23,0 @@ payload: unknown; |
@@ -10,6 +10,5 @@ "use strict"; | ||
this.tableName = "EventStore"; | ||
this.tableName = process.env.EVENTSTORE_NAME || "EventStore"; | ||
this.tableName = process.env.EVENTSTORE_TABLE_NAME || "EventStore"; | ||
if (String(process.env.DYNAMODB_LOCAL) === "true") { | ||
this.service = new dynamodb_1.default({ | ||
region: process.env.AWS_REGION, | ||
endpoint: process.env.DYNAMODB_URL || "http://localhost:8000", | ||
@@ -92,3 +91,3 @@ }); | ||
published: process.env.DYNAMODB_STREAM_ENABLED ? 1 : 0, | ||
committedAt: Date.now(), | ||
committedAt: String(Date.now()), | ||
}, | ||
@@ -105,3 +104,3 @@ }, | ||
published: process.env.DYNAMODB_STREAM_ENABLED ? 1 : 0, | ||
committedAt: Date.now(), | ||
committedAt: String(Date.now()), | ||
}, | ||
@@ -108,0 +107,0 @@ }) |
@@ -6,18 +6,5 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const kafkajs_1 = __importDefault(require("kafkajs")); | ||
const async_1 = require("async"); | ||
const CommitManager_1 = __importDefault(require("./CommitManager")); | ||
const node_rdkafka_1 = __importDefault(require("node-rdkafka")); | ||
function isJson(item) { | ||
item = typeof item !== "string" ? JSON.stringify(item) : item; | ||
try { | ||
item = JSON.parse(item); | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
if (typeof item === "object" && item !== null) { | ||
return true; | ||
} | ||
return false; | ||
} | ||
const Helper_1 = require("../Helper"); | ||
class Consumer { | ||
@@ -45,3 +32,3 @@ constructor(eventHandlers, globalConfig, topicConfig) { | ||
this.commitManager.notifyStartProcessing(data); | ||
if (data.value && isJson(data.value?.toString())) { | ||
if (data.value && Helper_1.isJson(data.value?.toString())) { | ||
const message = JSON.parse(data.value.toString()); | ||
@@ -57,6 +44,6 @@ await handler(message); | ||
onRebalance(err, assignments) { | ||
if (err.code === node_rdkafka_1.default.CODES.ERRORS.ERR__ASSIGN_PARTITIONS) { | ||
if (err.code === kafkajs_1.default.CODES.ERRORS.ERR__ASSIGN_PARTITIONS) { | ||
this.consumer.assign(assignments); | ||
} | ||
else if (err.code === node_rdkafka_1.default.CODES.ERRORS.ERR__REVOKE_PARTITIONS) { | ||
else if (err.code === kafkajs_1.default.CODES.ERRORS.ERR__REVOKE_PARTITIONS) { | ||
if (this.paused) { | ||
@@ -77,3 +64,3 @@ this.consumer.resume(assignments); | ||
start() { | ||
this.consumer = new node_rdkafka_1.default.KafkaConsumer({ | ||
this.consumer = new kafkajs_1.default.KafkaConsumer({ | ||
...this.globalConfig, | ||
@@ -126,3 +113,3 @@ rebalance_cb: (err, assignments) => this.onRebalance(err, assignments), | ||
}, 10000); | ||
this.commitManager = new CommitManager_1.default(); | ||
this.commitManager = new CommitManager(); | ||
this.commitManager.start(this.consumer); | ||
@@ -129,0 +116,0 @@ }); |
@@ -7,19 +7,15 @@ "use strict"; | ||
const EventStore_1 = __importDefault(require("./EventStore")); | ||
const node_rdkafka_1 = __importDefault(require("node-rdkafka")); | ||
const producer = new node_rdkafka_1.default.HighLevelProducer({ | ||
"metadata.broker.list": process.env.KAFKA_BROKERS || `localhost:9092`, | ||
"queue.buffering.max.messages": 10000000, | ||
const kafkajs_1 = require("kafkajs"); | ||
const brokers = process.env.KAFKA_BROKERS?.split(",") || ["localhost:9092"]; | ||
const kafka = new kafkajs_1.Kafka({ | ||
clientId: "my-app", | ||
brokers, | ||
}); | ||
const producer = kafka.producer(); | ||
class Publisher { | ||
async publishEvents(events) { | ||
for (const event of events) { | ||
await new Promise((resolve, reject) => { | ||
return producer.produce(event.event, null, Buffer.from(JSON.stringify(event.payload)), null, Date.now(), (err) => { | ||
if (err) { | ||
console.log({ err }); | ||
reject(err); | ||
return; | ||
} | ||
resolve(); | ||
}); | ||
await producer.send({ | ||
topic: event.event, | ||
messages: [{ value: JSON.stringify(event) }], | ||
}); | ||
@@ -29,3 +25,3 @@ } | ||
async run() { | ||
producer.connect(); | ||
await producer.connect(); | ||
const exec = async () => { | ||
@@ -32,0 +28,0 @@ const events = (await EventStore_1.default.getUnpublishedEvents()).Items; |
import { EventHandlersClassType } from "./Dto"; | ||
import Consumer from "./Messaging/Consumer"; | ||
import ListenerConsumer from "./ListenerConsumer"; | ||
import ProjectorConsumer from "./ProjectorConsumer"; | ||
import { Kafka } from "kafkajs"; | ||
declare class Runner { | ||
projectors: EventHandlersClassType[]; | ||
listeners: EventHandlersClassType[]; | ||
consumers: Consumer[]; | ||
listenersConsumers: ListenerConsumer[]; | ||
projectorsConsumers: ProjectorConsumer[]; | ||
kafka: Kafka; | ||
constructor(); | ||
registerListeners(listeners: string[]): Promise<void>; | ||
registerProjectors(projectors: string[]): Promise<void>; | ||
run(): Promise<void>; | ||
stop(): Promise<void>; | ||
stop(): void; | ||
} | ||
declare const _default: Runner; | ||
export default _default; | ||
export default Runner; |
@@ -25,3 +25,4 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const Consumer_1 = __importDefault(require("./Messaging/Consumer")); | ||
const ProjectorConsumer_1 = __importDefault(require("./ProjectorConsumer")); | ||
const kafkajs_1 = require("kafkajs"); | ||
class Runner { | ||
@@ -31,2 +32,20 @@ constructor() { | ||
this.listeners = []; | ||
this.listenersConsumers = []; | ||
this.projectorsConsumers = []; | ||
const brokers = process.env.KAFKA_BROKERS?.split(",") || ["localhost:9092"]; | ||
const clientId = process.env.KAFKA_CLIENT_ID || "default-client-id"; | ||
let logLevel = 4; | ||
if (process.env.KAFKA_LOG_LEVEL === "NOTHING") | ||
logLevel = 0; | ||
if (process.env.KAFKA_LOG_LEVEL === "ERROR") | ||
logLevel = 1; | ||
if (process.env.KAFKA_LOG_LEVEL === "WARN") | ||
logLevel = 2; | ||
if (process.env.KAFKA_LOG_LEVEL === "DEBUG") | ||
logLevel = 5; | ||
this.kafka = new kafkajs_1.Kafka({ | ||
logLevel, | ||
brokers, | ||
clientId, | ||
}); | ||
} | ||
@@ -46,45 +65,22 @@ async registerListeners(listeners) { | ||
async run() { | ||
const groupId = process.env.KAFKA_GROUP_ID || "example-group"; | ||
const offsetReset = [ | ||
"smallest", | ||
"earliest", | ||
"beginning", | ||
"largest", | ||
"latest", | ||
"end", | ||
"error", | ||
].find((v) => v === process.env.KAFKA_OFFSET_RESET); | ||
this.consumers = [ | ||
new Consumer_1.default(this.listeners, { | ||
"metadata.broker.list": process.env.KAFKA_BROKERS || `localhost:9092`, | ||
"group.id": groupId, | ||
"allow.auto.create.topics": true, | ||
"enable.auto.commit": false, | ||
log_level: 6, | ||
}, { | ||
"auto.offset.reset": offsetReset || "beginning", | ||
}), | ||
]; | ||
this.projectors.forEach((projector) => { | ||
this.consumers.push(new Consumer_1.default([projector], { | ||
"metadata.broker.list": process.env.KAFKA_BROKERS || `localhost:9092`, | ||
"group.id": `${groupId}_${projector.name}`, | ||
"allow.auto.create.topics": true, | ||
"enable.auto.commit": false, | ||
log_level: 6, | ||
}, { | ||
"auto.offset.reset": offsetReset || "beginning", | ||
})); | ||
}); | ||
await Promise.all(this.consumers.map((consumer) => consumer.start())); | ||
} | ||
async stop() { | ||
try { | ||
await Promise.all(this.consumers.map((consumer) => consumer.disconnect())); | ||
const groupId = process.env.KAFKA_GROUP_ID || "default-group"; | ||
for (const projector of this.projectors) { | ||
this.projectorsConsumers.push(new ProjectorConsumer_1.default(this.kafka, groupId, projector)); | ||
} | ||
catch (error) { | ||
console.error(error); | ||
for (const consumer of this.projectorsConsumers) { | ||
await consumer.start(); | ||
} | ||
// for (const consumer of this.listenersConsumers) { | ||
// await consumer.start(); | ||
// } | ||
} | ||
stop() { | ||
// for (const consumer of this.listenersConsumers) { | ||
// consumer.disconnect(); | ||
// } | ||
for (const consumer of this.projectorsConsumers) { | ||
consumer.disconnect(); | ||
} | ||
} | ||
} | ||
exports.default = new Runner(); | ||
exports.default = Runner; |
{ | ||
"name": "@halcyon-agile/node-event-sourcing", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "> Opinionated OOP based node.js event sourcing library inspired by laravel-event-sourcing", | ||
@@ -38,2 +38,3 @@ "main": "dist/index.js", | ||
"aws-sdk": "^2.951.0", | ||
"kafkajs": "^1.15.0", | ||
"node-rdkafka": "^2.10.1" | ||
@@ -40,0 +41,0 @@ }, |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
37475
28
881
4
22
+ Addedkafkajs@^1.15.0
+ Addedkafkajs@1.16.0(transitive)
- Removedavailable-typed-arrays@1.0.7(transitive)
- Removedbase64-js@1.5.1(transitive)
- Removedbuffer@4.9.2(transitive)
- Removedcall-bind@1.0.7(transitive)
- Removeddefine-data-property@1.1.4(transitive)
- Removedes-define-property@1.0.0(transitive)
- Removedes-errors@1.3.0(transitive)
- Removedevents@1.1.1(transitive)
- Removedfor-each@0.3.3(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedget-intrinsic@1.2.4(transitive)
- Removedgopd@1.0.1(transitive)
- Removedhas-property-descriptors@1.0.2(transitive)
- Removedhas-proto@1.0.3(transitive)
- Removedhas-symbols@1.0.3(transitive)
- Removedhas-tostringtag@1.0.2(transitive)
- Removedhasown@2.0.2(transitive)
- Removedieee754@1.1.13(transitive)
- Removedinherits@2.0.4(transitive)
- Removedis-arguments@1.1.1(transitive)
- Removedis-callable@1.2.7(transitive)
- Removedis-generator-function@1.0.10(transitive)
- Removedis-typed-array@1.1.13(transitive)
- Removedisarray@1.0.0(transitive)
- Removedjmespath@0.16.0(transitive)
- Removedpossible-typed-array-names@1.0.0(transitive)
- Removedpunycode@1.3.2(transitive)
- Removedquerystring@0.2.0(transitive)
- Removedsax@1.2.1(transitive)
- Removedset-function-length@1.2.2(transitive)
- Removedurl@0.10.3(transitive)
- Removedutil@0.12.5(transitive)
- Removeduuid@8.0.0(transitive)
- Removedwhich-typed-array@1.1.15(transitive)
- Removedxml2js@0.6.2(transitive)
- Removedxmlbuilder@11.0.1(transitive)