channelkit 1.0.0
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/LICENSE +21 -0
- package/README.md +829 -0
- package/config.example.yaml +37 -0
- package/dist/api/middleware/auth.d.ts +14 -0
- package/dist/api/middleware/auth.d.ts.map +1 -0
- package/dist/api/middleware/auth.js +130 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/api/routes/config.d.ts +4 -0
- package/dist/api/routes/config.d.ts.map +1 -0
- package/dist/api/routes/config.js +794 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/dashboard.d.ts +4 -0
- package/dist/api/routes/dashboard.d.ts.map +1 -0
- package/dist/api/routes/dashboard.js +89 -0
- package/dist/api/routes/dashboard.js.map +1 -0
- package/dist/api/routes/inbound.d.ts +4 -0
- package/dist/api/routes/inbound.d.ts.map +1 -0
- package/dist/api/routes/inbound.js +293 -0
- package/dist/api/routes/inbound.js.map +1 -0
- package/dist/api/routes/logs.d.ts +4 -0
- package/dist/api/routes/logs.d.ts.map +1 -0
- package/dist/api/routes/logs.js +49 -0
- package/dist/api/routes/logs.js.map +1 -0
- package/dist/api/routes/mcp.d.ts +4 -0
- package/dist/api/routes/mcp.d.ts.map +1 -0
- package/dist/api/routes/mcp.js +100 -0
- package/dist/api/routes/mcp.js.map +1 -0
- package/dist/api/routes/restart.d.ts +4 -0
- package/dist/api/routes/restart.d.ts.map +1 -0
- package/dist/api/routes/restart.js +11 -0
- package/dist/api/routes/restart.js.map +1 -0
- package/dist/api/routes/send.d.ts +4 -0
- package/dist/api/routes/send.d.ts.map +1 -0
- package/dist/api/routes/send.js +66 -0
- package/dist/api/routes/send.js.map +1 -0
- package/dist/api/routes/settings.d.ts +4 -0
- package/dist/api/routes/settings.d.ts.map +1 -0
- package/dist/api/routes/settings.js +133 -0
- package/dist/api/routes/settings.js.map +1 -0
- package/dist/api/routes/tunnel.d.ts +4 -0
- package/dist/api/routes/tunnel.d.ts.map +1 -0
- package/dist/api/routes/tunnel.js +209 -0
- package/dist/api/routes/tunnel.js.map +1 -0
- package/dist/api/routes/twilio.d.ts +4 -0
- package/dist/api/routes/twilio.d.ts.map +1 -0
- package/dist/api/routes/twilio.js +138 -0
- package/dist/api/routes/twilio.js.map +1 -0
- package/dist/api/routes/update.d.ts +4 -0
- package/dist/api/routes/update.d.ts.map +1 -0
- package/dist/api/routes/update.js +42 -0
- package/dist/api/routes/update.js.map +1 -0
- package/dist/api/server.d.ts +52 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +415 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/types.d.ts +61 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +3 -0
- package/dist/api/types.js.map +1 -0
- package/dist/channels/base.d.ts +15 -0
- package/dist/channels/base.d.ts.map +1 -0
- package/dist/channels/base.js +20 -0
- package/dist/channels/base.js.map +1 -0
- package/dist/channels/email/gmail.d.ts +36 -0
- package/dist/channels/email/gmail.d.ts.map +1 -0
- package/dist/channels/email/gmail.js +351 -0
- package/dist/channels/email/gmail.js.map +1 -0
- package/dist/channels/email/index.d.ts +3 -0
- package/dist/channels/email/index.d.ts.map +1 -0
- package/dist/channels/email/index.js +8 -0
- package/dist/channels/email/index.js.map +1 -0
- package/dist/channels/email/resend.d.ts +29 -0
- package/dist/channels/email/resend.d.ts.map +1 -0
- package/dist/channels/email/resend.js +155 -0
- package/dist/channels/email/resend.js.map +1 -0
- package/dist/channels/endpoint/index.d.ts +21 -0
- package/dist/channels/endpoint/index.d.ts.map +1 -0
- package/dist/channels/endpoint/index.js +80 -0
- package/dist/channels/endpoint/index.js.map +1 -0
- package/dist/channels/sms/index.d.ts +37 -0
- package/dist/channels/sms/index.d.ts.map +1 -0
- package/dist/channels/sms/index.js +163 -0
- package/dist/channels/sms/index.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +24 -0
- package/dist/channels/telegram/index.d.ts.map +1 -0
- package/dist/channels/telegram/index.js +231 -0
- package/dist/channels/telegram/index.js.map +1 -0
- package/dist/channels/voice/index.d.ts +62 -0
- package/dist/channels/voice/index.d.ts.map +1 -0
- package/dist/channels/voice/index.js +286 -0
- package/dist/channels/voice/index.js.map +1 -0
- package/dist/channels/whatsapp/index.d.ts +31 -0
- package/dist/channels/whatsapp/index.d.ts.map +1 -0
- package/dist/channels/whatsapp/index.js +383 -0
- package/dist/channels/whatsapp/index.js.map +1 -0
- package/dist/cli/commands/demo.d.ts +4 -0
- package/dist/cli/commands/demo.d.ts.map +1 -0
- package/dist/cli/commands/demo.js +55 -0
- package/dist/cli/commands/demo.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +254 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install-skill.d.ts +4 -0
- package/dist/cli/commands/install-skill.d.ts.map +1 -0
- package/dist/cli/commands/install-skill.js +60 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/send.d.ts +5 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +46 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +129 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/helpers.d.ts +26 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +120 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +282 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/wizards/channel.d.ts +4 -0
- package/dist/cli/wizards/channel.d.ts.map +1 -0
- package/dist/cli/wizards/channel.js +285 -0
- package/dist/cli/wizards/channel.js.map +1 -0
- package/dist/cli/wizards/provision.d.ts +4 -0
- package/dist/cli/wizards/provision.d.ts.map +1 -0
- package/dist/cli/wizards/provision.js +213 -0
- package/dist/cli/wizards/provision.js.map +1 -0
- package/dist/cli/wizards/service.d.ts +5 -0
- package/dist/cli/wizards/service.d.ts.map +1 -0
- package/dist/cli/wizards/service.js +212 -0
- package/dist/cli/wizards/service.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/parser.d.ts +6 -0
- package/dist/config/parser.d.ts.map +1 -0
- package/dist/config/parser.js +37 -0
- package/dist/config/parser.js.map +1 -0
- package/dist/config/types.d.ts +170 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/apiServer.d.ts +2 -0
- package/dist/core/apiServer.d.ts.map +1 -0
- package/dist/core/apiServer.js +7 -0
- package/dist/core/apiServer.js.map +1 -0
- package/dist/core/groupStore.d.ts +19 -0
- package/dist/core/groupStore.d.ts.map +1 -0
- package/dist/core/groupStore.js +48 -0
- package/dist/core/groupStore.js.map +1 -0
- package/dist/core/logger.d.ts +42 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +142 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/messageHandler.d.ts +15 -0
- package/dist/core/messageHandler.d.ts.map +1 -0
- package/dist/core/messageHandler.js +309 -0
- package/dist/core/messageHandler.js.map +1 -0
- package/dist/core/restart.d.ts +3 -0
- package/dist/core/restart.d.ts.map +1 -0
- package/dist/core/restart.js +35 -0
- package/dist/core/restart.js.map +1 -0
- package/dist/core/router.d.ts +56 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +168 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/tunnel.d.ts +16 -0
- package/dist/core/tunnel.d.ts.map +1 -0
- package/dist/core/tunnel.js +99 -0
- package/dist/core/tunnel.js.map +1 -0
- package/dist/core/types.d.ts +54 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/updater.d.ts +44 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +264 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/webhook.d.ts +26 -0
- package/dist/core/webhook.d.ts.map +1 -0
- package/dist/core/webhook.js +224 -0
- package/dist/core/webhook.js.map +1 -0
- package/dist/dashboard/assets/browser-D_-rzKir.js +8 -0
- package/dist/dashboard/assets/index-CNa084vI.js +88 -0
- package/dist/dashboard/assets/index-CRvIEyjF.css +1 -0
- package/dist/dashboard/index.html +17 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +551 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +45 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +197 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +16 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +502 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/media/formatter.d.ts +12 -0
- package/dist/media/formatter.d.ts.map +1 -0
- package/dist/media/formatter.js +147 -0
- package/dist/media/formatter.js.map +1 -0
- package/dist/media/processor.d.ts +33 -0
- package/dist/media/processor.d.ts.map +1 -0
- package/dist/media/processor.js +145 -0
- package/dist/media/processor.js.map +1 -0
- package/dist/media/stt.d.ts +16 -0
- package/dist/media/stt.d.ts.map +1 -0
- package/dist/media/stt.js +298 -0
- package/dist/media/stt.js.map +1 -0
- package/dist/media/tts.d.ts +19 -0
- package/dist/media/tts.d.ts.map +1 -0
- package/dist/media/tts.js +135 -0
- package/dist/media/tts.js.map +1 -0
- package/dist/onboarding/index.d.ts +28 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +144 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +14 -0
- package/dist/paths.js.map +1 -0
- package/dist/provisioning/twilio.d.ts +51 -0
- package/dist/provisioning/twilio.d.ts.map +1 -0
- package/dist/provisioning/twilio.js +175 -0
- package/dist/provisioning/twilio.js.map +1 -0
- package/echo-server.js +163 -0
- package/package.json +79 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.initCommand = initCommand;
|
|
37
|
+
const path_1 = require("path");
|
|
38
|
+
const fs_1 = require("fs");
|
|
39
|
+
const readline_1 = require("readline");
|
|
40
|
+
const helpers_1 = require("../helpers");
|
|
41
|
+
const service_1 = require("../wizards/service");
|
|
42
|
+
const start_1 = require("./start");
|
|
43
|
+
const paths_1 = require("../../paths");
|
|
44
|
+
async function initCommand() {
|
|
45
|
+
(0, helpers_1.banner)();
|
|
46
|
+
console.log((0, helpers_1.c)('bright', ' Welcome to ChannelKit! Let\'s get you set up.\n'));
|
|
47
|
+
const rl = (0, readline_1.createInterface)({
|
|
48
|
+
input: process.stdin,
|
|
49
|
+
output: process.stdout,
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
const channelIdx = await (0, helpers_1.select)(rl, 'Which channel do you want to connect?', [
|
|
53
|
+
'📱 WhatsApp — connect with your phone number',
|
|
54
|
+
'💬 Telegram — create a bot',
|
|
55
|
+
'📧 Email — Gmail or Resend',
|
|
56
|
+
'📲 SMS — Twilio',
|
|
57
|
+
'📞 Voice — Twilio',
|
|
58
|
+
]);
|
|
59
|
+
const channels = {};
|
|
60
|
+
const services = {};
|
|
61
|
+
let channelName = '';
|
|
62
|
+
if (channelIdx === 0) {
|
|
63
|
+
console.log();
|
|
64
|
+
const number = await (0, helpers_1.ask)(rl, 'Your WhatsApp phone number (with country code):', '+972...');
|
|
65
|
+
channelName = 'whatsapp';
|
|
66
|
+
channels[channelName] = { type: 'whatsapp', number };
|
|
67
|
+
}
|
|
68
|
+
else if (channelIdx === 1) {
|
|
69
|
+
console.log();
|
|
70
|
+
console.log((0, helpers_1.c)('bright', ' 📝 Quick setup — takes 30 seconds:\n'));
|
|
71
|
+
console.log((0, helpers_1.c)('white', ' 1.') + (0, helpers_1.c)('dim', ' Open Telegram and search for ') + (0, helpers_1.c)('cyan', '@BotFather'));
|
|
72
|
+
console.log((0, helpers_1.c)('white', ' 2.') + (0, helpers_1.c)('dim', ' Send ') + (0, helpers_1.c)('cyan', '/newbot'));
|
|
73
|
+
console.log((0, helpers_1.c)('white', ' 3.') + (0, helpers_1.c)('dim', ' Choose a name (e.g. "My Service Bot")'));
|
|
74
|
+
console.log((0, helpers_1.c)('white', ' 4.') + (0, helpers_1.c)('dim', ' Choose a username (e.g. "myservice_bot")'));
|
|
75
|
+
console.log((0, helpers_1.c)('white', ' 5.') + (0, helpers_1.c)('dim', ' Copy the token BotFather gives you\n'));
|
|
76
|
+
const openLink = await (0, helpers_1.ask)(rl, 'Open BotFather in browser? (Y/n):', 'Y');
|
|
77
|
+
if (openLink.toLowerCase() !== 'n') {
|
|
78
|
+
const { exec: execCmd } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
79
|
+
execCmd('open "https://t.me/BotFather" 2>/dev/null || xdg-open "https://t.me/BotFather" 2>/dev/null');
|
|
80
|
+
}
|
|
81
|
+
console.log();
|
|
82
|
+
const token = await (0, helpers_1.ask)(rl, 'Paste the bot token here:');
|
|
83
|
+
if (!token || !token.includes(':')) {
|
|
84
|
+
console.log((0, helpers_1.c)('yellow', '\n ⚠️ That doesn\'t look like a valid token. It should look like: 123456:ABC-DEF...\n'));
|
|
85
|
+
rl.close();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
console.log((0, helpers_1.c)('dim', '\n Verifying token...'));
|
|
89
|
+
try {
|
|
90
|
+
const res = await fetch(`https://api.telegram.org/bot${token}/getMe`);
|
|
91
|
+
const data = await res.json();
|
|
92
|
+
if (data.ok) {
|
|
93
|
+
console.log((0, helpers_1.c)('green', ` ✅ Connected to @${data.result.username} (${data.result.first_name})\n`));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log((0, helpers_1.c)('yellow', `\n ❌ Invalid token: ${data.description}\n`));
|
|
97
|
+
rl.close();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
console.log((0, helpers_1.c)('yellow', '\n ⚠️ Could not verify token (no internet?). Continuing anyway.\n'));
|
|
103
|
+
}
|
|
104
|
+
channelName = 'telegram';
|
|
105
|
+
channels[channelName] = { type: 'telegram', bot_token: token };
|
|
106
|
+
}
|
|
107
|
+
else if (channelIdx === 2) {
|
|
108
|
+
console.log();
|
|
109
|
+
const emailProviderIdx = await (0, helpers_1.select)(rl, 'Which email provider?', [
|
|
110
|
+
'📧 Gmail — OAuth2, polling (no public URL needed)',
|
|
111
|
+
'📨 Resend — API + inbound webhooks (needs public URL)',
|
|
112
|
+
]);
|
|
113
|
+
if (emailProviderIdx === 0) {
|
|
114
|
+
console.log((0, helpers_1.c)('bright', '\n 📝 Gmail OAuth Setup:\n'));
|
|
115
|
+
console.log((0, helpers_1.c)('dim', ' You need a Google Cloud project with Gmail API enabled.'));
|
|
116
|
+
console.log((0, helpers_1.c)('dim', ' Create OAuth2 credentials (Desktop app) at:'));
|
|
117
|
+
console.log((0, helpers_1.c)('cyan', ' https://console.cloud.google.com/apis/credentials\n'));
|
|
118
|
+
const clientId = await (0, helpers_1.ask)(rl, 'OAuth Client ID:');
|
|
119
|
+
const clientSecret = await (0, helpers_1.ask)(rl, 'OAuth Client Secret:');
|
|
120
|
+
const pollInterval = await (0, helpers_1.ask)(rl, 'Poll interval (seconds):', '30');
|
|
121
|
+
channelName = 'gmail';
|
|
122
|
+
channels[channelName] = { type: 'email', provider: 'gmail', client_id: clientId, client_secret: clientSecret, poll_interval: parseInt(pollInterval) || 30 };
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log((0, helpers_1.c)('bright', '\n 📝 Resend Setup:\n'));
|
|
126
|
+
console.log((0, helpers_1.c)('dim', ' You need a Resend account with a verified domain.'));
|
|
127
|
+
console.log((0, helpers_1.c)('dim', ' Get your API key at: https://resend.com/api-keys\n'));
|
|
128
|
+
const apiKey = await (0, helpers_1.ask)(rl, 'Resend API Key:');
|
|
129
|
+
const fromEmail = await (0, helpers_1.ask)(rl, 'Sender email (verified domain):', 'noreply@yourdomain.com');
|
|
130
|
+
channelName = 'resend';
|
|
131
|
+
channels[channelName] = { type: 'email', provider: 'resend', api_key: apiKey, from_email: fromEmail };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (channelIdx === 3) {
|
|
135
|
+
console.log((0, helpers_1.c)('bright', '\n 📝 Twilio SMS Setup:\n'));
|
|
136
|
+
console.log((0, helpers_1.c)('dim', ' You need a Twilio account with a phone number.'));
|
|
137
|
+
console.log((0, helpers_1.c)('dim', ' Get credentials at: https://console.twilio.com\n'));
|
|
138
|
+
const accountSid = await (0, helpers_1.ask)(rl, 'Account SID:');
|
|
139
|
+
const authToken = await (0, helpers_1.ask)(rl, 'Auth Token:');
|
|
140
|
+
const number = await (0, helpers_1.ask)(rl, 'Twilio phone number (e.g. +12025551234):');
|
|
141
|
+
const pollInterval = await (0, helpers_1.ask)(rl, 'Poll interval in seconds (0 = webhook mode):', '10');
|
|
142
|
+
channelName = 'sms';
|
|
143
|
+
channels[channelName] = {
|
|
144
|
+
type: 'sms', provider: 'twilio', account_sid: accountSid, auth_token: authToken, number,
|
|
145
|
+
...(parseInt(pollInterval) > 0 ? { poll_interval: parseInt(pollInterval) } : {}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
else if (channelIdx === 4) {
|
|
149
|
+
console.log((0, helpers_1.c)('bright', '\n 📝 Twilio Voice Setup:\n'));
|
|
150
|
+
console.log((0, helpers_1.c)('dim', ' Same Twilio account as SMS — uses a phone number for voice calls.\n'));
|
|
151
|
+
const existingSms = Object.values(channels).find((ch) => ch.type === 'sms' && ch.provider === 'twilio');
|
|
152
|
+
let accountSid;
|
|
153
|
+
let authToken;
|
|
154
|
+
if (existingSms) {
|
|
155
|
+
const reuse = await (0, helpers_1.ask)(rl, `Reuse Twilio credentials from SMS channel? (Y/n):`, 'Y');
|
|
156
|
+
if (reuse.toLowerCase() !== 'n') {
|
|
157
|
+
accountSid = existingSms.account_sid;
|
|
158
|
+
authToken = existingSms.auth_token;
|
|
159
|
+
console.log((0, helpers_1.c)('dim', ' Using existing Twilio credentials.\n'));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
accountSid = await (0, helpers_1.ask)(rl, 'Account SID:');
|
|
163
|
+
authToken = await (0, helpers_1.ask)(rl, 'Auth Token:');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
accountSid = await (0, helpers_1.ask)(rl, 'Account SID:');
|
|
168
|
+
authToken = await (0, helpers_1.ask)(rl, 'Auth Token:');
|
|
169
|
+
}
|
|
170
|
+
const number = await (0, helpers_1.ask)(rl, 'Twilio phone number (e.g. +12025551234):');
|
|
171
|
+
channelName = 'voice';
|
|
172
|
+
channels[channelName] = { type: 'voice', provider: 'twilio', account_sid: accountSid, auth_token: authToken, number };
|
|
173
|
+
console.log((0, helpers_1.c)('yellow', '\n ⚠️ Voice requires a public URL. Use --tunnel or --public-url when starting.\n'));
|
|
174
|
+
}
|
|
175
|
+
console.log();
|
|
176
|
+
const configPath = await (0, helpers_1.ask)(rl, 'Config file path:', paths_1.DEFAULT_CONFIG_PATH);
|
|
177
|
+
let yaml = `# ChannelKit Configuration\n# Generated by channelkit init\n\nchannels:\n`;
|
|
178
|
+
for (const [name, cfg] of Object.entries(channels)) {
|
|
179
|
+
yaml += ` ${name}:\n`;
|
|
180
|
+
for (const [key, value] of Object.entries(cfg)) {
|
|
181
|
+
yaml += ` ${key}: "${value}"\n`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (Object.keys(services).length > 0) {
|
|
185
|
+
yaml += `\nservices:\n`;
|
|
186
|
+
for (const [name, svc] of Object.entries(services)) {
|
|
187
|
+
yaml += ` ${name}:\n`;
|
|
188
|
+
yaml += ` channel: "${svc.channel}"\n`;
|
|
189
|
+
yaml += ` webhook: "${svc.webhook}"\n`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
yaml += `\nservices: {}\n`;
|
|
194
|
+
}
|
|
195
|
+
const fullPath = (0, path_1.resolve)(configPath);
|
|
196
|
+
if ((0, fs_1.existsSync)(fullPath)) {
|
|
197
|
+
const overwrite = await (0, helpers_1.ask)(rl, `${configPath} already exists. Overwrite? (y/N):`, 'N');
|
|
198
|
+
if (overwrite.toLowerCase() !== 'y') {
|
|
199
|
+
console.log((0, helpers_1.c)('yellow', '\n Aborted. Config not written.\n'));
|
|
200
|
+
rl.close();
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const configDir = (0, path_1.dirname)(fullPath);
|
|
205
|
+
if (!(0, fs_1.existsSync)(configDir))
|
|
206
|
+
(0, fs_1.mkdirSync)(configDir, { recursive: true });
|
|
207
|
+
(0, fs_1.writeFileSync)(fullPath, yaml);
|
|
208
|
+
if (!(0, fs_1.existsSync)(paths_1.DEFAULT_AUTH_DIR)) {
|
|
209
|
+
(0, fs_1.mkdirSync)(paths_1.DEFAULT_AUTH_DIR, { recursive: true });
|
|
210
|
+
}
|
|
211
|
+
console.log();
|
|
212
|
+
console.log((0, helpers_1.c)('green', ' ╔═══════════════════════════════════════╗'));
|
|
213
|
+
console.log((0, helpers_1.c)('green', ' ║ ║'));
|
|
214
|
+
console.log((0, helpers_1.c)('green', ' ║ ✅ Config created successfully! ║'));
|
|
215
|
+
console.log((0, helpers_1.c)('green', ' ║ ║'));
|
|
216
|
+
console.log((0, helpers_1.c)('green', ' ╚═══════════════════════════════════════╝'));
|
|
217
|
+
console.log();
|
|
218
|
+
console.log((0, helpers_1.c)('white', ' Next steps:\n'));
|
|
219
|
+
console.log((0, helpers_1.c)('dim', ' 1. Set up a service (webhook binding)'));
|
|
220
|
+
console.log((0, helpers_1.c)('dim', ' 2. Start ChannelKit:\n'));
|
|
221
|
+
console.log((0, helpers_1.c)('cyan', ' npm start'));
|
|
222
|
+
console.log();
|
|
223
|
+
if (channels['whatsapp']) {
|
|
224
|
+
console.log((0, helpers_1.c)('bright', ' Let\'s connect your WhatsApp now. Scan the QR code:\n'));
|
|
225
|
+
console.log((0, helpers_1.c)('dim', ' Open WhatsApp → Settings → Linked Devices → Link a Device\n'));
|
|
226
|
+
try {
|
|
227
|
+
const { WhatsAppChannel } = await Promise.resolve().then(() => __importStar(require('../../channels/whatsapp')));
|
|
228
|
+
const authPath = (0, path_1.join)(paths_1.DEFAULT_AUTH_DIR, `whatsapp-whatsapp`);
|
|
229
|
+
await WhatsAppChannel.pair(authPath);
|
|
230
|
+
console.log((0, helpers_1.c)('green', '\n ✅ WhatsApp connected!\n'));
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
console.log((0, helpers_1.c)('yellow', `\n ⚠️ Pairing failed: ${err.message}`));
|
|
234
|
+
console.log((0, helpers_1.c)('dim', ' You can scan the QR code later when you start ChannelKit.\n'));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const setupServiceNow = await (0, helpers_1.ask)(rl, 'Set up a service now? (Y/n):', 'Y');
|
|
238
|
+
if (setupServiceNow.toLowerCase() !== 'n') {
|
|
239
|
+
console.log();
|
|
240
|
+
await (0, service_1.serviceAddWizard)({ config: fullPath }, rl);
|
|
241
|
+
}
|
|
242
|
+
const startNow = await (0, helpers_1.ask)(rl, 'Start ChannelKit now? (Y/n):', 'Y');
|
|
243
|
+
rl.close();
|
|
244
|
+
if (startNow.toLowerCase() !== 'n') {
|
|
245
|
+
console.log();
|
|
246
|
+
await (0, start_1.startCommand)(fullPath);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
rl.close();
|
|
251
|
+
throw err;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install-skill.ts"],"names":[],"mappings":"AAaA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,QAoD5D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installSkillCommand = installSkillCommand;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const os_1 = require("os");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const helpers_1 = require("../helpers");
|
|
8
|
+
const CLAUDE_MD_SNIPPET = `## ChannelKit
|
|
9
|
+
|
|
10
|
+
When working with WhatsApp, SMS, Voice, Telegram, or Email messaging:
|
|
11
|
+
- **ChannelKit has built-in TTS/STT.** Never install TTS or STT packages in the app. Configure TTS on the ChannelKit service — the app just returns \`{ "text": "..." }\` and ChannelKit converts it to audio automatically.
|
|
12
|
+
- **Use ChannelKit MCP tools** (get_status, send_message, add_channel, etc.) — not curl. If MCP tools are not available, ask the user to connect: \`claude mcp add --transport http channelkit http://localhost:4000/mcp\`
|
|
13
|
+
- **Do not install ChannelKit** unless the user explicitly asks — it's likely already running.
|
|
14
|
+
- Run \`/channelkit\` to load the full ChannelKit skill with detailed integration docs, MCP tool reference, and setup patterns.`;
|
|
15
|
+
function installSkillCommand(opts) {
|
|
16
|
+
// From dist/cli/commands/ → go up 3 levels to package root
|
|
17
|
+
const packageRoot = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(__dirname)));
|
|
18
|
+
const skillSource = (0, path_1.join)(packageRoot, 'SKILL.md');
|
|
19
|
+
if (!(0, fs_1.existsSync)(skillSource)) {
|
|
20
|
+
console.error((0, helpers_1.c)('yellow', '\n ❌ SKILL.md not found in ChannelKit package.\n'));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
// --print mode: output SKILL.md to stdout (for remote machines / piping)
|
|
24
|
+
if (opts.print) {
|
|
25
|
+
process.stdout.write((0, fs_1.readFileSync)(skillSource, 'utf-8'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Check if Claude Code is installed on this machine
|
|
29
|
+
const claudeDir = (0, path_1.join)((0, os_1.homedir)(), '.claude');
|
|
30
|
+
if (!(0, fs_1.existsSync)(claudeDir)) {
|
|
31
|
+
console.log((0, helpers_1.c)('yellow', '\n ⚠️ Claude Code does not appear to be installed on this machine.'));
|
|
32
|
+
console.log((0, helpers_1.c)('dim', ' (~/.claude directory not found)\n'));
|
|
33
|
+
console.log((0, helpers_1.c)('bright', ' If ChannelKit runs on a different machine than Claude Code,'));
|
|
34
|
+
console.log((0, helpers_1.c)('bright', ' use --print to output the skill and copy it to your dev machine:\n'));
|
|
35
|
+
console.log((0, helpers_1.c)('cyan', ' channelkit install-skill --print > channelkit-skill.md'));
|
|
36
|
+
console.log((0, helpers_1.c)('dim', ' Then copy channelkit-skill.md to ~/.claude/skills/channelkit/SKILL.md on your dev machine.\n'));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
// Install the skill file
|
|
40
|
+
const skillDir = (0, path_1.join)(claudeDir, 'skills', 'channelkit');
|
|
41
|
+
const skillDest = (0, path_1.join)(skillDir, 'SKILL.md');
|
|
42
|
+
(0, fs_1.mkdirSync)(skillDir, { recursive: true });
|
|
43
|
+
(0, fs_1.copyFileSync)(skillSource, skillDest);
|
|
44
|
+
console.log((0, helpers_1.c)('green', '\n ✅ ChannelKit skill installed to ~/.claude/skills/channelkit/SKILL.md'));
|
|
45
|
+
console.log((0, helpers_1.c)('dim', ' Use /channelkit in Claude Code to load the full integration guide.\n'));
|
|
46
|
+
// Show CLAUDE.md snippet for the user to add manually
|
|
47
|
+
const claudeMdPath = (0, path_1.join)(claudeDir, 'CLAUDE.md');
|
|
48
|
+
const alreadyHas = (0, fs_1.existsSync)(claudeMdPath) && (0, fs_1.readFileSync)(claudeMdPath, 'utf-8').includes('## ChannelKit');
|
|
49
|
+
if (!alreadyHas) {
|
|
50
|
+
console.log((0, helpers_1.c)('bright', ' 📋 For best results, add this to your ~/.claude/CLAUDE.md:\n'));
|
|
51
|
+
console.log((0, helpers_1.c)('dim', ' ────────────────────────────────────────────'));
|
|
52
|
+
for (const line of CLAUDE_MD_SNIPPET.split('\n')) {
|
|
53
|
+
console.log((0, helpers_1.c)('dim', ` ${line}`));
|
|
54
|
+
}
|
|
55
|
+
console.log((0, helpers_1.c)('dim', ' ────────────────────────────────────────────\n'));
|
|
56
|
+
console.log((0, helpers_1.c)('bright', ' This ensures Claude Code always knows about ChannelKit\'s built-in features.'));
|
|
57
|
+
console.log((0, helpers_1.c)('dim', ' Without it, Claude may try to install TTS/STT packages in your app.\n'));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=install-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../../src/cli/commands/install-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,iBAoC7H"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendCommand = sendCommand;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const parser_1 = require("../../config/parser");
|
|
7
|
+
const helpers_1 = require("../helpers");
|
|
8
|
+
async function sendCommand(channelName, number, message, opts) {
|
|
9
|
+
const jid = number.replace(/[^0-9]/g, '') + '@s.whatsapp.net';
|
|
10
|
+
const port = parseInt(opts.port, 10);
|
|
11
|
+
const baseUrl = `http://localhost:${port}`;
|
|
12
|
+
const url = `${baseUrl}/api/send/${encodeURIComponent(channelName)}/${encodeURIComponent(jid)}`;
|
|
13
|
+
const configPath = (0, path_1.resolve)(opts.config);
|
|
14
|
+
let secret;
|
|
15
|
+
if ((0, fs_1.existsSync)(configPath)) {
|
|
16
|
+
try {
|
|
17
|
+
const config = (0, parser_1.loadConfig)(configPath, { validate: false });
|
|
18
|
+
secret = config.api_secret;
|
|
19
|
+
}
|
|
20
|
+
catch { }
|
|
21
|
+
}
|
|
22
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
23
|
+
if (secret)
|
|
24
|
+
headers['Authorization'] = `Bearer ${secret}`;
|
|
25
|
+
try {
|
|
26
|
+
const res = await fetch(url, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers,
|
|
29
|
+
body: JSON.stringify({ text: message }),
|
|
30
|
+
});
|
|
31
|
+
const data = await res.json();
|
|
32
|
+
if (res.ok) {
|
|
33
|
+
console.log((0, helpers_1.c)('green', ` ✅ Message sent to ${number} via ${channelName}`));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.error((0, helpers_1.c)('yellow', ` ❌ ${data.error || 'Failed to send'}`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
console.error((0, helpers_1.c)('yellow', ` ❌ Could not connect to ChannelKit at ${baseUrl}`));
|
|
42
|
+
console.error((0, helpers_1.c)('dim', ` Make sure ChannelKit is running (channelkit start)`));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":";;AAKA,kCAoCC;AAzCD,+BAA+B;AAC/B,2BAAgC;AAChC,gDAAiD;AACjD,wCAA+B;AAExB,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,MAAc,EAAE,OAAe,EAAE,IAAsC;IAC5H,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,GAAG,OAAO,aAAa,kBAAkB,CAAC,WAAW,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAEhG,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,MAA0B,CAAC;IAC/B,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,IAAI,MAAM;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QACrC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,IAAA,WAAC,EAAC,OAAO,EAAE,uBAAuB,MAAM,QAAQ,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,IAAA,WAAC,EAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,IAAA,WAAC,EAAC,QAAQ,EAAE,0CAA0C,OAAO,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,IAAA,WAAC,EAAC,KAAK,EAAE,sDAAsD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAUA,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,iBA6FzG"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.startCommand = startCommand;
|
|
37
|
+
const path_1 = require("path");
|
|
38
|
+
const fs_1 = require("fs");
|
|
39
|
+
const crypto_1 = require("crypto");
|
|
40
|
+
const readline_1 = require("readline");
|
|
41
|
+
const parser_1 = require("../../config/parser");
|
|
42
|
+
const index_1 = require("../../index");
|
|
43
|
+
const helpers_1 = require("../helpers");
|
|
44
|
+
const init_1 = require("./init");
|
|
45
|
+
const paths_1 = require("../../paths");
|
|
46
|
+
async function startCommand(configPath, opts = {}) {
|
|
47
|
+
(0, helpers_1.banner)();
|
|
48
|
+
if (!(0, fs_1.existsSync)(configPath)) {
|
|
49
|
+
console.log((0, helpers_1.c)('dim', ` No config found at ${configPath}\n`));
|
|
50
|
+
console.log((0, helpers_1.c)('bright', ' First time? Let\'s set things up!\n'));
|
|
51
|
+
const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
52
|
+
const setupIdx = await (0, helpers_1.select)(rl, 'How would you like to configure ChannelKit?', [
|
|
53
|
+
'🖥️ Dashboard — configure everything in the browser',
|
|
54
|
+
'⌨️ CLI wizard — step-by-step setup in the terminal',
|
|
55
|
+
]);
|
|
56
|
+
rl.close();
|
|
57
|
+
if (setupIdx === 1) {
|
|
58
|
+
await (0, init_1.initCommand)();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Dashboard mode: create minimal config and start
|
|
62
|
+
const secret = (0, crypto_1.randomBytes)(32).toString('base64url');
|
|
63
|
+
const yaml = `# ChannelKit Configuration\n# Generated by channelkit\n\napi_secret: "${secret}"\n\nchannels: {}\n\nservices: {}\n`;
|
|
64
|
+
const configDir = (0, path_1.dirname)(configPath);
|
|
65
|
+
if (!(0, fs_1.existsSync)(configDir))
|
|
66
|
+
(0, fs_1.mkdirSync)(configDir, { recursive: true });
|
|
67
|
+
if (!(0, fs_1.existsSync)(paths_1.DEFAULT_AUTH_DIR))
|
|
68
|
+
(0, fs_1.mkdirSync)(paths_1.DEFAULT_AUTH_DIR, { recursive: true });
|
|
69
|
+
(0, fs_1.writeFileSync)(configPath, yaml);
|
|
70
|
+
console.log((0, helpers_1.c)('green', '\n ✅ Config created at ' + configPath + '\n'));
|
|
71
|
+
console.log((0, helpers_1.c)('bright', ' 🔐 Your dashboard secret:\n'));
|
|
72
|
+
console.log((0, helpers_1.c)('cyan', ` ${secret}\n`));
|
|
73
|
+
console.log((0, helpers_1.c)('dim', ' Copy this secret — you\'ll need it to log in to the dashboard.\n'));
|
|
74
|
+
}
|
|
75
|
+
console.log((0, helpers_1.c)('dim', ` Loading config from ${configPath}\n`));
|
|
76
|
+
let config;
|
|
77
|
+
try {
|
|
78
|
+
config = (0, parser_1.loadConfig)(configPath, { validate: false });
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.error((0, helpers_1.c)('yellow', ` ❌ Failed to load config: ${err.message}`));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
if (!config.channels)
|
|
85
|
+
config.channels = {};
|
|
86
|
+
if (!config.services)
|
|
87
|
+
config.services = {};
|
|
88
|
+
if (opts.tunnel) {
|
|
89
|
+
config.tunnel = { ...config.tunnel, provider: 'cloudflared' };
|
|
90
|
+
}
|
|
91
|
+
if (opts.publicUrl) {
|
|
92
|
+
config.tunnel = { ...config.tunnel, public_url: opts.publicUrl };
|
|
93
|
+
}
|
|
94
|
+
const channelCount = Object.keys(config.channels).length;
|
|
95
|
+
const serviceCount = Object.keys(config.services || {}).length;
|
|
96
|
+
const routeCount = (config.routes || []).length;
|
|
97
|
+
const totalBindings = serviceCount + routeCount;
|
|
98
|
+
console.log((0, helpers_1.c)('dim', ` ${channelCount} channel(s), ${totalBindings} service(s) configured\n`));
|
|
99
|
+
const port = config.apiPort || 4000;
|
|
100
|
+
if (config.tunnel) {
|
|
101
|
+
if (config.tunnel.public_url) {
|
|
102
|
+
console.log((0, helpers_1.c)('magenta', ` 📡 Using public URL: ${config.tunnel.public_url}\n`));
|
|
103
|
+
}
|
|
104
|
+
else if (config.tunnel.provider === 'cloudflared') {
|
|
105
|
+
console.log((0, helpers_1.c)('blue', ` 💡 Your API port is ${port}. Point your tunnel to http://localhost:${port}\n`));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const kit = new index_1.ChannelKit(config, configPath);
|
|
109
|
+
process.on('SIGINT', () => {
|
|
110
|
+
console.log((0, helpers_1.c)('yellow', '\n Shutting down...'));
|
|
111
|
+
kit.stop().finally(() => {
|
|
112
|
+
console.log((0, helpers_1.c)('green', ' Done. Bye! 👋\n'));
|
|
113
|
+
process.exit(0);
|
|
114
|
+
});
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
console.log((0, helpers_1.c)('dim', ' Force exit.'));
|
|
117
|
+
process.exit(0);
|
|
118
|
+
}, 3000);
|
|
119
|
+
});
|
|
120
|
+
await kit.start();
|
|
121
|
+
// Open the dashboard in the default browser
|
|
122
|
+
const dashboardUrl = `http://localhost:${port}/dashboard`;
|
|
123
|
+
const { exec: execCmd } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
124
|
+
execCmd(`open "${dashboardUrl}" 2>/dev/null || xdg-open "${dashboardUrl}" 2>/dev/null || start "${dashboardUrl}" 2>/dev/null`);
|
|
125
|
+
console.log();
|
|
126
|
+
console.log((0, helpers_1.c)('green', ' 🚀 ChannelKit is running!\n'));
|
|
127
|
+
console.log((0, helpers_1.c)('dim', ' Press Ctrl+C to stop\n'));
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createInterface } from 'readline';
|
|
2
|
+
export declare const LOGO = "\n \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n \u2551 \u2551\n \u2551 \uD83D\uDCF1 \u2500\u2500\u2510 \u2551\n \u2551 \uD83D\uDCAC \u2500\u2500\u2524\u2500\u2500\u2192 ChannelKit \u2500\u2500\u2192 \uD83D\uDD17 App \u2551\n \u2551 \uD83D\uDCDE \u2500\u2500\u2518 \u2551\n \u2551 \u2551\n \u2551 Messaging ingress for your app \u2551\n \u2551 \u2551\n \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n";
|
|
3
|
+
export declare const COLORS: {
|
|
4
|
+
reset: string;
|
|
5
|
+
bright: string;
|
|
6
|
+
dim: string;
|
|
7
|
+
cyan: string;
|
|
8
|
+
green: string;
|
|
9
|
+
yellow: string;
|
|
10
|
+
magenta: string;
|
|
11
|
+
blue: string;
|
|
12
|
+
white: string;
|
|
13
|
+
gray: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function c(color: keyof typeof COLORS, text: string): string;
|
|
16
|
+
export declare function banner(): void;
|
|
17
|
+
export declare function ask(rl: ReturnType<typeof createInterface>, question: string, defaultVal?: string): Promise<string>;
|
|
18
|
+
export declare function select(rl: ReturnType<typeof createInterface>, question: string, options: string[]): Promise<number>;
|
|
19
|
+
export declare const API_KEY_INFO: Record<string, {
|
|
20
|
+
envVar: string;
|
|
21
|
+
hint: string;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function readEnvFile(envPath: string): Record<string, string>;
|
|
24
|
+
export declare function saveEnvVar(envPath: string, key: string, value: string): void;
|
|
25
|
+
export declare function promptApiKey(rl: ReturnType<typeof createInterface>, provider: string, configPath: string): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK3C,eAAO,MAAM,IAAI,++BAUhB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;CAWlB,CAAC;AAEF,wBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,OAAO,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,MAAM,SAGrB;AAED,wBAAsB,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxH;AAED,wBAAsB,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAazH;AAGD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMzE,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBnE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK5E;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EACtC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|