@vielhuber/wahelper 1.5.6 → 1.5.8

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 (3) hide show
  1. package/README.md +7 -0
  2. package/package.json +3 -3
  3. package/wahelper.js +36 -1
package/README.md CHANGED
@@ -55,6 +55,10 @@ npx wahelper \
55
55
  --action "fetch_messages" \
56
56
  --limit 42
57
57
 
58
+ # view a single message by id
59
+ --action "view_message" \
60
+ --id "ABCDEF1234567890"
61
+
58
62
  # send message to user
59
63
  --action "send_user" \
60
64
  --number "xxxxxxxxxxxx" \
@@ -79,6 +83,9 @@ $wahelper = new wahelper();
79
83
  // fetch messages
80
84
  $wahelper->fetchMessages(device: 'xxxxxxxxxxxx', limit: 42);
81
85
 
86
+ // view a single message by id
87
+ $wahelper->viewMessage(device: 'xxxxxxxxxxxx', id: 'ABCDEF1234567890');
88
+
82
89
  // send message to user
83
90
  $wahelper->sendUser(
84
91
  device: 'xxxxxxxxxxxx',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielhuber/wahelper",
3
- "version": "1.5.6",
3
+ "version": "1.5.8",
4
4
  "description": "Lightweight whatsapp integration layer.",
5
5
  "main": "wahelper.js",
6
6
  "files": [
@@ -26,8 +26,8 @@
26
26
  "qrcode-terminal": "^0.12.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@prettier/plugin-php": "^0.24.0",
30
- "prettier": "^3.7.4"
29
+ "@prettier/plugin-php": "^0.25.0",
30
+ "prettier": "^3.8.3"
31
31
  },
32
32
  "engines": {
33
33
  "node": ">=18"
package/wahelper.js CHANGED
@@ -55,10 +55,11 @@ export default class wahelper {
55
55
  this.args.device === undefined ||
56
56
  (this.args.action === 'send_user' && (this.args.number === undefined || this.args.message === undefined)) ||
57
57
  (this.args.action === 'send_group' && (this.args.name === undefined || this.args.message === undefined)) ||
58
+ (this.args.action === 'view_message' && (this.args.id === undefined || this.args.id === '')) ||
58
59
  (this.args.action === 'fetch_messages' &&
59
60
  this.args.limit !== undefined &&
60
61
  typeof this.args.limit !== 'number') ||
61
- !['fetch_messages', 'send_user', 'send_group'].includes(this.args.action)
62
+ !['fetch_messages', 'view_message', 'send_user', 'send_group'].includes(this.args.action)
62
63
  ) {
63
64
  console.error('input missing or unknown action!');
64
65
  this.log('⛔input missing or unknown action!');
@@ -106,6 +107,9 @@ export default class wahelper {
106
107
  if (this.args.action === 'fetch_messages') {
107
108
  response = await this.fetchMessages(this.args.limit);
108
109
  }
110
+ if (this.args.action === 'view_message') {
111
+ response = await this.viewMessage(this.args.id);
112
+ }
109
113
  if (this.args.action === 'send_user') {
110
114
  response = await this.sendMessageToUser(this.args.number, this.args.message, this.args.attachments);
111
115
  }
@@ -155,6 +159,37 @@ export default class wahelper {
155
159
  return null;
156
160
  }
157
161
 
162
+ async viewMessage(id = null) {
163
+ // lookup directly from database — no connection to daemon needed
164
+ try {
165
+ let message =
166
+ this.db
167
+ .prepare(
168
+ `
169
+ SELECT id, \`from\`, \`to\`, content, media_filename, timestamp
170
+ FROM messages
171
+ WHERE id = ?
172
+ LIMIT 1
173
+ `
174
+ )
175
+ .get(id) || null;
176
+ if (message === null) {
177
+ console.log('Message not found: ' + id);
178
+ this.write({ success: false, message: 'message_not_found', data: null }, true);
179
+ return { content: [{ type: 'text', text: 'Message not found: ' + id }], structuredContent: null };
180
+ }
181
+ console.log('Fetched message ' + id + ' from database.');
182
+ this.write({ success: true, message: 'message_fetched', data: message }, true);
183
+ return {
184
+ content: [{ type: 'text', text: 'Fetched message ' + id }],
185
+ structuredContent: message
186
+ };
187
+ } catch (error) {
188
+ this.log('⛔ Error fetching message from database: ' + error.message + ' (code: ' + error.code + ')');
189
+ }
190
+ return null;
191
+ }
192
+
158
193
  async sendMessageToUser(number = null, message = null, attachments = null) {
159
194
  let jid = this.formatNumber(number) + '@s.whatsapp.net';
160
195
  this.log('begin send message to user ' + jid);