This repository has no description
0

Configure Feed

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

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