UNPKG

2.42 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const parse = require("minimist");
4const { connect, StringCodec, headers, credsAuthenticator } = require("../");
5const { delay } = require("./util");
6const fs = require("fs");
7
8const argv = parse(
9 process.argv.slice(2),
10 {
11 alias: {
12 "s": ["server"],
13 "c": ["count"],
14 "i": ["interval"],
15 "t": ["timeout"],
16 "f": ["creds"],
17 },
18 default: {
19 s: "127.0.0.1:4222",
20 c: 1,
21 i: 0,
22 t: 1000,
23 },
24 boolean: true,
25 string: ["server", "count", "interval", "headers", "creds"],
26 },
27);
28
29const opts = { servers: argv.s };
30const subject = String(argv._[0]);
31const payload = String(argv._[1]) || "";
32const count = (argv.c == -1 ? Number.MAX_SAFE_INTEGER : argv.c) || 1;
33const interval = argv.i;
34
35if (argv.debug) {
36 opts.debug = true;
37}
38
39if (argv.creds) {
40 const data = fs.readFileSync(argv.creds);
41 opts.authenticator = credsAuthenticator(data);
42}
43
44if (argv.h || argv.help || !subject) {
45 console.log(
46 "Usage: nats-pub [-s server] [--creds=/path/file.creds] [-c <count>=1] [-t <timeout>=1000] [-i <interval>=0] [--headers='k=v;k2=v2' subject [msg]",
47 );
48 console.log("to request forever, specify -c=-1 or --count=-1");
49 process.exit(1);
50}
51
52const sc = StringCodec();
53
54(async () => {
55 let nc;
56 try {
57 nc = await connect(opts);
58 } catch (err) {
59 console.log(`error connecting to nats: ${err.message}`);
60 return;
61 }
62 console.info(`connected ${nc.getServer()}`);
63 nc.closed()
64 .then((err) => {
65 if (err) {
66 console.error(`closed with an error: ${err.message}`);
67 }
68 });
69
70 const hdrs = argv.headers ? headers() : undefined;
71 if (hdrs) {
72 argv.headers.split(";").map((l) => {
73 const [k, v] = l.split("=");
74 hdrs.append(k, v);
75 });
76 }
77
78 for (let i = 1; i <= count; i++) {
79 await nc.request(
80 subject,
81 sc.encode(payload),
82 { timeout: argv.t, headers: hdrs },
83 )
84 .then((m) => {
85 console.log(`[${i}]: ${sc.decode(m.data)}`);
86 if (argv.headers && m.headers) {
87 const h = [];
88 for (const [key, value] of m.headers) {
89 h.push(`${key}=${value}`);
90 }
91 console.log(`\t${h.join(";")}`);
92 }
93 })
94 .catch((err) => {
95 console.log(`[${i}]: request failed: ${err.message}`);
96 });
97 if (interval) {
98 await delay(interval);
99 }
100 }
101 await nc.flush();
102 await nc.close();
103})();