@nam088/zca-js 1.0.0 → 3.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.
@@ -17,24 +17,24 @@ diverse, inclusive, and healthy community.
17
17
  Examples of behavior that contributes to a positive environment for our
18
18
  community include:
19
19
 
20
- * Demonstrating empathy and kindness toward other people
21
- * Being respectful of differing opinions, viewpoints, and experiences
22
- * Giving and gracefully accepting constructive feedback
23
- * Accepting responsibility and apologizing to those affected by our mistakes,
24
- and learning from the experience
25
- * Focusing on what is best not just for us as individuals, but for the
26
- overall community
20
+ - Demonstrating empathy and kindness toward other people
21
+ - Being respectful of differing opinions, viewpoints, and experiences
22
+ - Giving and gracefully accepting constructive feedback
23
+ - Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ - Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
27
 
28
28
  Examples of unacceptable behavior include:
29
29
 
30
- * The use of sexualized language or imagery, and sexual attention or
31
- advances of any kind
32
- * Trolling, insulting or derogatory comments, and personal or political attacks
33
- * Public or private harassment
34
- * Publishing others' private information, such as a physical or email
35
- address, without their explicit permission
36
- * Other conduct which could reasonably be considered inappropriate in a
37
- professional setting
30
+ - The use of sexualized language or imagery, and sexual attention or
31
+ advances of any kind
32
+ - Trolling, insulting or derogatory comments, and personal or political attacks
33
+ - Public or private harassment
34
+ - Publishing others' private information, such as a physical or email
35
+ address, without their explicit permission
36
+ - Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
38
 
39
39
  ## Enforcement Responsibilities
40
40
 
@@ -60,13 +60,14 @@ representative at an online or offline event.
60
60
 
61
61
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
62
  reported to the community leaders responsible for enforcement through:
63
- - **GitHub Issues**: Create a private issue with the `[CONDUCT]` label
64
- - **GitHub Discussions**: Use the "Community" category for general concerns
65
- - **Direct Contact**: Reach out to any team member through GitHub
66
- - **Team Members**:
67
- - [@RFS-ADRENO](https://github.com/RFS-ADRENO)
68
- - [@truong9c2208](https://github.com/truong9c2208)
69
- - [@JustKemForFun](https://github.com/JustKemForFun)
63
+
64
+ - **GitHub Issues**: Create a private issue with the `[CONDUCT]` label
65
+ - **GitHub Discussions**: Use the "Community" category for general concerns
66
+ - **Direct Contact**: Reach out to any team member through GitHub
67
+ - **Team Members**:
68
+ - [@RFS-ADRENO](https://github.com/RFS-ADRENO)
69
+ - [@truong9c2208](https://github.com/truong9c2208)
70
+ - [@JustKemForFun](https://github.com/JustKemForFun)
70
71
 
71
72
  All complaints will be reviewed and investigated promptly and fairly by the team.
72
73
 
@@ -113,7 +114,7 @@ Violating these terms may lead to a permanent ban.
113
114
  ### 4. Permanent Ban
114
115
 
115
116
  **Community Impact**: Demonstrating a pattern of violation of community
116
- standards, including sustained inappropriate behavior, harassment of an
117
+ standards, including sustained inappropriate behavior, harassment of an
117
118
  individual, or aggression toward or disparagement of classes of individuals.
118
119
 
119
120
  **Consequence**: A permanent ban from any sort of public interaction within
@@ -141,23 +142,23 @@ guidelines specific to our project:
141
142
 
142
143
  ### Responsible Usage
143
144
 
144
- * **Respect Zalo's Terms of Service**: While this is an unofficial library,
145
- users should be aware of and respect Zalo's terms of service
146
- * **Account Safety**: Do not encourage or provide guidance on circumventing
147
- Zalo's security measures
148
- * **Privacy**: Respect user privacy and do not share personal information
149
- obtained through the API
150
- * **Rate Limiting**: Encourage responsible usage that doesn't overload Zalo's
151
- servers
145
+ - **Respect Zalo's Terms of Service**: While this is an unofficial library,
146
+ users should be aware of and respect Zalo's terms of service
147
+ - **Account Safety**: Do not encourage or provide guidance on circumventing
148
+ Zalo's security measures
149
+ - **Privacy**: Respect user privacy and do not share personal information
150
+ obtained through the API
151
+ - **Rate Limiting**: Encourage responsible usage that doesn't overload Zalo's
152
+ servers
152
153
 
153
154
  ### Technical Discussions
154
155
 
155
- * **Security**: When discussing security-related topics, use appropriate
156
- channels and follow responsible disclosure practices
157
- * **Bugs and Issues**: Report bugs and issues through proper channels
158
- * **Documentation**: Help improve documentation and examples for the community
156
+ - **Security**: When discussing security-related topics, use appropriate
157
+ channels and follow responsible disclosure practices
158
+ - **Bugs and Issues**: Report bugs and issues through proper channels
159
+ - **Documentation**: Help improve documentation and examples for the community
159
160
 
160
161
  ---
161
162
 
162
163
  **Note**: This Code of Conduct is a living document and may be updated as our
163
- community grows and evolves.
164
+ community grows and evolves.
package/CONTRIBUTING.md CHANGED
@@ -4,17 +4,17 @@ Thank you for your interest in contributing to zca-js! This project is maintaine
4
4
 
5
5
  ## Table of Contents
6
6
 
7
- - [Code of Conduct](#code-of-conduct)
8
- - [Getting Started](#getting-started)
9
- - [Development Setup](#development-setup)
10
- - [How to Contribute](#how-to-contribute)
11
- - [Pull Request Process](#pull-request-process)
12
- - [Code Style Guidelines](#code-style-guidelines)
13
- - [Testing Guidelines](#testing-guidelines)
14
- - [Documentation Guidelines](#documentation-guidelines)
15
- - [Security Guidelines](#security-guidelines)
16
- - [Release Process](#release-process)
17
- - [Getting Help](#getting-help)
7
+ - [Code of Conduct](#code-of-conduct)
8
+ - [Getting Started](#getting-started)
9
+ - [Development Setup](#development-setup)
10
+ - [How to Contribute](#how-to-contribute)
11
+ - [Pull Request Process](#pull-request-process)
12
+ - [Code Style Guidelines](#code-style-guidelines)
13
+ - [Testing Guidelines](#testing-guidelines)
14
+ - [Documentation Guidelines](#documentation-guidelines)
15
+ - [Security Guidelines](#security-guidelines)
16
+ - [Release Process](#release-process)
17
+ - [Getting Help](#getting-help)
18
18
 
19
19
  ## Code of Conduct
20
20
 
@@ -24,22 +24,22 @@ This project adheres to our [Code of Conduct](CODE_OF_CONDUCT.md). By participat
24
24
 
25
25
  ### Prerequisites
26
26
 
27
- - Node.js >= 18.0.0
28
- - Bun (recommended) or npm
29
- - Git
27
+ - Node.js >= 18.0.0
28
+ - Bun (recommended) or npm
29
+ - Git
30
30
 
31
31
  ### Fork and Clone
32
32
 
33
33
  1. Fork this repository
34
34
  2. Clone your fork:
35
- ```bash
36
- git clone https://github.com/YOUR_USERNAME/zca-js.git
37
- cd zca-js
38
- ```
35
+ ```bash
36
+ git clone https://github.com/YOUR_USERNAME/zca-js.git
37
+ cd zca-js
38
+ ```
39
39
  3. Add upstream remote:
40
- ```bash
41
- git remote add upstream https://github.com/RFS-ADRENO/zca-js.git
42
- ```
40
+ ```bash
41
+ git remote add upstream https://github.com/RFS-ADRENO/zca-js.git
42
+ ```
43
43
 
44
44
  ## Development Setup
45
45
 
@@ -89,13 +89,13 @@ bun run prettier
89
89
 
90
90
  We welcome the following types of contributions:
91
91
 
92
- - 🐛 **Bug Reports**: Report bugs and issues
93
- - ✨ **Feature Requests**: Suggest new features
94
- - 🔧 **Code Contributions**: Fix bugs and add features
95
- - 📚 **Documentation**: Improve docs and examples
96
- - 🧪 **Tests**: Add or improve tests
97
- - 🔒 **Security**: Report security vulnerabilities
98
- - 🌐 **Translations**: Translate docs to other languages
92
+ - 🐛 **Bug Reports**: Report bugs and issues
93
+ - ✨ **Feature Requests**: Suggest new features
94
+ - 🔧 **Code Contributions**: Fix bugs and add features
95
+ - 📚 **Documentation**: Improve docs and examples
96
+ - 🧪 **Tests**: Add or improve tests
97
+ - 🔒 **Security**: Report security vulnerabilities
98
+ - 🌐 **Translations**: Translate docs to other languages
99
99
 
100
100
  ### Before You Start
101
101
 
@@ -108,38 +108,43 @@ We welcome the following types of contributions:
108
108
  ### Creating a Pull Request
109
109
 
110
110
  1. **Create a feature branch**:
111
- ```bash
112
- git checkout -b feature/your-feature-name
113
- # or
114
- git checkout -b fix/your-bug-fix
115
- ```
111
+
112
+ ```bash
113
+ git checkout -b feature/your-feature-name
114
+ # or
115
+ git checkout -b fix/your-bug-fix
116
+ ```
116
117
 
117
118
  2. **Make your changes**:
118
- - Follow code style guidelines
119
- - Add tests for new functionality
120
- - Update documentation if needed
119
+
120
+ - Follow code style guidelines
121
+ - Add tests for new functionality
122
+ - Update documentation if needed
121
123
 
122
124
  3. **Test your changes**:
123
- ```bash
124
- bun run build
125
- bun run test:feat
126
- ```
125
+
126
+ ```bash
127
+ bun run build
128
+ bun run test:feat
129
+ ```
127
130
 
128
131
  4. **Commit your changes**:
129
- ```bash
130
- git add .
131
- git commit -m "feat: add new API method for group management"
132
- ```
132
+
133
+ ```bash
134
+ git add .
135
+ git commit -m "feat: add new API method for group management"
136
+ ```
133
137
 
134
138
  5. **Push to your fork**:
135
- ```bash
136
- git push origin feature/your-feature-name
137
- ```
139
+
140
+ ```bash
141
+ git push origin feature/your-feature-name
142
+ ```
138
143
 
139
144
  6. **Create a Pull Request**:
140
- - Use the provided PR template
141
- - Link related issues
142
- - Provide clear description of changes
145
+ - Use the provided PR template
146
+ - Link related issues
147
+ - Provide clear description of changes
143
148
 
144
149
  ### PR Review Process
145
150
 
@@ -153,11 +158,11 @@ We welcome the following types of contributions:
153
158
 
154
159
  ### TypeScript Guidelines
155
160
 
156
- - Use TypeScript strict mode
157
- - Prefer interfaces over types for object shapes
158
- - Use meaningful variable and function names
159
- - Add JSDoc comments for public APIs
160
- - Use async/await over Promises when possible
161
+ - Use TypeScript strict mode
162
+ - Prefer interfaces over types for object shapes
163
+ - Use meaningful variable and function names
164
+ - Add JSDoc comments for public APIs
165
+ - Use async/await over Promises when possible
161
166
 
162
167
  ### Code Organization
163
168
 
@@ -222,52 +227,55 @@ zca-js/
222
227
 
223
228
  ### Key Directories Explained
224
229
 
225
- - **`src/apis/`**: Contains all API method implementations (~100 files)
230
+ - **`src/apis/`**: Contains all API method implementations (~100 files)
226
231
 
227
- - **`src/models/`**: TypeScript interfaces and type definitions
228
- - Core data structures for messages, events, and API responses
229
- - Ensures type safety across the application
232
+ - **`src/models/`**: TypeScript interfaces and type definitions
230
233
 
231
- - **`src/Errors/`**: Custom error handling
232
- - `ZaloApiError.ts`: Handles API-specific errors
233
- - Provides consistent error handling across the library
234
+ - Core data structures for messages, events, and API responses
235
+ - Ensures type safety across the application
234
236
 
235
- - **`examples/`**: Usage examples and demonstrations
236
- - `echobot.ts`: Complete example of a Zalo bot implementation
237
+ - **`src/Errors/`**: Custom error handling
237
238
 
238
- - **`test/`**: Test suites and test assets
239
- - Feature tests for core functionality
240
- - Integration tests for API methods
239
+ - `ZaloApiError.ts`: Handles API-specific errors
240
+ - Provides consistent error handling across the library
241
+
242
+ - **`examples/`**: Usage examples and demonstrations
243
+
244
+ - `echobot.ts`: Complete example of a Zalo bot implementation
245
+
246
+ - **`test/`**: Test suites and test assets
247
+ - Feature tests for core functionality
248
+ - Integration tests for API methods
241
249
 
242
250
  ### Naming Conventions
243
251
 
244
- - **Files**: camelCase (e.g., `sendMessage.ts`)
245
- - **Classes**: PascalCase (e.g., `ZaloApiError`)
246
- - **Functions**: camelCase (e.g., `sendMessage`)
247
- - **Constants**: UPPER_SNAKE_CASE (e.g., `API_BASE_URL`)
248
- - **Interfaces**: PascalCase with `I` prefix (e.g., `IMessage`)
252
+ - **Files**: camelCase (e.g., `sendMessage.ts`)
253
+ - **Classes**: PascalCase (e.g., `ZaloApiError`)
254
+ - **Functions**: camelCase (e.g., `sendMessage`)
255
+ - **Constants**: UPPER_SNAKE_CASE (e.g., `API_BASE_URL`)
256
+ - **Interfaces**: PascalCase with `I` prefix (e.g., `IMessage`)
249
257
 
250
258
  ### Error Handling
251
259
 
252
260
  ```typescript
253
261
  // Good
254
262
  try {
255
- const result = await api.sendMessage(message);
256
- return result;
263
+ const result = await api.sendMessage(message);
264
+ return result;
257
265
  } catch (error) {
258
- if (error instanceof ZaloApiError) {
259
- throw error;
260
- }
261
- throw new ZaloApiError(`Failed to send message: ${error.message}`);
266
+ if (error instanceof ZaloApiError) {
267
+ throw error;
268
+ }
269
+ throw new ZaloApiError(`Failed to send message: ${error.message}`);
262
270
  }
263
271
 
264
272
  // Bad
265
273
  try {
266
- const result = await api.sendMessage(message);
267
- return result;
274
+ const result = await api.sendMessage(message);
275
+ return result;
268
276
  } catch (error) {
269
- console.error(error);
270
- return null;
277
+ console.error(error);
278
+ return null;
271
279
  }
272
280
  ```
273
281
 
@@ -276,32 +284,32 @@ try {
276
284
  ### Test Structure
277
285
 
278
286
  ```typescript
279
- describe('API Method', () => {
280
- beforeEach(() => {
281
- // Setup
282
- });
283
-
284
- afterEach(() => {
285
- // Cleanup
286
- });
287
-
288
- it('should handle success case', async () => {
289
- // Test implementation
290
- });
291
-
292
- it('should handle error case', async () => {
293
- // Test error handling
294
- });
287
+ describe("API Method", () => {
288
+ beforeEach(() => {
289
+ // Setup
290
+ });
291
+
292
+ afterEach(() => {
293
+ // Cleanup
294
+ });
295
+
296
+ it("should handle success case", async () => {
297
+ // Test implementation
298
+ });
299
+
300
+ it("should handle error case", async () => {
301
+ // Test error handling
302
+ });
295
303
  });
296
304
  ```
297
305
 
298
306
  ### Testing Best Practices
299
307
 
300
- - Test both success and failure scenarios
301
- - Mock external dependencies
302
- - Use descriptive test names
303
- - Keep tests independent
304
- - Test edge cases and error conditions
308
+ - Test both success and failure scenarios
309
+ - Mock external dependencies
310
+ - Use descriptive test names
311
+ - Keep tests independent
312
+ - Test edge cases and error conditions
305
313
 
306
314
  ### Running Tests
307
315
 
@@ -320,12 +328,12 @@ bun run test:coverage
320
328
 
321
329
  ### API Documentation
322
330
 
323
- - Document all public methods with JSDoc
324
- - Include parameter types and descriptions
325
- - Provide usage examples
326
- - Document error conditions
331
+ - Document all public methods with JSDoc
332
+ - Include parameter types and descriptions
333
+ - Provide usage examples
334
+ - Document error conditions
327
335
 
328
- ```typescript
336
+ ````typescript
329
337
  /**
330
338
  * Sends a message to a specific thread
331
339
  * @param message - The message object containing content and metadata
@@ -343,24 +351,24 @@ bun run test:coverage
343
351
  * ```
344
352
  */
345
353
  async sendMessage(message: IMessage, threadId: string, threadType: ThreadType): Promise<Message>
346
- ```
354
+ ````
347
355
 
348
356
  ### README Updates
349
357
 
350
- - Update README.md for new features
351
- - Add examples for new APIs
352
- - Update installation instructions if needed
353
- - Keep the table of contents updated
358
+ - Update README.md for new features
359
+ - Add examples for new APIs
360
+ - Update installation instructions if needed
361
+ - Keep the table of contents updated
354
362
 
355
363
  ## Security Guidelines
356
364
 
357
365
  ### Security Best Practices
358
366
 
359
- - Never commit sensitive data (tokens, passwords, etc.)
360
- - Use environment variables for configuration
361
- - Validate all user inputs
362
- - Follow the principle of least privilege
363
- - Report security issues privately
367
+ - Never commit sensitive data (tokens, passwords, etc.)
368
+ - Use environment variables for configuration
369
+ - Validate all user inputs
370
+ - Follow the principle of least privilege
371
+ - Report security issues privately
364
372
 
365
373
  ### Security Reporting
366
374
 
@@ -376,18 +384,18 @@ If you discover a security vulnerability:
376
384
  ```typescript
377
385
  // Good - Validate inputs
378
386
  function sendMessage(content: string, threadId: string) {
379
- if (!content || typeof content !== 'string') {
380
- throw new ZaloApiError('Content must be a non-empty string');
381
- }
382
- if (!threadId || typeof threadId !== 'string') {
383
- throw new ZaloApiError('ThreadId must be a non-empty string');
384
- }
385
- // Implementation
387
+ if (!content || typeof content !== "string") {
388
+ throw new ZaloApiError("Content must be a non-empty string");
389
+ }
390
+ if (!threadId || typeof threadId !== "string") {
391
+ throw new ZaloApiError("ThreadId must be a non-empty string");
392
+ }
393
+ // Implementation
386
394
  }
387
395
 
388
396
  // Bad - No validation
389
397
  function sendMessage(content: any, threadId: any) {
390
- // Implementation without validation
398
+ // Implementation without validation
391
399
  }
392
400
  ```
393
401
 
@@ -397,17 +405,17 @@ function sendMessage(content: any, threadId: any) {
397
405
 
398
406
  We follow [Semantic Versioning](https://semver.org/):
399
407
 
400
- - **MAJOR**: Breaking changes
401
- - **MINOR**: New features (backward compatible)
402
- - **PATCH**: Bug fixes (backward compatible)
408
+ - **MAJOR**: Breaking changes
409
+ - **MINOR**: New features (backward compatible)
410
+ - **PATCH**: Bug fixes (backward compatible)
403
411
 
404
412
  ### Release Checklist
405
413
 
406
- - [ ] All tests pass
407
- - [ ] Documentation is updated
408
- - [ ] Version is bumped in package.json
409
- - [ ] Build is successful
410
- - [ ] Release notes are prepared
414
+ - [ ] All tests pass
415
+ - [ ] Documentation is updated
416
+ - [ ] Version is bumped in package.json
417
+ - [ ] Build is successful
418
+ - [ ] Release notes are prepared
411
419
 
412
420
  ### Publishing
413
421
 
@@ -426,23 +434,23 @@ npm publish
426
434
 
427
435
  ### Communication Channels
428
436
 
429
- - **GitHub Issues**: For bug reports and feature requests
430
- - **GitHub Discussions**: For questions and general discussion
431
- - **Pull Requests**: For code contributions
432
- - **Security Issues**: Use `[SECURITY]` label
437
+ - **GitHub Issues**: For bug reports and feature requests
438
+ - **GitHub Discussions**: For questions and general discussion
439
+ - **Pull Requests**: For code contributions
440
+ - **Security Issues**: Use `[SECURITY]` label
433
441
 
434
442
  ### Team Members
435
443
 
436
- - [@RFS-ADRENO](https://github.com/RFS-ADRENO)
437
- - [@truong9c2208](https://github.com/truong9c2208)
438
- - [@JustKemForFun](https://github.com/JustKemForFun)
444
+ - [@RFS-ADRENO](https://github.com/RFS-ADRENO)
445
+ - [@truong9c2208](https://github.com/truong9c2208)
446
+ - [@JustKemForFun](https://github.com/JustKemForFun)
439
447
 
440
448
  ### Resources
441
449
 
442
- - [API Documentation](https://tdung.gitbook.io/zca-js)
443
- - [Examples](examples/)
444
- - [Security Policy](SECURITY.md)
445
- - [Code of Conduct](CODE_OF_CONDUCT.md)
450
+ - [API Documentation](https://tdung.gitbook.io/zca-js)
451
+ - [Examples](examples/)
452
+ - [Security Policy](SECURITY.md)
453
+ - [Code of Conduct](CODE_OF_CONDUCT.md)
446
454
 
447
455
  ## Special Considerations for zca-js
448
456
 
@@ -451,20 +459,20 @@ npm publish
451
459
  > [!IMPORTANT]
452
460
  > ⚠️ zca-js is an unofficial API library for Zalo. Please be aware of:
453
461
 
454
- - **Account Risk**: Using this API may result in account suspension
455
- - **Terms of Service**: Respect Zalo's ToS in your contributions
456
- - **Rate Limiting**: Be mindful of API usage limits
457
- - **Privacy**: Protect user privacy and data
462
+ - **Account Risk**: Using this API may result in account suspension
463
+ - **Terms of Service**: Respect Zalo's ToS in your contributions
464
+ - **Rate Limiting**: Be mindful of API usage limits
465
+ - **Privacy**: Protect user privacy and data
458
466
 
459
467
  ### Responsible Development
460
468
 
461
- - Test changes thoroughly before submitting
462
- - Avoid introducing features that could harm users
463
- - Consider the impact on Zalo's infrastructure
464
- - Document any risks or limitations
469
+ - Test changes thoroughly before submitting
470
+ - Avoid introducing features that could harm users
471
+ - Consider the impact on Zalo's infrastructure
472
+ - Document any risks or limitations
465
473
 
466
474
  ---
467
475
 
468
476
  **Thank you for contributing to zca-js!** 🚀
469
477
 
470
- Your contributions help make this library better for the entire community.
478
+ Your contributions help make this library better for the entire community.
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  ## Table of Contents
12
12
 
13
13
  - [Installation](#installation)
14
- - [Migrate to V2](#migrate-to-v2)
14
+ - [Migrate to V2](#migrate-to-v2)
15
15
  - [Documentation](#documentation)
16
16
  - [Basic Usages](#basic-usages)
17
17
  - [Login](#login)
@@ -180,13 +180,13 @@ See [examples](examples) folder for more details.
180
180
 
181
181
  <div align="center">
182
182
 
183
- | Repository | Description |
184
- | :--- | :--- |
185
- | [**ZaloDataExtractor**](https://github.com/JustKemForFun/ZaloDataExtractor) | A browser `Extension` to extract IMEI, cookies, and user agent from Zalo Web. |
186
- | [**MultiZlogin**](https://github.com/ChickenAI/multizlogin) | A multi-account Zalo management system that lets you log in to and manage multiple accounts simultaneously, with proxy and webhook integration. |
187
- | [**n8n-nodes-zalo-tools**](https://github.com/ChickenAI/zalo-node) | N8N node for personal Zalo account. |
188
- | [**Zalo-F12**](https://github.com/ElectroHeavenVN/Zalo-F12) | A collection of JavaScript code snippets to paste into DevTools to change how Zalo Web/PC works. |
189
- | [**Zalo-F12-Tools**](https://github.com/JustKemForFun/Zalo-F12-Tools) | Toggle hidden modes for Zalo Web. |
183
+ | Repository | Description |
184
+ | :-------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |
185
+ | [**ZaloDataExtractor**](https://github.com/JustKemForFun/ZaloDataExtractor) | A browser `Extension` to extract IMEI, cookies, and user agent from Zalo Web. |
186
+ | [**MultiZlogin**](https://github.com/ChickenAI/multizlogin) | A multi-account Zalo management system that lets you log in to and manage multiple accounts simultaneously, with proxy and webhook integration. |
187
+ | [**n8n-nodes-zalo-tools**](https://github.com/ChickenAI/zalo-node) | N8N node for personal Zalo account. |
188
+ | [**Zalo-F12**](https://github.com/ElectroHeavenVN/Zalo-F12) | A collection of JavaScript code snippets to paste into DevTools to change how Zalo Web/PC works. |
189
+ | [**Zalo-F12-Tools**](https://github.com/JustKemForFun/Zalo-F12-Tools) | Toggle hidden modes for Zalo Web. |
190
190
 
191
191
  </div>
192
192
 
@@ -196,12 +196,12 @@ See [examples](examples) folder for more details.
196
196
 
197
197
  We welcome contributions from the community! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details on how to:
198
198
 
199
- - 🐛 Report bugs and issues
200
- - ✨ Suggest new features
201
- - 🔧 Submit code contributions
202
- - 📚 Improve documentation
203
- - 🧪 Add or improve tests
204
- - 🔒 Report security vulnerabilities
199
+ - 🐛 Report bugs and issues
200
+ - ✨ Suggest new features
201
+ - 🔧 Submit code contributions
202
+ - 📚 Improve documentation
203
+ - 🧪 Add or improve tests
204
+ - 🔒 Report security vulnerabilities
205
205
 
206
206
  For more information, please read our [Code of Conduct](CODE_OF_CONDUCT.md) and [Security Policy](SECURITY.md) before participating.
207
207
 
@@ -215,11 +215,11 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
215
215
 
216
216
  ## **Support Us**
217
217
 
218
- - ⭐ **Star our repositories** if you find them useful!
219
- - 🔄 **Share** with your network to help us grow
220
- - 💡 **Contribute** your ideas and code
221
- - ☕ **A coffee**:
222
- - [Buy Me a Coffee](https://ko-fi.com/grosse)
223
- - [Paypal](https://www.paypal.com/paypalme/dungto213)
224
- - [VietQR](https://github.com/user-attachments/assets/e1f319d6-9d11-4082-8248-55b55e645caa)
225
- - [Momo](https://me.momo.vn/gMIMulsaUqsbf6iAiXt3)
218
+ - ⭐ **Star our repositories** if you find them useful!
219
+ - 🔄 **Share** with your network to help us grow
220
+ - 💡 **Contribute** your ideas and code
221
+ - ☕ **A coffee**:
222
+ - [Buy Me a Coffee](https://ko-fi.com/grosse)
223
+ - [Paypal](https://www.paypal.com/paypalme/dungto213)
224
+ - [VietQR](https://github.com/user-attachments/assets/e1f319d6-9d11-4082-8248-55b55e645caa)
225
+ - [Momo](https://me.momo.vn/gMIMulsaUqsbf6iAiXt3)