n8n-nodes-message-debounce 0.1.2

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 (37) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/dist/credentials/RedisApi.credentials.d.ts +16 -0
  4. package/dist/credentials/RedisApi.credentials.d.ts.map +1 -0
  5. package/dist/credentials/RedisApi.credentials.js +70 -0
  6. package/dist/credentials/RedisApi.credentials.js.map +1 -0
  7. package/dist/credentials/redisApi.svg +17 -0
  8. package/dist/nodes/MessageDebounce/MessageDebounce.description.d.ts +8 -0
  9. package/dist/nodes/MessageDebounce/MessageDebounce.description.d.ts.map +1 -0
  10. package/dist/nodes/MessageDebounce/MessageDebounce.description.js +247 -0
  11. package/dist/nodes/MessageDebounce/MessageDebounce.description.js.map +1 -0
  12. package/dist/nodes/MessageDebounce/MessageDebounce.node.d.ts +19 -0
  13. package/dist/nodes/MessageDebounce/MessageDebounce.node.d.ts.map +1 -0
  14. package/dist/nodes/MessageDebounce/MessageDebounce.node.js +102 -0
  15. package/dist/nodes/MessageDebounce/MessageDebounce.node.js.map +1 -0
  16. package/dist/nodes/MessageDebounce/constants.d.ts +17 -0
  17. package/dist/nodes/MessageDebounce/constants.d.ts.map +1 -0
  18. package/dist/nodes/MessageDebounce/constants.js +42 -0
  19. package/dist/nodes/MessageDebounce/constants.js.map +1 -0
  20. package/dist/nodes/MessageDebounce/execute.d.ts +13 -0
  21. package/dist/nodes/MessageDebounce/execute.d.ts.map +1 -0
  22. package/dist/nodes/MessageDebounce/execute.js +217 -0
  23. package/dist/nodes/MessageDebounce/execute.js.map +1 -0
  24. package/dist/nodes/MessageDebounce/helpers.d.ts +19 -0
  25. package/dist/nodes/MessageDebounce/helpers.d.ts.map +1 -0
  26. package/dist/nodes/MessageDebounce/helpers.js +43 -0
  27. package/dist/nodes/MessageDebounce/helpers.js.map +1 -0
  28. package/dist/nodes/MessageDebounce/messageDebounce.svg +17 -0
  29. package/dist/nodes/MessageDebounce/types.d.ts +30 -0
  30. package/dist/nodes/MessageDebounce/types.d.ts.map +1 -0
  31. package/dist/nodes/MessageDebounce/types.js +7 -0
  32. package/dist/nodes/MessageDebounce/types.js.map +1 -0
  33. package/dist/nodes/MessageDebounce/utils/RedisClient.d.ts +59 -0
  34. package/dist/nodes/MessageDebounce/utils/RedisClient.d.ts.map +1 -0
  35. package/dist/nodes/MessageDebounce/utils/RedisClient.js +270 -0
  36. package/dist/nodes/MessageDebounce/utils/RedisClient.js.map +1 -0
  37. package/package.json +58 -0
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ /**
3
+ * Minimal Redis client using the native Node.js `net` module.
4
+ * Implements the RESP2 (REdis Serialization Protocol) specification.
5
+ * Zero external dependencies — required for n8n verified community nodes.
6
+ *
7
+ * Supported commands: AUTH, SELECT, RPUSH, LLEN, LINDEX, LRANGE, DEL, EXPIRE, SET, GET, EVAL
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.RedisClient = void 0;
34
+ const net = __importStar(require("net"));
35
+ const tls = __importStar(require("tls"));
36
+ const CRLF = '\r\n';
37
+ const CONN_TIMEOUT_MS = 10000;
38
+ /** Encodes a command array into the RESP bulk string array format. */
39
+ function encodeCommand(args) {
40
+ let cmd = `*${args.length}${CRLF}`;
41
+ for (const arg of args) {
42
+ const str = String(arg);
43
+ cmd += `$${Buffer.byteLength(str, 'utf8')}${CRLF}${str}${CRLF}`;
44
+ }
45
+ return cmd;
46
+ }
47
+ /** RESP2 parser — processes a raw Buffer and returns typed values. */
48
+ class RespParser {
49
+ constructor() {
50
+ this.buffer = '';
51
+ }
52
+ feed(data) {
53
+ this.buffer += data.toString('utf8');
54
+ }
55
+ /** Attempt to parse one complete value from the buffer. Returns undefined if incomplete. */
56
+ tryParse() {
57
+ const result = this.parseValue(this.buffer, 0);
58
+ if (result === undefined)
59
+ return undefined;
60
+ this.buffer = this.buffer.slice(result.pos);
61
+ return { value: result.value, remainder: this.buffer };
62
+ }
63
+ parseValue(buf, pos) {
64
+ if (pos >= buf.length)
65
+ return undefined;
66
+ const type = buf[pos];
67
+ const lineEnd = buf.indexOf(CRLF, pos + 1);
68
+ if (lineEnd === -1)
69
+ return undefined;
70
+ const line = buf.slice(pos + 1, lineEnd);
71
+ const afterLine = lineEnd + 2;
72
+ switch (type) {
73
+ case '+': // Simple string
74
+ return { value: line, pos: afterLine };
75
+ case '-': // Error
76
+ throw new Error(line);
77
+ case ':': // Integer
78
+ return { value: parseInt(line, 10), pos: afterLine };
79
+ case '$': { // Bulk string
80
+ const len = parseInt(line, 10);
81
+ if (len === -1)
82
+ return { value: null, pos: afterLine };
83
+ const end = afterLine + len + 2; // +2 for trailing CRLF
84
+ if (buf.length < end)
85
+ return undefined;
86
+ return { value: buf.slice(afterLine, afterLine + len), pos: end };
87
+ }
88
+ case '*': { // Array
89
+ const count = parseInt(line, 10);
90
+ if (count === -1)
91
+ return { value: null, pos: afterLine };
92
+ const arr = [];
93
+ let cur = afterLine;
94
+ for (let i = 0; i < count; i++) {
95
+ const item = this.parseValue(buf, cur);
96
+ if (item === undefined)
97
+ return undefined;
98
+ arr.push(item.value);
99
+ cur = item.pos;
100
+ }
101
+ return { value: arr, pos: cur };
102
+ }
103
+ default:
104
+ throw new Error(`Unknown RESP type byte: "${type}"`);
105
+ }
106
+ }
107
+ }
108
+ class RedisClient {
109
+ constructor(credentials) {
110
+ this.socket = null;
111
+ this.pendingCallbacks = [];
112
+ this.parser = new RespParser();
113
+ this.host = credentials.host || 'localhost';
114
+ this.port = credentials.port || 6379;
115
+ this.username = credentials.username || '';
116
+ this.password = credentials.password || '';
117
+ this.database = credentials.database ?? 0;
118
+ this.useTls = credentials.tls ?? false;
119
+ }
120
+ /** Establish connection and authenticate. */
121
+ async connect() {
122
+ const rawSocket = await this.openSocket();
123
+ this.socket = rawSocket;
124
+ this.socket.on('data', (data) => {
125
+ this.parser.feed(data);
126
+ this.drainParser();
127
+ });
128
+ this.socket.on('error', (err) => {
129
+ const pending = this.pendingCallbacks.splice(0);
130
+ for (const cb of pending) {
131
+ cb.reject(err);
132
+ }
133
+ });
134
+ this.socket.on('close', () => {
135
+ const pending = this.pendingCallbacks.splice(0);
136
+ const err = new Error('Redis connection closed unexpectedly');
137
+ for (const cb of pending) {
138
+ cb.reject(err);
139
+ }
140
+ });
141
+ // Redis 6+ ACL: AUTH username password
142
+ // Redis 5 and below: AUTH password
143
+ if (this.password) {
144
+ if (this.username) {
145
+ await this.send(['AUTH', this.username, this.password]);
146
+ }
147
+ else {
148
+ await this.send(['AUTH', this.password]);
149
+ }
150
+ }
151
+ if (this.database !== 0) {
152
+ await this.send(['SELECT', this.database]);
153
+ }
154
+ }
155
+ /** Close the socket gracefully. */
156
+ disconnect() {
157
+ if (this.socket) {
158
+ this.socket.destroy();
159
+ this.socket = null;
160
+ }
161
+ }
162
+ // -------------------------------------------------------------------------
163
+ // Public Redis commands
164
+ // -------------------------------------------------------------------------
165
+ async rpush(key, value) {
166
+ return (await this.send(['RPUSH', key, value]));
167
+ }
168
+ async llen(key) {
169
+ return (await this.send(['LLEN', key]));
170
+ }
171
+ async lindex(key, index) {
172
+ return (await this.send(['LINDEX', key, index]));
173
+ }
174
+ async lrange(key, start, stop) {
175
+ const result = await this.send(['LRANGE', key, start, stop]);
176
+ return result.map((v) => v);
177
+ }
178
+ async del(...keys) {
179
+ return (await this.send(['DEL', ...keys]));
180
+ }
181
+ async expire(key, seconds) {
182
+ return (await this.send(['EXPIRE', key, seconds]));
183
+ }
184
+ /**
185
+ * SET with optional NX and EX flags.
186
+ * Returns 'OK' on success, null if NX condition was not met.
187
+ */
188
+ async set(key, value, options) {
189
+ const args = ['SET', key, value];
190
+ if (options?.ex !== undefined) {
191
+ args.push('EX', options.ex);
192
+ }
193
+ if (options?.nx) {
194
+ args.push('NX');
195
+ }
196
+ return (await this.send(args));
197
+ }
198
+ async get(key) {
199
+ return (await this.send(['GET', key]));
200
+ }
201
+ /**
202
+ * Execute a Lua script atomically.
203
+ * @param script Lua source code
204
+ * @param keys KEYS array
205
+ * @param args ARGV array
206
+ */
207
+ async eval(script, keys, args) {
208
+ return this.send(['EVAL', script, keys.length, ...keys, ...args]);
209
+ }
210
+ // -------------------------------------------------------------------------
211
+ // Private internals
212
+ // -------------------------------------------------------------------------
213
+ openSocket() {
214
+ return new Promise((resolve, reject) => {
215
+ const onError = (err) => {
216
+ reject(new Error(`Redis connection failed: ${err.message}`));
217
+ };
218
+ let socket;
219
+ if (this.useTls) {
220
+ socket = tls.connect({ host: this.host, port: this.port, rejectUnauthorized: true }, () => {
221
+ socket.removeListener('error', onError);
222
+ resolve(socket);
223
+ });
224
+ }
225
+ else {
226
+ socket = net.createConnection({ host: this.host, port: this.port }, () => {
227
+ socket.removeListener('error', onError);
228
+ resolve(socket);
229
+ });
230
+ }
231
+ socket.setTimeout(CONN_TIMEOUT_MS);
232
+ socket.once('error', onError);
233
+ socket.once('timeout', () => {
234
+ socket.destroy();
235
+ reject(new Error(`Redis connection timed out after ${CONN_TIMEOUT_MS}ms`));
236
+ });
237
+ });
238
+ }
239
+ send(args) {
240
+ return new Promise((resolve, reject) => {
241
+ if (!this.socket || this.socket.destroyed) {
242
+ reject(new Error('Redis socket is not connected'));
243
+ return;
244
+ }
245
+ this.pendingCallbacks.push({ resolve, reject });
246
+ this.socket.write(encodeCommand(args));
247
+ });
248
+ }
249
+ drainParser() {
250
+ while (this.pendingCallbacks.length > 0) {
251
+ let parsed;
252
+ try {
253
+ parsed = this.parser.tryParse();
254
+ }
255
+ catch (err) {
256
+ const cb = this.pendingCallbacks.shift();
257
+ if (cb)
258
+ cb.reject(err instanceof Error ? err : new Error(String(err)));
259
+ continue;
260
+ }
261
+ if (parsed === undefined)
262
+ break;
263
+ const cb = this.pendingCallbacks.shift();
264
+ if (cb)
265
+ cb.resolve(parsed.value);
266
+ }
267
+ }
268
+ }
269
+ exports.RedisClient = RedisClient;
270
+ //# sourceMappingURL=RedisClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisClient.js","sourceRoot":"","sources":["../../../../nodes/MessageDebounce/utils/RedisClient.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "n8n-nodes-message-debounce",
3
+ "version": "0.1.2",
4
+ "description": "n8n community node that groups messages from the same session within a time window, waiting for silence before passing them along as a single consolidated output.",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/uaiautomacao/n8n-nodes-message-debounce",
7
+ "keywords": [
8
+ "n8n-community-node-package",
9
+ "n8n",
10
+ "debounce",
11
+ "buffer",
12
+ "message",
13
+ "redis",
14
+ "chatbot",
15
+ "whatsapp",
16
+ "telegram"
17
+ ],
18
+ "author": {
19
+ "name": "U.ai Automação",
20
+ "email": "contato@uaiautomacao.com"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/uaiautomacao/n8n-nodes-message-debounce.git"
25
+ },
26
+ "main": "index.js",
27
+ "scripts": {
28
+ "build": "n8n-node build",
29
+ "dev": "n8n-node dev",
30
+ "lint": "n8n-node lint",
31
+ "lint:fix": "n8n-node lint --fix",
32
+ "release": "n8n-node release"
33
+ },
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "n8n": {
38
+ "n8nNodesApiVersion": 1,
39
+ "strict": false,
40
+ "credentials": [
41
+ "dist/credentials/RedisApi.credentials.js"
42
+ ],
43
+ "nodes": [
44
+ "dist/nodes/MessageDebounce/MessageDebounce.node.js"
45
+ ]
46
+ },
47
+ "devDependencies": {
48
+ "@n8n/node-cli": "^0.21.0",
49
+ "typescript": "~5.6.0"
50
+ },
51
+ "peerDependencies": {
52
+ "n8n-workflow": "*"
53
+ },
54
+ "engines": {
55
+ "node": ">=18.10",
56
+ "npm": ">=8.11.0"
57
+ }
58
+ }