iris-relay 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -225,9 +225,28 @@ Set `XERO_DRY_RUN=true` in `.env` to log messages to console instead of sending
225
225
 
226
226
  ---
227
227
 
228
+ ## Getting Started
229
+
230
+ ```bash
231
+ npx iris-relay init
232
+ ```
233
+
234
+ The setup wizard will:
235
+ 1. Ask for your **Bot Token** (from @BotFather)
236
+ 2. Ask for your **Chat ID** (from @userinfobot)
237
+ 3. Optionally enable **dry run mode**
238
+ 4. Optionally generate a **GitHub Actions workflow**
239
+ 5. Write your `.env` and add it to `.gitignore`
240
+ 6. Send a **test message** to verify everything works
241
+
242
+ ---
243
+
228
244
  ## CLI
229
245
 
230
246
  ```bash
247
+ # Interactive setup
248
+ npx iris-relay init
249
+
231
250
  # Send a message
232
251
  npx iris-relay "Deploy complete ✅"
233
252
 
package/dist/cli.js CHANGED
@@ -2,20 +2,21 @@
2
2
  import { config } from "dotenv";
3
3
  import { relay } from "./relay.js";
4
4
  import { relayFile } from "./file.js";
5
- config();
5
+ import { createInterface } from "node:readline/promises";
6
+ import { writeFileSync, existsSync, readFileSync, mkdirSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ config({ quiet: true });
6
9
  const args = process.argv.slice(2);
7
10
  function printHelp() {
8
11
  console.log(`
9
- iris-relay — Send messages to Telegram from the CLI
12
+ iris-relay — Telegram message relay for developers
10
13
 
11
- Usage:
12
- iris-relay "Your message here"
13
- iris-relay --file ./path/to/file.log "Optional caption"
14
- iris-relay --silent "No notification sound"
15
- iris-relay --html "<b>Bold</b> message"
14
+ Commands:
15
+ iris-relay init Interactive setup wizard
16
+ iris-relay "message" Send a text message
17
+ iris-relay --file <path> Send a file
16
18
 
17
19
  Options:
18
- --file <path> Send a file instead of a text message
19
20
  --silent Send without notification sound
20
21
  --html Parse message as HTML
21
22
  --markdown Parse message as Markdown
@@ -24,9 +25,289 @@ Options:
24
25
  Environment:
25
26
  XERO_BOT_TOKEN Your Telegram bot token
26
27
  XERO_CHAT_ID Your Telegram chat ID
28
+ XERO_DRY_RUN Set to "true" to log instead of send
27
29
  `);
28
30
  }
31
+ // ─── Helpers ─────────────────────────────────────────────────
32
+ function yn(answer) {
33
+ return answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
34
+ }
35
+ function detectPackageManager() {
36
+ if (existsSync(join(process.cwd(), "pnpm-lock.yaml")))
37
+ return "pnpm";
38
+ if (existsSync(join(process.cwd(), "yarn.lock")))
39
+ return "yarn";
40
+ if (existsSync(join(process.cwd(), "bun.lockb")))
41
+ return "bun";
42
+ return "npm";
43
+ }
44
+ function detectFramework() {
45
+ const pkgPath = join(process.cwd(), "package.json");
46
+ if (!existsSync(pkgPath))
47
+ return null;
48
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
49
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
50
+ if (allDeps["next"])
51
+ return "next";
52
+ if (allDeps["express"])
53
+ return "express";
54
+ if (allDeps["fastify"])
55
+ return "fastify";
56
+ if (allDeps["hono"])
57
+ return "hono";
58
+ if (allDeps["koa"])
59
+ return "koa";
60
+ return null;
61
+ }
62
+ // ─── Interactive Setup ───────────────────────────────────────
63
+ async function runInit() {
64
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
65
+ const pm = detectPackageManager();
66
+ const framework = detectFramework();
67
+ console.log(`
68
+ ╔══════════════════════════════════════════╗
69
+ ║ 🛰️ iris-relay setup wizard ║
70
+ ╚══════════════════════════════════════════╝
71
+ `);
72
+ if (framework)
73
+ console.log(` Detected: ${framework} project (${pm})\n`);
74
+ // ── Step 1: Credentials ──────────────────────
75
+ console.log("Step 1 — Telegram Credentials\n");
76
+ console.log(" Get bot token → https://t.me/BotFather");
77
+ console.log(" Get chat ID → https://t.me/userinfobot\n");
78
+ const botToken = (await rl.question(" XERO_BOT_TOKEN: ")).trim();
79
+ if (!botToken) {
80
+ console.error("\n❌ Bot token is required.");
81
+ rl.close();
82
+ process.exit(1);
83
+ }
84
+ const chatId = (await rl.question(" XERO_CHAT_ID: ")).trim();
85
+ if (!chatId) {
86
+ console.error("\n❌ Chat ID is required.");
87
+ rl.close();
88
+ process.exit(1);
89
+ }
90
+ // ── Step 2: Features ─────────────────────────
91
+ console.log("\nStep 2 — Features to enable\n");
92
+ const enableCrashWatch = yn(await rl.question(" 🛡️ Auto-report crashes to Telegram? (Y/n): ") || "y");
93
+ const enableHeartbeat = yn(await rl.question(" 💓 Send periodic heartbeat pings? (y/N): "));
94
+ let heartbeatInterval = 60;
95
+ let appName = "";
96
+ if (enableHeartbeat) {
97
+ appName = (await rl.question(" App name (for heartbeat label): ")).trim() || "My App";
98
+ const intervalStr = (await rl.question(" Interval in seconds (default: 60): ")).trim();
99
+ heartbeatInterval = parseInt(intervalStr) || 60;
100
+ }
101
+ const enableMiddleware = framework === "express" || framework === "fastify" || framework === "koa"
102
+ ? yn(await rl.question(` 🔌 Add ${framework} error/slow-request middleware? (Y/n): `) || "y")
103
+ : false;
104
+ const enableDryRun = yn(await rl.question(" 🧪 Enable dry run mode for now? (y/N): "));
105
+ // ── Step 3: Scaffolding ──────────────────────
106
+ console.log("\nStep 3 — Project scaffolding\n");
107
+ const generateStarter = yn(await rl.question(" 📄 Generate a starter file (iris.ts / iris.js)? (Y/n): ") || "y");
108
+ const generateCI = yn(await rl.question(" 🚀 Generate GitHub Actions deploy notification? (y/N): "));
109
+ const generateDocker = yn(await rl.question(" 🐳 Add XERO_ env vars to docker-compose.yml? (y/N): "));
110
+ rl.close();
111
+ // ── Write .env ───────────────────────────────
112
+ console.log("\n── Writing files ──\n");
113
+ const envPath = join(process.cwd(), ".env");
114
+ let envContent = "";
115
+ if (existsSync(envPath)) {
116
+ const existing = readFileSync(envPath, "utf-8");
117
+ envContent = existing
118
+ .split("\n")
119
+ .filter((line) => !line.startsWith("XERO_BOT_TOKEN=") &&
120
+ !line.startsWith("XERO_CHAT_ID=") &&
121
+ !line.startsWith("XERO_DRY_RUN="))
122
+ .join("\n")
123
+ .trimEnd();
124
+ if (envContent)
125
+ envContent += "\n\n";
126
+ }
127
+ envContent += `# iris-relay config\n`;
128
+ envContent += `XERO_BOT_TOKEN=${botToken}\n`;
129
+ envContent += `XERO_CHAT_ID=${chatId}\n`;
130
+ if (enableDryRun) {
131
+ envContent += `XERO_DRY_RUN=true\n`;
132
+ }
133
+ writeFileSync(envPath, envContent);
134
+ console.log(`✅ .env → ${envPath}`);
135
+ // ── .gitignore ───────────────────────────────
136
+ const gitignorePath = join(process.cwd(), ".gitignore");
137
+ if (existsSync(gitignorePath)) {
138
+ const gitignore = readFileSync(gitignorePath, "utf-8");
139
+ if (!gitignore.includes(".env")) {
140
+ writeFileSync(gitignorePath, gitignore.trimEnd() + "\n.env\n");
141
+ console.log("✅ .env added to .gitignore");
142
+ }
143
+ }
144
+ else {
145
+ writeFileSync(gitignorePath, "node_modules\n.env\n");
146
+ console.log("✅ .gitignore created");
147
+ }
148
+ // ── Starter file ─────────────────────────────
149
+ if (generateStarter) {
150
+ const isTS = existsSync(join(process.cwd(), "tsconfig.json"));
151
+ const ext = isTS ? "ts" : "js";
152
+ const starterPath = join(process.cwd(), `iris.${ext}`);
153
+ let starter = "";
154
+ if (isTS) {
155
+ starter += `import { relay, relayError, relayDeploy } from "iris-relay";\n`;
156
+ }
157
+ else {
158
+ starter += `const { relay, relayError, relayDeploy } = require("iris-relay");\n`;
159
+ }
160
+ starter += `\n`;
161
+ if (enableCrashWatch) {
162
+ if (isTS) {
163
+ starter += `import { watchProcess } from "iris-relay";\n`;
164
+ }
165
+ else {
166
+ starter += `const { watchProcess } = require("iris-relay");\n`;
167
+ }
168
+ starter += `\n// Auto-report uncaught exceptions & unhandled rejections\n`;
169
+ starter += `watchProcess();\n\n`;
170
+ }
171
+ if (enableHeartbeat) {
172
+ if (isTS) {
173
+ starter += `import { startHeartbeat } from "iris-relay";\n`;
174
+ }
175
+ else {
176
+ starter += `const { startHeartbeat } = require("iris-relay");\n`;
177
+ }
178
+ starter += `\n// Send periodic heartbeat (every ${heartbeatInterval}s)\n`;
179
+ starter += `const stopHeartbeat = startHeartbeat({\n`;
180
+ starter += ` interval: ${heartbeatInterval * 1000},\n`;
181
+ starter += ` app: "${appName}",\n`;
182
+ starter += `});\n\n`;
183
+ }
184
+ if (enableMiddleware && framework === "express") {
185
+ if (isTS) {
186
+ starter += `import { irisMiddleware, irisErrorHandler } from "iris-relay";\n`;
187
+ }
188
+ else {
189
+ starter += `const { irisMiddleware, irisErrorHandler } = require("iris-relay");\n`;
190
+ }
191
+ starter += `\n// Add to your Express app:\n`;
192
+ starter += `// app.use(irisMiddleware({ slowThreshold: 3000 }));\n`;
193
+ starter += `// app.use(irisErrorHandler()); // after all routes\n\n`;
194
+ }
195
+ starter += `// ── Examples ──\n\n`;
196
+ starter += `// Send a message\n`;
197
+ starter += `// await relay("Server started 🚀");\n\n`;
198
+ starter += `// Report an error\n`;
199
+ starter += `// try { ... } catch (err) { await relayError(err); }\n\n`;
200
+ starter += `// Deploy notification (auto-reads git info)\n`;
201
+ starter += `// await relayDeploy({ app: "${appName || "my-app"}", env: "production" });\n`;
202
+ writeFileSync(starterPath, starter);
203
+ console.log(`✅ iris.${ext} → ${starterPath}`);
204
+ }
205
+ // ── GitHub Actions ───────────────────────────
206
+ if (generateCI) {
207
+ const workflowDir = join(process.cwd(), ".github", "workflows");
208
+ const workflowPath = join(workflowDir, "iris-notify.yml");
209
+ const workflowContent = `# iris-relay deploy notification
210
+ # Add XERO_BOT_TOKEN and XERO_CHAT_ID as repository secrets
211
+
212
+ name: Deploy Notification
213
+
214
+ on:
215
+ push:
216
+ branches: [main]
217
+
218
+ jobs:
219
+ notify:
220
+ runs-on: ubuntu-latest
221
+ steps:
222
+ - uses: actions/checkout@v4
223
+
224
+ - uses: actions/setup-node@v4
225
+ with:
226
+ node-version: "20"
227
+
228
+ - run: ${pm} install iris-relay
229
+
230
+ - name: Send deploy notification
231
+ env:
232
+ XERO_BOT_TOKEN: \${{ secrets.XERO_BOT_TOKEN }}
233
+ XERO_CHAT_ID: \${{ secrets.XERO_CHAT_ID }}
234
+ run: npx iris-relay "🚀 Deployed \${{ github.repository }}@\${{ github.sha }}"
235
+ `;
236
+ mkdirSync(workflowDir, { recursive: true });
237
+ writeFileSync(workflowPath, workflowContent);
238
+ console.log(`✅ GitHub Actions → ${workflowPath}`);
239
+ console.log(" ⚠️ Add XERO_BOT_TOKEN and XERO_CHAT_ID as repo secrets!");
240
+ }
241
+ // ── Docker Compose ───────────────────────────
242
+ if (generateDocker) {
243
+ const composePath = join(process.cwd(), "docker-compose.yml");
244
+ if (existsSync(composePath)) {
245
+ const existing = readFileSync(composePath, "utf-8");
246
+ if (!existing.includes("XERO_BOT_TOKEN")) {
247
+ const envBlock = `\n # iris-relay\n environment:\n - XERO_BOT_TOKEN=\${XERO_BOT_TOKEN}\n - XERO_CHAT_ID=\${XERO_CHAT_ID}\n`;
248
+ console.log(`\n📋 Add this to your service in docker-compose.yml:\n${envBlock}`);
249
+ }
250
+ }
251
+ else {
252
+ const composeContent = `version: "3.8"
253
+
254
+ services:
255
+ app:
256
+ build: .
257
+ env_file:
258
+ - .env
259
+ environment:
260
+ - XERO_BOT_TOKEN=\${XERO_BOT_TOKEN}
261
+ - XERO_CHAT_ID=\${XERO_CHAT_ID}
262
+ `;
263
+ writeFileSync(composePath, composeContent);
264
+ console.log(`✅ docker-compose.yml → ${composePath}`);
265
+ }
266
+ }
267
+ // ── Test connection ──────────────────────────
268
+ console.log("\n🧪 Testing connection...");
269
+ process.env.XERO_BOT_TOKEN = botToken;
270
+ process.env.XERO_CHAT_ID = chatId;
271
+ const result = await relay("✅ iris-relay connected successfully!");
272
+ if (result.success) {
273
+ console.log("✅ Test message sent! Check your Telegram.");
274
+ }
275
+ else {
276
+ console.error(`⚠️ Test failed: ${result.error}`);
277
+ console.log(" .env was still saved — double-check your token and chat ID.");
278
+ }
279
+ // ── Summary ──────────────────────────────────
280
+ const features = [];
281
+ if (enableCrashWatch)
282
+ features.push("crash watcher");
283
+ if (enableHeartbeat)
284
+ features.push(`heartbeat (${heartbeatInterval}s)`);
285
+ if (enableMiddleware)
286
+ features.push(`${framework} middleware`);
287
+ if (enableDryRun)
288
+ features.push("dry run mode");
289
+ console.log(`
290
+ ╔══════════════════════════════════════════╗
291
+ ║ 🎉 Setup complete! ║
292
+ ╚══════════════════════════════════════════╝
293
+
294
+ Features: ${features.length > 0 ? features.join(", ") : "core only"}
295
+
296
+ Quick start:
297
+ import { relay } from "iris-relay";
298
+ await relay("Hello from my server! 🚀");
299
+
300
+ CLI:
301
+ npx iris-relay "Quick message"
302
+ `);
303
+ }
304
+ // ─── Message / File Sending ──────────────────────────────────
29
305
  async function main() {
306
+ const command = args[0];
307
+ if (command === "init") {
308
+ await runInit();
309
+ return;
310
+ }
30
311
  if (args.length === 0 || args.includes("--help") || args.includes("-h")) {
31
312
  printHelp();
32
313
  process.exit(0);
@@ -35,12 +316,10 @@ async function main() {
35
316
  const html = args.includes("--html");
36
317
  const markdown = args.includes("--markdown");
37
318
  const fileIdx = args.indexOf("--file");
38
- // Filter out flags to get the message
39
319
  const messageArgs = args.filter((a, i) => !a.startsWith("--") && !(i === fileIdx + 1 && fileIdx >= 0));
40
320
  const message = messageArgs.join(" ");
41
321
  const parseMode = html ? "HTML" : markdown ? "Markdown" : undefined;
42
322
  try {
43
- // File mode
44
323
  if (fileIdx >= 0) {
45
324
  const filePath = args[fileIdx + 1];
46
325
  if (!filePath) {
@@ -60,7 +339,6 @@ async function main() {
60
339
  }
61
340
  return;
62
341
  }
63
- // Message mode
64
342
  if (!message) {
65
343
  console.error("Error: No message provided");
66
344
  printHelp();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iris-relay",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "Lightweight Telegram message relay — dev tool for notifications, crash alerts, deploy pings, and more",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",