iris-relay 1.1.4 → 1.2.1

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
@@ -5,17 +5,30 @@ Lightweight Telegram relay dev tool — crash alerts, deploy notifications, hear
5
5
  ## Install
6
6
 
7
7
  ```bash
8
+ # pnpm
8
9
  pnpm add iris-relay
10
+
11
+ # npm
12
+ npm install iris-relay
9
13
  ```
10
14
 
11
15
  ## Setup
12
16
 
13
- Create a `.env` file in your project root:
17
+ Run the interactive setup wizard:
18
+
19
+ ```bash
20
+ # pnpm
21
+ pnpm dlx iris-relay init
22
+
23
+ # npm
24
+ npx iris-relay init
25
+ ```
26
+
27
+ Or manually create a `.env` file:
14
28
 
15
29
  ```env
16
30
  XERO_BOT_TOKEN=your_bot_token_from_botfather
17
31
  XERO_CHAT_ID=your_telegram_chat_id
18
- XERO_DRY_RUN=false
19
32
  ```
20
33
 
21
34
  > **Bot Token** → [@BotFather](https://t.me/BotFather) · **Chat ID** → [@userinfobot](https://t.me/userinfobot)
@@ -228,16 +241,31 @@ Set `XERO_DRY_RUN=true` in `.env` to log messages to console instead of sending
228
241
  ## Getting Started
229
242
 
230
243
  ```bash
244
+ # pnpm
245
+ pnpm dlx iris-relay init
246
+
247
+ # npm
231
248
  npx iris-relay init
232
249
  ```
233
250
 
234
251
  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
252
+
253
+ **Step 1 Credentials**
254
+ - Ask for your **Bot Token** (from @BotFather)
255
+ - Ask for your **Chat ID** (from @userinfobot)
256
+
257
+ **Step 2 Features** (auto-detects your framework & package manager)
258
+ - 🛡️ Crash watcher — auto-report uncaught exceptions
259
+ - 💓 Heartbeat — periodic alive pings with custom interval
260
+ - 🔌 Express/Fastify middleware — slow request & error reporting (only if detected)
261
+ - 🧪 Dry run mode — log to console instead of sending
262
+
263
+ **Step 3 — Scaffolding**
264
+ - 📄 Generates `iris.ts` or `iris.js` starter file with selected features pre-wired
265
+ - 🚀 GitHub Actions deploy notification workflow
266
+ - 🐳 Docker Compose env var setup
267
+
268
+ **Then** → writes `.env`, updates `.gitignore`, sends a test message ✅
241
269
 
242
270
  ---
243
271
 
@@ -245,21 +273,30 @@ The setup wizard will:
245
273
 
246
274
  ```bash
247
275
  # Interactive setup
248
- npx iris-relay init
276
+ pnpm dlx iris-relay init # or: npx iris-relay init
277
+
278
+ # Validate config & test connection
279
+ pnpm dlx iris-relay doctor
280
+
281
+ # Remove iris-relay config from project
282
+ pnpm dlx iris-relay reset
249
283
 
250
284
  # Send a message
251
- npx iris-relay "Deploy complete ✅"
285
+ pnpm dlx iris-relay "Deploy complete ✅" # or: npx iris-relay "..."
252
286
 
253
287
  # Send with HTML
254
- npx iris-relay --html "<b>Bold</b> message"
288
+ pnpm dlx iris-relay --html "<b>Bold</b> message"
255
289
 
256
290
  # Send a file
257
- npx iris-relay --file ./logs/error.log "Error log attached"
291
+ pnpm dlx iris-relay --file ./logs/error.log "Error log attached"
258
292
 
259
293
  # Silent (no notification sound)
260
- npx iris-relay --silent "Background update"
294
+ pnpm dlx iris-relay --silent "Background update"
261
295
  ```
262
296
 
297
+ > **Re-init:** Running `init` again detects existing config and asks to override.
298
+ > **System env:** If `XERO_BOT_TOKEN` or `XERO_CHAT_ID` are set at the system/shell level, the wizard will notify you and suggest using a secrets manager for production.
299
+
263
300
  ---
264
301
 
265
302
  ## API Reference
package/dist/cli.js CHANGED
@@ -3,16 +3,131 @@ import { config } from "dotenv";
3
3
  import { relay } from "./relay.js";
4
4
  import { relayFile } from "./file.js";
5
5
  import { createInterface } from "node:readline/promises";
6
- import { writeFileSync, existsSync, readFileSync, mkdirSync } from "node:fs";
6
+ import { writeFileSync, existsSync, readFileSync, mkdirSync, unlinkSync } from "node:fs";
7
7
  import { join } from "node:path";
8
8
  config({ quiet: true });
9
9
  const args = process.argv.slice(2);
10
+ // ─── Helpers ─────────────────────────────────────────────────
11
+ function yn(answer) {
12
+ return answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
13
+ }
14
+ function detectPackageManager() {
15
+ if (existsSync(join(process.cwd(), "pnpm-lock.yaml")))
16
+ return "pnpm";
17
+ if (existsSync(join(process.cwd(), "yarn.lock")))
18
+ return "yarn";
19
+ if (existsSync(join(process.cwd(), "bun.lockb")))
20
+ return "bun";
21
+ return "npm";
22
+ }
23
+ function detectFramework() {
24
+ const pkgPath = join(process.cwd(), "package.json");
25
+ if (!existsSync(pkgPath))
26
+ return null;
27
+ try {
28
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
29
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
30
+ if (allDeps["next"])
31
+ return "next";
32
+ if (allDeps["express"])
33
+ return "express";
34
+ if (allDeps["fastify"])
35
+ return "fastify";
36
+ if (allDeps["hono"])
37
+ return "hono";
38
+ if (allDeps["koa"])
39
+ return "koa";
40
+ }
41
+ catch { /* ignore parse errors */ }
42
+ return null;
43
+ }
44
+ /** Validate Telegram bot token format: <digits>:<alphanumeric+_-> */
45
+ function isValidBotToken(token) {
46
+ return /^\d+:[A-Za-z0-9_-]{30,}$/.test(token);
47
+ }
48
+ /** Validate chat ID: numeric, optionally negative (for groups) */
49
+ function isValidChatId(id) {
50
+ return /^-?\d+$/.test(id);
51
+ }
52
+ /** Check if XERO_ env vars exist in the system (not from .env) */
53
+ function detectSystemEnv() {
54
+ // Temporarily clear loaded .env values to check system-level
55
+ const envPath = join(process.cwd(), ".env");
56
+ const envVars = {};
57
+ if (existsSync(envPath)) {
58
+ const content = readFileSync(envPath, "utf-8");
59
+ for (const line of content.split("\n")) {
60
+ const match = line.match(/^([^#=]+)=(.*)$/);
61
+ if (match)
62
+ envVars[match[1].trim()] = match[2].trim();
63
+ }
64
+ }
65
+ const sysBot = process.env.XERO_BOT_TOKEN && process.env.XERO_BOT_TOKEN !== envVars["XERO_BOT_TOKEN"];
66
+ const sysChat = process.env.XERO_CHAT_ID && process.env.XERO_CHAT_ID !== envVars["XERO_CHAT_ID"];
67
+ return { botToken: !!sysBot, chatId: !!sysChat };
68
+ }
69
+ /** Detect existing iris-relay configuration */
70
+ function detectExisting() {
71
+ const envPath = join(process.cwd(), ".env");
72
+ let hasBotToken = false;
73
+ let hasChatId = false;
74
+ if (existsSync(envPath)) {
75
+ const content = readFileSync(envPath, "utf-8");
76
+ hasBotToken = content.includes("XERO_BOT_TOKEN=");
77
+ hasChatId = content.includes("XERO_CHAT_ID=");
78
+ }
79
+ const hasTsStarter = existsSync(join(process.cwd(), "iris.ts"));
80
+ const hasJsStarter = existsSync(join(process.cwd(), "iris.js"));
81
+ return {
82
+ hasEnv: existsSync(envPath),
83
+ hasBotToken,
84
+ hasChatId,
85
+ hasStarterFile: hasTsStarter || hasJsStarter,
86
+ starterFileName: hasTsStarter ? "iris.ts" : hasJsStarter ? "iris.js" : null,
87
+ hasWorkflow: existsSync(join(process.cwd(), ".github", "workflows", "iris-notify.yml")),
88
+ hasDockerCompose: existsSync(join(process.cwd(), "docker-compose.yml")),
89
+ };
90
+ }
91
+ /** Remove XERO_ vars from .env, cleaning up comments too */
92
+ function cleanEnv() {
93
+ const envPath = join(process.cwd(), ".env");
94
+ if (!existsSync(envPath))
95
+ return;
96
+ const lines = readFileSync(envPath, "utf-8").split("\n");
97
+ const cleaned = lines.filter((line) => {
98
+ const trimmed = line.trim();
99
+ if (trimmed === "# iris-relay config")
100
+ return false;
101
+ if (trimmed.startsWith("XERO_BOT_TOKEN="))
102
+ return false;
103
+ if (trimmed.startsWith("XERO_CHAT_ID="))
104
+ return false;
105
+ if (trimmed.startsWith("XERO_DRY_RUN="))
106
+ return false;
107
+ return true;
108
+ });
109
+ // Remove trailing empty lines
110
+ while (cleaned.length > 0 && cleaned[cleaned.length - 1].trim() === "") {
111
+ cleaned.pop();
112
+ }
113
+ if (cleaned.length === 0 || cleaned.every((l) => l.trim() === "")) {
114
+ unlinkSync(envPath);
115
+ console.log(" 🗑️ .env removed (was empty after cleanup)");
116
+ }
117
+ else {
118
+ writeFileSync(envPath, cleaned.join("\n") + "\n");
119
+ console.log(" 🧹 XERO_ vars removed from .env");
120
+ }
121
+ }
122
+ // ─── Help ────────────────────────────────────────────────────
10
123
  function printHelp() {
11
124
  console.log(`
12
125
  iris-relay — Telegram message relay for developers
13
126
 
14
127
  Commands:
15
128
  iris-relay init Interactive setup wizard
129
+ iris-relay reset Remove iris-relay config from project
130
+ iris-relay doctor Validate config and test connection
16
131
  iris-relay "message" Send a text message
17
132
  iris-relay --file <path> Send a file
18
133
 
@@ -28,64 +143,214 @@ Environment:
28
143
  XERO_DRY_RUN Set to "true" to log instead of send
29
144
  `);
30
145
  }
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";
146
+ // ─── Doctor ──────────────────────────────────────────────────
147
+ async function runDoctor() {
148
+ console.log("\n🩺 iris-relay doctor\n");
149
+ const existing = detectExisting();
150
+ const systemEnv = detectSystemEnv();
151
+ let issues = 0;
152
+ // .env file
153
+ if (existing.hasEnv) {
154
+ console.log(" ✅ .env file found");
155
+ }
156
+ else {
157
+ console.log(" ❌ .env file not found");
158
+ issues++;
159
+ }
160
+ // Bot token
161
+ const botToken = process.env.XERO_BOT_TOKEN;
162
+ if (botToken) {
163
+ if (isValidBotToken(botToken)) {
164
+ console.log(" ✅ XERO_BOT_TOKEN is set and valid format");
165
+ if (systemEnv.botToken)
166
+ console.log(" ℹ️ (loaded from system environment)");
167
+ }
168
+ else {
169
+ console.log(" ⚠️ XERO_BOT_TOKEN is set but format looks invalid");
170
+ console.log(" Expected: <number>:<alphanumeric string>");
171
+ issues++;
172
+ }
173
+ }
174
+ else {
175
+ console.log(" ❌ XERO_BOT_TOKEN is not set");
176
+ issues++;
177
+ }
178
+ // Chat ID
179
+ const chatId = process.env.XERO_CHAT_ID;
180
+ if (chatId) {
181
+ if (isValidChatId(chatId)) {
182
+ console.log(" ✅ XERO_CHAT_ID is set and valid format");
183
+ if (systemEnv.chatId)
184
+ console.log(" ℹ️ (loaded from system environment)");
185
+ }
186
+ else {
187
+ console.log(" ⚠️ XERO_CHAT_ID is set but format looks invalid");
188
+ console.log(" Expected: numeric (negative for groups)");
189
+ issues++;
190
+ }
191
+ }
192
+ else {
193
+ console.log(" ❌ XERO_CHAT_ID is not set");
194
+ issues++;
195
+ }
196
+ // Dry run
197
+ if (process.env.XERO_DRY_RUN === "true" || process.env.XERO_DRY_RUN === "1") {
198
+ console.log(" ⚠️ XERO_DRY_RUN is enabled — messages will be logged, not sent");
199
+ }
200
+ // .gitignore
201
+ const gitignorePath = join(process.cwd(), ".gitignore");
202
+ if (existsSync(gitignorePath)) {
203
+ const gitignore = readFileSync(gitignorePath, "utf-8");
204
+ if (gitignore.includes(".env")) {
205
+ console.log(" ✅ .env is in .gitignore");
206
+ }
207
+ else {
208
+ console.log(" ⚠️ .env is NOT in .gitignore — secrets may be committed!");
209
+ issues++;
210
+ }
211
+ }
212
+ // Generated files
213
+ if (existing.hasStarterFile)
214
+ console.log(` ✅ Starter file: ${existing.starterFileName}`);
215
+ if (existing.hasWorkflow)
216
+ console.log(" ✅ GitHub Actions workflow found");
217
+ // Connection test
218
+ if (botToken && chatId && process.env.XERO_DRY_RUN !== "true") {
219
+ console.log("\n 🧪 Testing connection...");
220
+ try {
221
+ const result = await relay("🩺 iris-relay doctor — connection test");
222
+ if (result.success) {
223
+ console.log(" ✅ Connection works! Message sent to Telegram.");
224
+ }
225
+ else {
226
+ console.log(` ❌ Connection failed: ${result.error}`);
227
+ issues++;
228
+ }
229
+ }
230
+ catch (err) {
231
+ console.log(` ❌ Connection error: ${err instanceof Error ? err.message : String(err)}`);
232
+ issues++;
233
+ }
234
+ }
235
+ console.log(`\n ${issues === 0 ? "🎉 All checks passed!" : `⚠️ ${issues} issue(s) found`}\n`);
236
+ process.exit(issues > 0 ? 1 : 0);
43
237
  }
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;
238
+ // ─── Reset ───────────────────────────────────────────────────
239
+ async function runReset() {
240
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
241
+ const existing = detectExisting();
242
+ console.log("\n🔄 iris-relay reset\n");
243
+ if (!existing.hasBotToken && !existing.hasStarterFile && !existing.hasWorkflow) {
244
+ console.log(" Nothing to reset — iris-relay is not configured in this project.\n");
245
+ rl.close();
246
+ process.exit(0);
247
+ }
248
+ console.log(" This will remove:");
249
+ if (existing.hasBotToken || existing.hasChatId)
250
+ console.log(" XERO_* variables from .env");
251
+ if (existing.hasStarterFile)
252
+ console.log(` ${existing.starterFileName}`);
253
+ if (existing.hasWorkflow)
254
+ console.log(" .github/workflows/iris-notify.yml");
255
+ const confirm = yn(await rl.question("\n Continue? (y/N): "));
256
+ rl.close();
257
+ if (!confirm) {
258
+ console.log("\n Cancelled.\n");
259
+ process.exit(0);
260
+ }
261
+ console.log("");
262
+ // Clean .env
263
+ if (existing.hasBotToken || existing.hasChatId) {
264
+ cleanEnv();
265
+ }
266
+ // Remove starter file
267
+ if (existing.hasStarterFile && existing.starterFileName) {
268
+ unlinkSync(join(process.cwd(), existing.starterFileName));
269
+ console.log(` 🗑️ ${existing.starterFileName} removed`);
270
+ }
271
+ // Remove workflow
272
+ if (existing.hasWorkflow) {
273
+ unlinkSync(join(process.cwd(), ".github", "workflows", "iris-notify.yml"));
274
+ console.log(" 🗑️ .github/workflows/iris-notify.yml removed");
275
+ }
276
+ console.log("\n ✅ Reset complete.\n");
61
277
  }
62
278
  // ─── Interactive Setup ───────────────────────────────────────
63
279
  async function runInit() {
64
280
  const rl = createInterface({ input: process.stdin, output: process.stdout });
65
281
  const pm = detectPackageManager();
66
282
  const framework = detectFramework();
283
+ const existing = detectExisting();
284
+ const systemEnv = detectSystemEnv();
67
285
  console.log(`
68
286
  ╔══════════════════════════════════════════╗
69
287
  ║ 🛰️ iris-relay setup wizard ║
70
288
  ╚══════════════════════════════════════════╝
71
289
  `);
72
290
  if (framework)
73
- console.log(` Detected: ${framework} project (${pm})\n`);
291
+ console.log(` Detected: ${framework} project (${pm})`);
292
+ // ── Check existing config ────────────────────
293
+ if (existing.hasBotToken || existing.hasChatId) {
294
+ console.log("\n ⚠️ iris-relay is already configured in this project.");
295
+ if (existing.hasBotToken)
296
+ console.log(" • XERO_BOT_TOKEN found in .env");
297
+ if (existing.hasChatId)
298
+ console.log(" • XERO_CHAT_ID found in .env");
299
+ if (existing.hasStarterFile)
300
+ console.log(` • ${existing.starterFileName} exists`);
301
+ if (existing.hasWorkflow)
302
+ console.log(" • GitHub Actions workflow exists");
303
+ const proceed = yn(await rl.question("\n Re-initialize? This will override existing config. (y/N): "));
304
+ if (!proceed) {
305
+ console.log("\n Cancelled. Run 'iris-relay doctor' to check your config.\n");
306
+ rl.close();
307
+ process.exit(0);
308
+ }
309
+ console.log("");
310
+ }
311
+ // ── System env detection ─────────────────────
312
+ if (systemEnv.botToken || systemEnv.chatId) {
313
+ console.log(" ℹ️ System-level environment variables detected:");
314
+ if (systemEnv.botToken)
315
+ console.log(" • XERO_BOT_TOKEN is set at system/shell level");
316
+ if (systemEnv.chatId)
317
+ console.log(" • XERO_CHAT_ID is set at system/shell level");
318
+ console.log(" → .env values will take priority over system vars when both exist");
319
+ console.log(" → For production, consider using system env or secrets manager instead of .env\n");
320
+ }
74
321
  // ── Step 1: Credentials ──────────────────────
75
322
  console.log("Step 1 — Telegram Credentials\n");
76
323
  console.log(" Get bot token → https://t.me/BotFather");
77
324
  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);
325
+ let botToken = "";
326
+ while (true) {
327
+ botToken = (await rl.question(" XERO_BOT_TOKEN: ")).trim();
328
+ if (!botToken) {
329
+ console.error(" ❌ Bot token is required.\n");
330
+ continue;
331
+ }
332
+ if (!isValidBotToken(botToken)) {
333
+ console.log(" ⚠️ Token format looks invalid. Expected: <number>:<alphanumeric>");
334
+ const useAnyway = yn(await rl.question(" Use it anyway? (y/N): "));
335
+ if (!useAnyway)
336
+ continue;
337
+ }
338
+ break;
83
339
  }
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);
340
+ let chatId = "";
341
+ while (true) {
342
+ chatId = (await rl.question(" XERO_CHAT_ID: ")).trim();
343
+ if (!chatId) {
344
+ console.error(" ❌ Chat ID is required.\n");
345
+ continue;
346
+ }
347
+ if (!isValidChatId(chatId)) {
348
+ console.log(" ⚠️ Chat ID should be numeric (negative for groups).");
349
+ const useAnyway = yn(await rl.question(" Use it anyway? (y/N): "));
350
+ if (!useAnyway)
351
+ continue;
352
+ }
353
+ break;
89
354
  }
90
355
  // ── Step 2: Features ─────────────────────────
91
356
  console.log("\nStep 2 — Features to enable\n");
@@ -104,21 +369,51 @@ async function runInit() {
104
369
  const enableDryRun = yn(await rl.question(" 🧪 Enable dry run mode for now? (y/N): "));
105
370
  // ── Step 3: Scaffolding ──────────────────────
106
371
  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): "));
372
+ let generateStarter = true;
373
+ if (existing.hasStarterFile) {
374
+ generateStarter = yn(await rl.question(` 📄 Overwrite existing ${existing.starterFileName}? (y/N): `));
375
+ }
376
+ else {
377
+ generateStarter = yn(await rl.question(" 📄 Generate a starter file (iris.ts / iris.js)? (Y/n): ") || "y");
378
+ }
379
+ let generateCI = false;
380
+ if (existing.hasWorkflow) {
381
+ generateCI = yn(await rl.question(" 🚀 Overwrite existing GitHub Actions workflow? (y/N): "));
382
+ }
383
+ else {
384
+ generateCI = yn(await rl.question(" 🚀 Generate GitHub Actions deploy notification? (y/N): "));
385
+ }
109
386
  const generateDocker = yn(await rl.question(" 🐳 Add XERO_ env vars to docker-compose.yml? (y/N): "));
110
387
  rl.close();
388
+ // ── Preview changes ──────────────────────────
389
+ console.log("\n── Changes to apply ──\n");
390
+ const changes = [];
391
+ if (existing.hasBotToken || existing.hasChatId) {
392
+ changes.push(" • Update XERO_* vars in .env (old values will be replaced)");
393
+ }
394
+ else {
395
+ changes.push(" • Add XERO_* vars to .env");
396
+ }
397
+ if (generateStarter)
398
+ changes.push(` • ${existing.hasStarterFile ? "Overwrite" : "Create"} starter file`);
399
+ if (generateCI)
400
+ changes.push(` • ${existing.hasWorkflow ? "Overwrite" : "Create"} GitHub Actions workflow`);
401
+ if (generateDocker)
402
+ changes.push(" • Docker Compose env setup");
403
+ changes.push(" • Ensure .env is in .gitignore");
404
+ changes.forEach((c) => console.log(c));
111
405
  // ── Write .env ───────────────────────────────
112
406
  console.log("\n── Writing files ──\n");
113
407
  const envPath = join(process.cwd(), ".env");
114
408
  let envContent = "";
115
409
  if (existsSync(envPath)) {
116
- const existing = readFileSync(envPath, "utf-8");
117
- envContent = existing
410
+ const existingContent = readFileSync(envPath, "utf-8");
411
+ envContent = existingContent
118
412
  .split("\n")
119
- .filter((line) => !line.startsWith("XERO_BOT_TOKEN=") &&
120
- !line.startsWith("XERO_CHAT_ID=") &&
121
- !line.startsWith("XERO_DRY_RUN="))
413
+ .filter((line) => !line.trim().startsWith("XERO_BOT_TOKEN=") &&
414
+ !line.trim().startsWith("XERO_CHAT_ID=") &&
415
+ !line.trim().startsWith("XERO_DRY_RUN=") &&
416
+ line.trim() !== "# iris-relay config")
122
417
  .join("\n")
123
418
  .trimEnd();
124
419
  if (envContent)
@@ -131,68 +426,47 @@ async function runInit() {
131
426
  envContent += `XERO_DRY_RUN=true\n`;
132
427
  }
133
428
  writeFileSync(envPath, envContent);
134
- console.log(`✅ .env → ${envPath}`);
429
+ console.log(` ✅ .env → ${envPath}`);
135
430
  // ── .gitignore ───────────────────────────────
136
431
  const gitignorePath = join(process.cwd(), ".gitignore");
137
432
  if (existsSync(gitignorePath)) {
138
433
  const gitignore = readFileSync(gitignorePath, "utf-8");
139
434
  if (!gitignore.includes(".env")) {
140
435
  writeFileSync(gitignorePath, gitignore.trimEnd() + "\n.env\n");
141
- console.log("✅ .env added to .gitignore");
436
+ console.log(" ✅ .env added to .gitignore");
142
437
  }
143
438
  }
144
439
  else {
145
440
  writeFileSync(gitignorePath, "node_modules\n.env\n");
146
- console.log("✅ .gitignore created");
441
+ console.log(" ✅ .gitignore created");
147
442
  }
148
443
  // ── Starter file ─────────────────────────────
149
444
  if (generateStarter) {
150
445
  const isTS = existsSync(join(process.cwd(), "tsconfig.json"));
151
446
  const ext = isTS ? "ts" : "js";
152
447
  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`;
448
+ const imp = (mod, names) => isTS ? `import { ${names} } from "${mod}";` : `const { ${names} } = require("${mod}");`;
449
+ let starter = imp("iris-relay", "relay, relayError, relayDeploy") + "\n";
161
450
  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
- }
451
+ starter += `${imp("iris-relay", "watchProcess")}\n`;
168
452
  starter += `\n// Auto-report uncaught exceptions & unhandled rejections\n`;
169
- starter += `watchProcess();\n\n`;
453
+ starter += `watchProcess();\n`;
170
454
  }
171
455
  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
- }
456
+ starter += `${imp("iris-relay", "startHeartbeat")}\n`;
178
457
  starter += `\n// Send periodic heartbeat (every ${heartbeatInterval}s)\n`;
179
458
  starter += `const stopHeartbeat = startHeartbeat({\n`;
180
459
  starter += ` interval: ${heartbeatInterval * 1000},\n`;
181
460
  starter += ` app: "${appName}",\n`;
182
- starter += `});\n\n`;
461
+ starter += `});\n`;
183
462
  }
184
463
  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
- }
464
+ starter += `${imp("iris-relay", "irisMiddleware, irisErrorHandler")}\n`;
191
465
  starter += `\n// Add to your Express app:\n`;
192
466
  starter += `// app.use(irisMiddleware({ slowThreshold: 3000 }));\n`;
193
- starter += `// app.use(irisErrorHandler()); // after all routes\n\n`;
467
+ starter += `// app.use(irisErrorHandler()); // after all routes\n`;
194
468
  }
195
- starter += `// ── Examples ──\n\n`;
469
+ starter += `\n// ── Examples ──\n\n`;
196
470
  starter += `// Send a message\n`;
197
471
  starter += `// await relay("Server started 🚀");\n\n`;
198
472
  starter += `// Report an error\n`;
@@ -200,7 +474,7 @@ async function runInit() {
200
474
  starter += `// Deploy notification (auto-reads git info)\n`;
201
475
  starter += `// await relayDeploy({ app: "${appName || "my-app"}", env: "production" });\n`;
202
476
  writeFileSync(starterPath, starter);
203
- console.log(`✅ iris.${ext} → ${starterPath}`);
477
+ console.log(` ✅ iris.${ext} → ${starterPath}`);
204
478
  }
205
479
  // ── GitHub Actions ───────────────────────────
206
480
  if (generateCI) {
@@ -235,46 +509,40 @@ jobs:
235
509
  `;
236
510
  mkdirSync(workflowDir, { recursive: true });
237
511
  writeFileSync(workflowPath, workflowContent);
238
- console.log(`✅ GitHub Actions → ${workflowPath}`);
239
- console.log(" ⚠️ Add XERO_BOT_TOKEN and XERO_CHAT_ID as repo secrets!");
512
+ console.log(` ✅ GitHub Actions → ${workflowPath}`);
513
+ console.log(" ⚠️ Add XERO_BOT_TOKEN and XERO_CHAT_ID as repo secrets!");
240
514
  }
241
515
  // ── Docker Compose ───────────────────────────
242
516
  if (generateDocker) {
243
517
  const composePath = join(process.cwd(), "docker-compose.yml");
244
518
  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}`);
519
+ const existingContent = readFileSync(composePath, "utf-8");
520
+ if (!existingContent.includes("XERO_BOT_TOKEN")) {
521
+ const envBlock = ` # iris-relay\n environment:\n - XERO_BOT_TOKEN=\${XERO_BOT_TOKEN}\n - XERO_CHAT_ID=\${XERO_CHAT_ID}`;
522
+ console.log(`\n 📋 Add this to your service in docker-compose.yml:\n${envBlock}`);
523
+ }
524
+ else {
525
+ console.log(" ℹ️ XERO_ vars already in docker-compose.yml");
249
526
  }
250
527
  }
251
528
  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
- `;
529
+ const composeContent = `version: "3.8"\n\nservices:\n app:\n build: .\n env_file:\n - .env\n environment:\n - XERO_BOT_TOKEN=\${XERO_BOT_TOKEN}\n - XERO_CHAT_ID=\${XERO_CHAT_ID}\n`;
263
530
  writeFileSync(composePath, composeContent);
264
- console.log(`✅ docker-compose.yml → ${composePath}`);
531
+ console.log(` ✅ docker-compose.yml → ${composePath}`);
265
532
  }
266
533
  }
267
534
  // ── Test connection ──────────────────────────
268
- console.log("\n🧪 Testing connection...");
535
+ console.log("\n── Testing connection ──\n");
269
536
  process.env.XERO_BOT_TOKEN = botToken;
270
537
  process.env.XERO_CHAT_ID = chatId;
271
538
  const result = await relay("✅ iris-relay connected successfully!");
272
539
  if (result.success) {
273
- console.log("✅ Test message sent! Check your Telegram.");
540
+ console.log(" ✅ Test message sent! Check your Telegram.");
274
541
  }
275
542
  else {
276
- console.error(`⚠️ Test failed: ${result.error}`);
277
- console.log(" .env was still saved — double-check your token and chat ID.");
543
+ console.error(` ⚠️ Test failed: ${result.error}`);
544
+ console.log(" Your .env was still saved — double-check your token and chat ID.");
545
+ console.log(" Run 'iris-relay doctor' to diagnose issues.");
278
546
  }
279
547
  // ── Summary ──────────────────────────────────
280
548
  const features = [];
@@ -297,8 +565,10 @@ services:
297
565
  import { relay } from "iris-relay";
298
566
  await relay("Hello from my server! 🚀");
299
567
 
300
- CLI:
301
- npx iris-relay "Quick message"
568
+ Commands:
569
+ iris-relay doctor validate your config
570
+ iris-relay reset remove iris-relay config
571
+ iris-relay "msg" send a quick message
302
572
  `);
303
573
  }
304
574
  // ─── Message / File Sending ──────────────────────────────────
@@ -308,6 +578,14 @@ async function main() {
308
578
  await runInit();
309
579
  return;
310
580
  }
581
+ if (command === "reset") {
582
+ await runReset();
583
+ return;
584
+ }
585
+ if (command === "doctor") {
586
+ await runDoctor();
587
+ return;
588
+ }
311
589
  if (args.length === 0 || args.includes("--help") || args.includes("-h")) {
312
590
  printHelp();
313
591
  process.exit(0);
@@ -326,10 +604,7 @@ async function main() {
326
604
  console.error("Error: --file requires a path argument");
327
605
  process.exit(1);
328
606
  }
329
- const result = await relayFile(filePath, message || undefined, {
330
- silent,
331
- parseMode,
332
- });
607
+ const result = await relayFile(filePath, message || undefined, { silent, parseMode });
333
608
  if (result.success) {
334
609
  console.log(`✅ File sent: ${filePath}`);
335
610
  }
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.4",
3
+ "version": "1.2.1",
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",