beepctl 0.1.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 +186 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +34 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/accounts.d.ts +3 -0
- package/dist/commands/accounts.d.ts.map +1 -0
- package/dist/commands/accounts.js +27 -0
- package/dist/commands/accounts.js.map +1 -0
- package/dist/commands/alias.d.ts +3 -0
- package/dist/commands/alias.d.ts.map +1 -0
- package/dist/commands/alias.js +79 -0
- package/dist/commands/alias.js.map +1 -0
- package/dist/commands/archive.d.ts +3 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +35 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +58 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/chats.d.ts +3 -0
- package/dist/commands/chats.d.ts.map +1 -0
- package/dist/commands/chats.js +227 -0
- package/dist/commands/chats.js.map +1 -0
- package/dist/commands/contacts.d.ts +3 -0
- package/dist/commands/contacts.d.ts.map +1 -0
- package/dist/commands/contacts.js +46 -0
- package/dist/commands/contacts.js.map +1 -0
- package/dist/commands/download.d.ts +3 -0
- package/dist/commands/download.d.ts.map +1 -0
- package/dist/commands/download.js +39 -0
- package/dist/commands/download.js.map +1 -0
- package/dist/commands/focus.d.ts +3 -0
- package/dist/commands/focus.d.ts.map +1 -0
- package/dist/commands/focus.js +49 -0
- package/dist/commands/focus.js.map +1 -0
- package/dist/commands/messages.d.ts +3 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +105 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/reminders.d.ts +3 -0
- package/dist/commands/reminders.d.ts.map +1 -0
- package/dist/commands/reminders.js +58 -0
- package/dist/commands/reminders.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +211 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +58 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/aliases.d.ts +8 -0
- package/dist/lib/aliases.d.ts.map +1 -0
- package/dist/lib/aliases.js +19 -0
- package/dist/lib/aliases.js.map +1 -0
- package/dist/lib/client.d.ts +6 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +15 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/command-utils.d.ts +38 -0
- package/dist/lib/command-utils.d.ts.map +1 -0
- package/dist/lib/command-utils.js +98 -0
- package/dist/lib/command-utils.js.map +1 -0
- package/dist/lib/config.d.ts +9 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +32 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dates.d.ts +11 -0
- package/dist/lib/dates.d.ts.map +1 -0
- package/dist/lib/dates.js +74 -0
- package/dist/lib/dates.js.map +1 -0
- package/dist/lib/errors.d.ts +2 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +40 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/types.d.ts +58 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/tui/App.d.ts +2 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +31 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +15 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/views/ChatList.d.ts +6 -0
- package/dist/tui/views/ChatList.d.ts.map +1 -0
- package/dist/tui/views/ChatList.js +54 -0
- package/dist/tui/views/ChatList.js.map +1 -0
- package/dist/tui/views/Messages.d.ts +8 -0
- package/dist/tui/views/Messages.d.ts.map +1 -0
- package/dist/tui/views/Messages.js +70 -0
- package/dist/tui/views/Messages.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import kleur from "kleur";
|
|
3
|
+
import { isValidChatId, resolveAlias } from "../lib/aliases.js";
|
|
4
|
+
import { getClient } from "../lib/client.js";
|
|
5
|
+
import { handleCommandError, highlightQuery, parseArrayOption, parseDateOrExit, SEPARATOR, THIN_SEP, validateDateRangeOrExit, } from "../lib/command-utils.js";
|
|
6
|
+
import { getConfig } from "../lib/config.js";
|
|
7
|
+
const VALID_MEDIA_TYPES = ["any", "video", "image", "link", "file"];
|
|
8
|
+
export const searchCommand = new Command("search")
|
|
9
|
+
.description("Search messages across all chats")
|
|
10
|
+
.argument("<query>", "Search query")
|
|
11
|
+
.option("-l, --limit <number>", "Maximum results to show", "20")
|
|
12
|
+
.option("-c, --chat <id...>", "Filter by chat ID(s) or alias(es)")
|
|
13
|
+
.option("-a, --account <id...>", "Filter by account ID(s)")
|
|
14
|
+
.option("-t, --chat-type <type>", "Filter by chat type: 'group' or 'single'")
|
|
15
|
+
.option("--after <date>", "Messages after date (e.g., '1d ago', 'yesterday')")
|
|
16
|
+
.option("--before <date>", "Messages before date (e.g., '1h ago', 'today')")
|
|
17
|
+
.option("-s, --sender <sender>", "Filter by sender: 'me', 'others', or user ID")
|
|
18
|
+
.option("-m, --media <types...>", "Media types: any, video, image, link, file")
|
|
19
|
+
.option("--include-low-priority", "Include low priority messages")
|
|
20
|
+
.option("--exclude-muted", "Exclude muted chats")
|
|
21
|
+
.action(async (query, options) => {
|
|
22
|
+
try {
|
|
23
|
+
const client = getClient();
|
|
24
|
+
const config = getConfig();
|
|
25
|
+
const limit = Number.parseInt(options.limit, 10);
|
|
26
|
+
// Parse chat IDs
|
|
27
|
+
const chatIDs = parseChatIds(options.chat, config);
|
|
28
|
+
// Parse account IDs
|
|
29
|
+
const accountIDs = options.account ? parseArrayOption(options.account) : undefined;
|
|
30
|
+
// Validate chat type
|
|
31
|
+
if (options.chatType && !["group", "single"].includes(options.chatType)) {
|
|
32
|
+
console.error(kleur.red("Chat type must be 'group' or 'single'"));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// Parse media types
|
|
36
|
+
const mediaTypes = parseMediaTypes(options.media);
|
|
37
|
+
// Parse dates
|
|
38
|
+
const dateAfter = options.after ? parseDateOrExit(options.after, "--after") : undefined;
|
|
39
|
+
const dateBefore = options.before ? parseDateOrExit(options.before, "--before") : undefined;
|
|
40
|
+
if (dateAfter && dateBefore) {
|
|
41
|
+
validateDateRangeOrExit(dateAfter, dateBefore);
|
|
42
|
+
}
|
|
43
|
+
// Build filter description
|
|
44
|
+
const filterParts = buildFilterDescription(options, chatIDs, accountIDs, mediaTypes);
|
|
45
|
+
const filters = filterParts.length > 0 ? kleur.dim(` [${filterParts.join(", ")}]`) : "";
|
|
46
|
+
console.log(kleur.dim(`Searching for "${query}"${filters}...`));
|
|
47
|
+
// Build accountID -> network map
|
|
48
|
+
const accounts = await client.accounts.list();
|
|
49
|
+
const networkMap = new Map();
|
|
50
|
+
for (const account of accounts) {
|
|
51
|
+
networkMap.set(account.accountID, account.network || account.accountID);
|
|
52
|
+
}
|
|
53
|
+
// Build search params
|
|
54
|
+
const searchParams = buildSearchParams(query, {
|
|
55
|
+
chatIDs,
|
|
56
|
+
accountIDs,
|
|
57
|
+
chatType: options.chatType,
|
|
58
|
+
dateAfter,
|
|
59
|
+
dateBefore,
|
|
60
|
+
sender: options.sender,
|
|
61
|
+
mediaTypes,
|
|
62
|
+
includeLowPriority: options.includeLowPriority,
|
|
63
|
+
excludeMuted: options.excludeMuted,
|
|
64
|
+
});
|
|
65
|
+
// Search messages
|
|
66
|
+
const messages = [];
|
|
67
|
+
for await (const msg of client.messages.search(searchParams)) {
|
|
68
|
+
messages.push(msg);
|
|
69
|
+
if (messages.length >= limit)
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
// Search chats
|
|
73
|
+
const chats = [];
|
|
74
|
+
for await (const chat of client.chats.search({ query })) {
|
|
75
|
+
chats.push(chat);
|
|
76
|
+
if (chats.length >= 5)
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
if (messages.length === 0 && chats.length === 0) {
|
|
80
|
+
console.log(kleur.yellow(`\nNo results found for "${query}"`));
|
|
81
|
+
const hasFilters = chatIDs ||
|
|
82
|
+
accountIDs ||
|
|
83
|
+
options.chatType ||
|
|
84
|
+
dateAfter ||
|
|
85
|
+
dateBefore ||
|
|
86
|
+
options.sender ||
|
|
87
|
+
mediaTypes;
|
|
88
|
+
if (hasFilters) {
|
|
89
|
+
console.log(kleur.dim(" Try removing some filters to broaden your search"));
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Display results
|
|
94
|
+
if (chats.length > 0) {
|
|
95
|
+
printChats(chats);
|
|
96
|
+
}
|
|
97
|
+
if (messages.length > 0) {
|
|
98
|
+
printMessages(messages, query, networkMap);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
handleCommandError(error);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
function parseChatIds(chatOption, config) {
|
|
106
|
+
if (!chatOption)
|
|
107
|
+
return undefined;
|
|
108
|
+
const rawChats = parseArrayOption(chatOption);
|
|
109
|
+
const chatIDs = [];
|
|
110
|
+
for (const chat of rawChats) {
|
|
111
|
+
const resolved = resolveAlias(chat, config);
|
|
112
|
+
if (resolved) {
|
|
113
|
+
chatIDs.push(resolved);
|
|
114
|
+
}
|
|
115
|
+
else if (isValidChatId(chat)) {
|
|
116
|
+
chatIDs.push(chat);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.error(kleur.red(`Invalid chat ID or alias: ${chat}`));
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (chatIDs.length === 0) {
|
|
124
|
+
console.error(kleur.yellow("No valid chat IDs found, ignoring --chat filter"));
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return chatIDs;
|
|
128
|
+
}
|
|
129
|
+
function parseMediaTypes(mediaOption) {
|
|
130
|
+
if (!mediaOption)
|
|
131
|
+
return undefined;
|
|
132
|
+
const rawTypes = parseArrayOption(mediaOption);
|
|
133
|
+
for (const type of rawTypes) {
|
|
134
|
+
if (!VALID_MEDIA_TYPES.includes(type)) {
|
|
135
|
+
console.error(kleur.red(`Invalid media type: ${type}. Must be: ${VALID_MEDIA_TYPES.join(", ")}`));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return rawTypes.length > 0 ? rawTypes : undefined;
|
|
140
|
+
}
|
|
141
|
+
function buildFilterDescription(options, chatIDs, accountIDs, mediaTypes) {
|
|
142
|
+
const parts = [];
|
|
143
|
+
if (chatIDs)
|
|
144
|
+
parts.push(`chats: ${chatIDs.length}`);
|
|
145
|
+
if (accountIDs)
|
|
146
|
+
parts.push(`accounts: ${accountIDs.length}`);
|
|
147
|
+
if (options.chatType)
|
|
148
|
+
parts.push(`type: ${options.chatType}`);
|
|
149
|
+
if (options.after)
|
|
150
|
+
parts.push(`after: ${options.after}`);
|
|
151
|
+
if (options.before)
|
|
152
|
+
parts.push(`before: ${options.before}`);
|
|
153
|
+
if (options.sender)
|
|
154
|
+
parts.push(`sender: ${options.sender}`);
|
|
155
|
+
if (mediaTypes)
|
|
156
|
+
parts.push(`media: ${mediaTypes.join(",")}`);
|
|
157
|
+
return parts;
|
|
158
|
+
}
|
|
159
|
+
function buildSearchParams(query, opts) {
|
|
160
|
+
const params = { query };
|
|
161
|
+
if (opts.chatIDs?.length)
|
|
162
|
+
params.chatIDs = opts.chatIDs;
|
|
163
|
+
if (opts.accountIDs?.length)
|
|
164
|
+
params.accountIDs = opts.accountIDs;
|
|
165
|
+
if (opts.chatType)
|
|
166
|
+
params.chatType = opts.chatType;
|
|
167
|
+
if (opts.dateAfter)
|
|
168
|
+
params.dateAfter = opts.dateAfter;
|
|
169
|
+
if (opts.dateBefore)
|
|
170
|
+
params.dateBefore = opts.dateBefore;
|
|
171
|
+
if (opts.sender)
|
|
172
|
+
params.sender = opts.sender;
|
|
173
|
+
if (opts.mediaTypes?.length)
|
|
174
|
+
params.mediaTypes = opts.mediaTypes;
|
|
175
|
+
if (opts.includeLowPriority)
|
|
176
|
+
params.excludeLowPriority = false;
|
|
177
|
+
if (opts.excludeMuted)
|
|
178
|
+
params.includeMuted = false;
|
|
179
|
+
return params;
|
|
180
|
+
}
|
|
181
|
+
function printChats(chats) {
|
|
182
|
+
console.log(kleur.bold(`\nMatching Chats (${chats.length})`));
|
|
183
|
+
console.log(SEPARATOR);
|
|
184
|
+
for (let i = 0; i < chats.length; i++) {
|
|
185
|
+
const chat = chats[i];
|
|
186
|
+
const num = kleur.dim(`${i + 1}.`);
|
|
187
|
+
console.log(`${num} ${kleur.bold(chat.title || chat.description || "Unknown")}`);
|
|
188
|
+
console.log(kleur.dim(` ID: ${chat.id}`));
|
|
189
|
+
if (i < chats.length - 1)
|
|
190
|
+
console.log(THIN_SEP);
|
|
191
|
+
}
|
|
192
|
+
console.log();
|
|
193
|
+
}
|
|
194
|
+
function printMessages(messages, query, networkMap) {
|
|
195
|
+
console.log(kleur.bold(`\nMatching Messages (${messages.length})`));
|
|
196
|
+
console.log(SEPARATOR);
|
|
197
|
+
for (let i = 0; i < messages.length; i++) {
|
|
198
|
+
const msg = messages[i];
|
|
199
|
+
const num = kleur.dim(`${i + 1}.`);
|
|
200
|
+
const sender = msg.senderName || msg.senderID;
|
|
201
|
+
const network = networkMap.get(msg.accountID) || msg.accountID;
|
|
202
|
+
const time = new Date(msg.timestamp).toLocaleString();
|
|
203
|
+
console.log(`${num} ${kleur.cyan(sender)} ${kleur.dim(`[${network}]`)} ${kleur.dim(`• ${time}`)}`);
|
|
204
|
+
console.log(` ${highlightQuery(msg.text || "", query)}`);
|
|
205
|
+
console.log(kleur.dim(` ${msg.chatID}`));
|
|
206
|
+
if (i < messages.length - 1)
|
|
207
|
+
console.log(SEPARATOR);
|
|
208
|
+
}
|
|
209
|
+
console.log();
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAmCrB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import kleur from "kleur";
|
|
3
|
+
import { resolveAlias } from "../lib/aliases.js";
|
|
4
|
+
import { getClient } from "../lib/client.js";
|
|
5
|
+
import { handleCommandError } from "../lib/command-utils.js";
|
|
6
|
+
import { getConfig } from "../lib/config.js";
|
|
7
|
+
export const sendCommand = new Command("send")
|
|
8
|
+
.description("Send a message to a chat")
|
|
9
|
+
.argument("<chat-id>", "Chat ID, alias, or 'myself' for Note to self")
|
|
10
|
+
.argument("<message>", "Message text to send")
|
|
11
|
+
.option("-q, --quiet", "Don't show confirmation")
|
|
12
|
+
.option("-r, --reply-to <message-id>", "Reply to a specific message")
|
|
13
|
+
.action(async (chatId, message, options) => {
|
|
14
|
+
try {
|
|
15
|
+
const client = getClient();
|
|
16
|
+
const config = getConfig();
|
|
17
|
+
const resolvedChatId = await resolveChatIdWithMyselfFallback(chatId, config, client);
|
|
18
|
+
const sent = await client.messages.send(resolvedChatId, {
|
|
19
|
+
text: message,
|
|
20
|
+
replyToMessageID: options.replyTo,
|
|
21
|
+
});
|
|
22
|
+
if (!options.quiet) {
|
|
23
|
+
console.log(kleur.green("Message sent!"));
|
|
24
|
+
console.log(kleur.dim(` ID: ${sent.pendingMessageID}`));
|
|
25
|
+
console.log(kleur.dim(` Chat: ${sent.chatID}`));
|
|
26
|
+
if (options.replyTo) {
|
|
27
|
+
console.log(kleur.dim(` Reply to: ${options.replyTo}`));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
handleCommandError(error, [
|
|
33
|
+
{
|
|
34
|
+
match: "403",
|
|
35
|
+
message: "Permission denied",
|
|
36
|
+
hint: "Enable write permissions: Settings -> Developers -> Edit token -> Enable 'write' scope",
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
async function resolveChatIdWithMyselfFallback(chatId, config, client) {
|
|
42
|
+
const resolved = resolveAlias(chatId, config);
|
|
43
|
+
if (resolved)
|
|
44
|
+
return resolved;
|
|
45
|
+
// Handle 'myself' keyword
|
|
46
|
+
if (chatId.toLowerCase() === "myself") {
|
|
47
|
+
for await (const chat of client.chats.search({ query: "note to self" })) {
|
|
48
|
+
return chat.id;
|
|
49
|
+
}
|
|
50
|
+
console.error(kleur.red("'Note to self' chat not found"));
|
|
51
|
+
console.error(kleur.dim(" Create a 'Note to self' chat in Beeper Desktop first."));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
console.error(kleur.red(`Chat '${chatId}' not found`));
|
|
55
|
+
console.error(kleur.dim(` Use chat ID directly or add alias: beep alias add ${chatId} <chatId>`));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BeeperConfig } from "./config.js";
|
|
2
|
+
/** Resolve alias to chat ID, pass through direct chat IDs, or return null */
|
|
3
|
+
export declare function resolveAlias(input: string, config: BeeperConfig): string | null;
|
|
4
|
+
/** Validate alias name (alphanumeric + underscore only) */
|
|
5
|
+
export declare function isValidAliasName(name: string): boolean;
|
|
6
|
+
/** Validate chat ID format (must start with !) */
|
|
7
|
+
export declare function isValidChatId(chatId: string): boolean;
|
|
8
|
+
//# sourceMappingURL=aliases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/lib/aliases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAQ/E;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Resolve alias to chat ID, pass through direct chat IDs, or return null */
|
|
2
|
+
export function resolveAlias(input, config) {
|
|
3
|
+
if (config.aliases?.[input]) {
|
|
4
|
+
return config.aliases[input];
|
|
5
|
+
}
|
|
6
|
+
if (input.startsWith("!")) {
|
|
7
|
+
return input;
|
|
8
|
+
}
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
/** Validate alias name (alphanumeric + underscore only) */
|
|
12
|
+
export function isValidAliasName(name) {
|
|
13
|
+
return /^[a-zA-Z0-9_]+$/.test(name);
|
|
14
|
+
}
|
|
15
|
+
/** Validate chat ID format (must start with !) */
|
|
16
|
+
export function isValidChatId(chatId) {
|
|
17
|
+
return chatId.startsWith("!");
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=aliases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../src/lib/aliases.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAoB;IAC/D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa,CAAC,MAAc;IAC3C,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import BeeperDesktop from "@beeper/desktop-api";
|
|
2
|
+
export type { Account, AccountListResponse, } from "@beeper/desktop-api/resources/accounts/accounts.js";
|
|
3
|
+
export type { Chat, ChatListResponse } from "@beeper/desktop-api/resources/chats/chats.js";
|
|
4
|
+
export type { Message } from "@beeper/desktop-api/resources/shared.js";
|
|
5
|
+
export declare function getClient(): BeeperDesktop;
|
|
6
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAKhD,YAAY,EACX,OAAO,EACP,mBAAmB,GACnB,MAAM,oDAAoD,CAAC;AAC5D,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,YAAY,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAIvE,wBAAgB,SAAS,IAAI,aAAa,CASzC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import BeeperDesktop from "@beeper/desktop-api";
|
|
2
|
+
import { getConfig } from "./config.js";
|
|
3
|
+
const DEFAULT_BASE_URL = "http://localhost:23373";
|
|
4
|
+
let _client = null;
|
|
5
|
+
export function getClient() {
|
|
6
|
+
if (!_client) {
|
|
7
|
+
const config = getConfig();
|
|
8
|
+
_client = new BeeperDesktop({
|
|
9
|
+
accessToken: config.token,
|
|
10
|
+
baseURL: config.baseUrl ?? DEFAULT_BASE_URL,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return _client;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AASlD,IAAI,OAAO,GAAyB,IAAI,CAAC;AAEzC,MAAM,UAAU,SAAS;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,OAAO,GAAG,IAAI,aAAa,CAAC;YAC3B,WAAW,EAAE,MAAM,CAAC,KAAK;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,gBAAgB;SAC3C,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { BeeperConfig } from "./config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a chat ID from alias or direct ID. Exits process if invalid.
|
|
4
|
+
*/
|
|
5
|
+
export declare function resolveChatIdOrExit(chatIdArg: string, config: BeeperConfig): string;
|
|
6
|
+
/**
|
|
7
|
+
* Parse a relative date string. Exits process with helpful message if invalid.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseDateOrExit(dateStr: string, optionName: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Validate that after date is before the before date. Exits if invalid.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateDateRangeOrExit(dateAfter: string, dateBefore: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Standard error handler for command actions.
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleCommandError(error: unknown, extraHandlers?: ErrorHandler[]): never;
|
|
18
|
+
interface ErrorHandler {
|
|
19
|
+
match: string;
|
|
20
|
+
message: string;
|
|
21
|
+
hint?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format file size in human readable form.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatSize(bytes: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Parse comma-separated or array values into a flat array.
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseArrayOption(value: string | string[]): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Highlight query matches in text.
|
|
33
|
+
*/
|
|
34
|
+
export declare function highlightQuery(text: string, query: string): string;
|
|
35
|
+
export declare const SEPARATOR: string;
|
|
36
|
+
export declare const THIN_SEP: string;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=command-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-utils.d.ts","sourceRoot":"","sources":["../../src/lib/command-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAOnF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAS3E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAKnF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,GAAG,KAAK,CAyBxF;AAED,UAAU,YAAY;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAKnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlE;AAGD,eAAO,MAAM,SAAS,QAA4B,CAAC;AACnD,eAAO,MAAM,QAAQ,QAA4B,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import kleur from "kleur";
|
|
2
|
+
import { isValidChatId, resolveAlias } from "./aliases.js";
|
|
3
|
+
import { parseRelativeDate } from "./dates.js";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a chat ID from alias or direct ID. Exits process if invalid.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveChatIdOrExit(chatIdArg, config) {
|
|
8
|
+
const resolved = resolveAlias(chatIdArg, config);
|
|
9
|
+
if (resolved)
|
|
10
|
+
return resolved;
|
|
11
|
+
if (isValidChatId(chatIdArg))
|
|
12
|
+
return chatIdArg;
|
|
13
|
+
console.error(kleur.red(`Invalid chat ID or alias: ${chatIdArg}`));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse a relative date string. Exits process with helpful message if invalid.
|
|
18
|
+
*/
|
|
19
|
+
export function parseDateOrExit(dateStr, optionName) {
|
|
20
|
+
try {
|
|
21
|
+
return parseRelativeDate(dateStr);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const msg = error instanceof Error ? error.message : "Unknown error";
|
|
25
|
+
console.error(kleur.red(`Invalid ${optionName} date: ${msg}`));
|
|
26
|
+
console.error(kleur.dim(" Examples: '1d ago', '2h ago', 'yesterday', 'today'"));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Validate that after date is before the before date. Exits if invalid.
|
|
32
|
+
*/
|
|
33
|
+
export function validateDateRangeOrExit(dateAfter, dateBefore) {
|
|
34
|
+
if (new Date(dateAfter) >= new Date(dateBefore)) {
|
|
35
|
+
console.error(kleur.red("--after date must be before --before date"));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Standard error handler for command actions.
|
|
41
|
+
*/
|
|
42
|
+
export function handleCommandError(error, extraHandlers) {
|
|
43
|
+
if (error instanceof Error) {
|
|
44
|
+
// Connection error
|
|
45
|
+
if (error.message.includes("ECONNREFUSED")) {
|
|
46
|
+
console.error(kleur.red("Cannot connect to Beeper Desktop API"));
|
|
47
|
+
console.error(kleur.dim(" Make sure Beeper Desktop is running with API enabled."));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
// Check custom handlers
|
|
51
|
+
if (extraHandlers) {
|
|
52
|
+
for (const handler of extraHandlers) {
|
|
53
|
+
if (error.message.includes(handler.match)) {
|
|
54
|
+
console.error(kleur.red(handler.message));
|
|
55
|
+
if (handler.hint)
|
|
56
|
+
console.error(kleur.dim(` ${handler.hint}`));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
console.error(kleur.red(`Error: ${error.message}`));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.error(kleur.red("Unknown error occurred"));
|
|
65
|
+
}
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format file size in human readable form.
|
|
70
|
+
*/
|
|
71
|
+
export function formatSize(bytes) {
|
|
72
|
+
if (bytes < 1024)
|
|
73
|
+
return `${bytes}B`;
|
|
74
|
+
if (bytes < 1024 * 1024)
|
|
75
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
76
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parse comma-separated or array values into a flat array.
|
|
80
|
+
*/
|
|
81
|
+
export function parseArrayOption(value) {
|
|
82
|
+
if (Array.isArray(value)) {
|
|
83
|
+
return value.flatMap((v) => v.split(",").map((s) => s.trim()));
|
|
84
|
+
}
|
|
85
|
+
return value.split(",").map((s) => s.trim());
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Highlight query matches in text.
|
|
89
|
+
*/
|
|
90
|
+
export function highlightQuery(text, query) {
|
|
91
|
+
const escaped = query.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
92
|
+
const regex = new RegExp(`(${escaped})`, "gi");
|
|
93
|
+
return text.replaceAll(regex, kleur.yellow("$1"));
|
|
94
|
+
}
|
|
95
|
+
// Visual separator constants
|
|
96
|
+
export const SEPARATOR = kleur.dim("─".repeat(50));
|
|
97
|
+
export const THIN_SEP = kleur.dim("┄".repeat(40));
|
|
98
|
+
//# sourceMappingURL=command-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-utils.js","sourceRoot":"","sources":["../../src/lib/command-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface BeeperConfig {
|
|
2
|
+
token?: string;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
aliases?: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export declare function getConfig(): BeeperConfig;
|
|
7
|
+
export declare function saveConfig(config: BeeperConfig): void;
|
|
8
|
+
export declare function getConfigPath(): string;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAKD,wBAAgB,SAAS,IAAI,YAAY,CAkBxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAMrD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const CONFIG_DIR = join(homedir(), ".config", "beepcli");
|
|
5
|
+
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
6
|
+
export function getConfig() {
|
|
7
|
+
const envToken = process.env.BEEPER_TOKEN;
|
|
8
|
+
const envUrl = process.env.BEEPER_URL;
|
|
9
|
+
if (envToken || envUrl) {
|
|
10
|
+
return { token: envToken, baseUrl: envUrl };
|
|
11
|
+
}
|
|
12
|
+
if (existsSync(CONFIG_FILE)) {
|
|
13
|
+
try {
|
|
14
|
+
const content = readFileSync(CONFIG_FILE, "utf-8");
|
|
15
|
+
return JSON.parse(content);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
export function saveConfig(config) {
|
|
24
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
25
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
28
|
+
}
|
|
29
|
+
export function getConfigPath() {
|
|
30
|
+
return CONFIG_FILE;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,SAAS;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAEtC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,OAAO,WAAW,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse relative date strings into ISO 8601 format.
|
|
3
|
+
* Supports: "1h ago", "2d ago", "3w ago", "1mo ago", "yesterday", "today"
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseRelativeDate(input: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Parse future time strings into Unix timestamp in milliseconds.
|
|
8
|
+
* Supports: "30m", "1h", "2d", "1w", "tomorrow", or ISO date
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseFutureTime(input: string): number;
|
|
11
|
+
//# sourceMappingURL=dates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/lib/dates.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqCvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkCrD"}
|