This repository has no description
1//@ts-nocheck
2
3import { connect, JetStreamManager, NatsConnection, StringCodec } from 'nats';
4import { STREAM_NAME, SUBJECT_NAME } from '../constants.js';
5import { Message } from '../types.js';
6
7async function setupStream(
8 jetStreamManager: JetStreamManager,
9 streamName: string,
10 subject: string,
11) {
12 try {
13 // Try to add the stream (will not recreate if it exists)
14 await jetStreamManager.streams.add({
15 name: streamName,
16 subjects: [subject],
17 });
18 console.log(`Stream '${streamName}' created or already exists.`);
19 } catch (err) {
20 console.error(`Error setting up stream: ${err.message}`);
21 }
22}
23
24enum Event {
25 CommentReply = 'comment_reply',
26 GodchildRequest = 'godchild_request',
27 NewComment = 'new_comment',
28 NewPost = 'new_post',
29 NewTicket = 'new_ticket',
30}
31
32function randomMessage(): Message {
33 const events = [
34 Event.CommentReply,
35 Event.GodchildRequest,
36 Event.NewComment,
37 Event.NewPost,
38 Event.NewTicket,
39 ] as const;
40 const event = events[Math.floor(Math.random() * events.length)];
41 const id = Math.random().toString(36).substring(7);
42 return { event, id };
43}
44
45async function publishMessages(
46 nc: NatsConnection,
47 subject: string,
48 messageCount: number,
49 delayMs: number,
50) {
51 const js = nc.jetstream();
52 const sc = StringCodec();
53
54 for (let i = 1; i <= messageCount; i++) {
55 const message = `Mock Order #${i}`;
56 await js.publish(subject, sc.encode(JSON.stringify(randomMessage())));
57 console.log(`Sent message: ${message}`);
58 await new Promise((resolve) => setTimeout(resolve, delayMs));
59 }
60}
61
62async function main() {
63 // Connect to the NATS server
64 const nc = await connect({ servers: 'localhost:4222' });
65 console.log('Connected to NATS');
66
67 // Create a JetStream manager to manage streams
68 const jsm = await nc.jetstreamManager();
69
70 // Ensure the stream exists
71 await setupStream(jsm, STREAM_NAME, SUBJECT_NAME);
72
73 // Publish messages at intervals
74 const messageCount = 1000;
75 const delayMs = 10; // 1 second delay between messages
76 await publishMessages(nc, SUBJECT_NAME, messageCount, delayMs);
77
78 console.log('Finished sending messages.');
79 await nc.close();
80}
81
82main().catch((err) => {
83 console.error(`Error in sender: ${err.message}`);
84});