#!/usr/bin/env node import { config } from "dotenv"; import * as signalApi from "@link-stack/signal-api"; // Load environment variables config(); const { Configuration, GroupsApi, MessagesApi } = signalApi; async function testSignalGroups() { console.log("Signal Groups Test Script"); console.log("=========================\n"); // Check environment const autoGroupsEnabled = process.env.BRIDGE_SIGNAL_AUTO_GROUPS === "true"; console.log(`Auto-groups enabled: ${autoGroupsEnabled}`); console.log(`Signal API URL: ${process.env.BRIDGE_SIGNAL_URL}\n`); if (!process.env.BRIDGE_SIGNAL_URL) { console.error("Error: BRIDGE_SIGNAL_URL not set"); process.exit(1); } try { const config = new Configuration({ basePath: process.env.BRIDGE_SIGNAL_URL, }); const groupsClient = new GroupsApi(config); const messagesClient = new MessagesApi(config); // List existing groups console.log("Listing existing groups..."); const groups = await groupsClient.v1GroupsNumberGet({ number: process.env.BRIDGE_SIGNAL_BOT_NUMBER, }); console.log(`Found ${groups.length} groups:`); groups.forEach((group, i) => { console.log(` ${i + 1}. ${group.name} (${group.id})`); console.log(` Members: ${group.members?.length || 0}`); }); console.log(); // Test creating a group (if requested via command line) if (process.argv.includes("--create-group")) { const testNumber = process.argv[process.argv.indexOf("--create-group") + 1]; if (!testNumber) { console.error("Error: Please provide a phone number after --create-group"); process.exit(1); } console.log(`Creating test group with ${testNumber}...`); const createResponse = await groupsClient.v1GroupsNumberPost({ number: process.env.BRIDGE_SIGNAL_BOT_NUMBER, data: { name: `Test Support: ${testNumber}`, members: [testNumber], description: "Test private support conversation", }, }); console.log(`Created group: ${createResponse.id}\n`); // Send a test message to the group if (process.argv.includes("--send-message")) { console.log("Sending test message to group..."); await messagesClient.v2SendPost({ data: { number: process.env.BRIDGE_SIGNAL_BOT_NUMBER, recipients: [createResponse.id!], message: "Hello! This is a test message to the new Signal group.", isGroup: true, }, }); console.log("Message sent successfully!\n"); } } // Test the receive flow simulation if (process.argv.includes("--simulate-receive")) { const fromNumber = process.argv[process.argv.indexOf("--simulate-receive") + 1]; if (!fromNumber) { console.error("Error: Please provide a phone number after --simulate-receive"); process.exit(1); } console.log(`Simulating message receive from ${fromNumber}...`); console.log("This would trigger the following in production:"); console.log("1. Message received from individual"); console.log("2. Auto-group creation (if enabled)"); console.log("3. Webhook notification to Zammad with group ID in 'to' field\n"); if (autoGroupsEnabled) { console.log("Since auto-groups is enabled, a new group would be created."); console.log(`Group name would be: Support: ${fromNumber}`); } else { console.log("Auto-groups is disabled, so message would be processed normally."); } } console.log("\nTest script completed successfully!"); } catch (error) { console.error("Error during test:", error); process.exit(1); } } // Show usage if no arguments if (process.argv.length === 2) { console.log("Usage:"); console.log(" List groups: ts-node test-signal-groups.ts"); console.log(" Create group: ts-node test-signal-groups.ts --create-group +1234567890"); console.log(" Create & send: ts-node test-signal-groups.ts --create-group +1234567890 --send-message"); console.log(" Simulate receive: ts-node test-signal-groups.ts --simulate-receive +1234567890"); console.log("\nEnvironment variables:"); console.log(" BRIDGE_SIGNAL_AUTO_GROUPS=true Enable auto-group creation"); console.log(" BRIDGE_SIGNAL_URL=http://... Signal CLI REST API URL"); process.exit(0); } testSignalGroups().catch(console.error);