This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

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});