@wahooks/channel 0.9.0 → 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.
Files changed (2) hide show
  1. package/dist/index.js +21 -32
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -316,8 +316,11 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
316
316
  case "wahooks_reply":
317
317
  case "wahooks_send": {
318
318
  const chatId = toChatId(args.to);
319
- // Start typing, then send with skipPresence to avoid double seen/typing
320
- api("POST", `/connections/${connectionId}/typing`, { chatId }).catch(() => { });
319
+ // Human-like: typing random delay stop typing send
320
+ await api("POST", `/connections/${connectionId}/typing`, { chatId }).catch(() => { });
321
+ const delay = 1000 + Math.random() * 2000 + Math.min(args.text.length * 40, 4000);
322
+ await new Promise((r) => setTimeout(r, delay));
323
+ await api("POST", `/connections/${connectionId}/typing/stop`, { chatId }).catch(() => { });
321
324
  await api("POST", `/connections/${connectionId}/send`, {
322
325
  chatId,
323
326
  text: args.text,
@@ -325,40 +328,26 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
325
328
  });
326
329
  return { content: [{ type: "text", text: `Sent to ${args.to}` }] };
327
330
  }
328
- case "wahooks_send_image": {
329
- const media = resolveMedia(args);
330
- await api("POST", `/connections/${connectionId}/send-image`, {
331
- chatId: toChatId(args.to),
332
- ...media,
333
- caption: args.caption,
334
- });
335
- return { content: [{ type: "text", text: `Image sent to ${args.to}` }] };
336
- }
337
- case "wahooks_send_document": {
338
- const media = resolveMedia(args);
339
- await api("POST", `/connections/${connectionId}/send-document`, {
340
- chatId: toChatId(args.to),
341
- ...media,
342
- caption: args.caption,
343
- });
344
- return { content: [{ type: "text", text: `Document sent to ${args.to}` }] };
345
- }
346
- case "wahooks_send_video": {
347
- const media = resolveMedia(args);
348
- await api("POST", `/connections/${connectionId}/send-video`, {
349
- chatId: toChatId(args.to),
350
- ...media,
351
- caption: args.caption,
352
- });
353
- return { content: [{ type: "text", text: `Video sent to ${args.to}` }] };
354
- }
331
+ case "wahooks_send_image":
332
+ case "wahooks_send_document":
333
+ case "wahooks_send_video":
355
334
  case "wahooks_send_audio": {
335
+ const chatId = toChatId(args.to);
356
336
  const media = resolveMedia(args);
357
- await api("POST", `/connections/${connectionId}/send-audio`, {
358
- chatId: toChatId(args.to),
337
+ const endpoint = req.params.name.replace("wahooks_", "").replace("_", "-");
338
+ // Human-like: typing → delay → stop typing → send (skipPresence to avoid API doubling)
339
+ await api("POST", `/connections/${connectionId}/typing`, { chatId }).catch(() => { });
340
+ await new Promise((r) => setTimeout(r, 1500 + Math.random() * 2000));
341
+ await api("POST", `/connections/${connectionId}/typing/stop`, { chatId }).catch(() => { });
342
+ await api("POST", `/connections/${connectionId}/${endpoint}`, {
343
+ chatId,
359
344
  ...media,
345
+ caption: args.caption,
346
+ filename: args.filename,
347
+ skipPresence: true,
360
348
  });
361
- return { content: [{ type: "text", text: `Audio sent to ${args.to}` }] };
349
+ const type = endpoint.replace("send-", "");
350
+ return { content: [{ type: "text", text: `${type} sent to ${args.to}` }] };
362
351
  }
363
352
  case "wahooks_send_location": {
364
353
  await api("POST", `/connections/${connectionId}/send-location`, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wahooks/channel",
3
- "version": "0.9.0",
3
+ "version": "1.0.0",
4
4
  "description": "WhatsApp channel for Claude Code — chat with Claude via WhatsApp",
5
5
  "type": "module",
6
6
  "bin": {