@cexy/hoonfca 1.0.1 → 1.0.3

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 (170) hide show
  1. package/.travis.yml +6 -0
  2. package/LICENSE-MIT +21 -0
  3. package/index.d.ts +620 -0
  4. package/index.js +778 -1
  5. package/package.json +31 -84
  6. package/src/{apis/addExternalModule.js → addExternalModule.js} +4 -5
  7. package/src/addUserToGroup.js +113 -0
  8. package/src/changeAdminStatus.js +95 -0
  9. package/src/changeApprovalMode.js +79 -0
  10. package/src/changeArchivedStatus.js +55 -0
  11. package/src/changeBio.js +76 -0
  12. package/src/changeBlockedStatus.js +47 -0
  13. package/src/changeBlockedStatusMqtt.js +86 -0
  14. package/src/changeGroupImage.js +133 -0
  15. package/src/changeNickname.js +59 -0
  16. package/src/changeThreadColor.js +71 -0
  17. package/src/{apis/changeThreadEmoji.js → changeThreadEmoji.js} +8 -6
  18. package/src/createNewGroup.js +88 -0
  19. package/src/createPoll.js +130 -0
  20. package/src/deleteMessage.js +56 -0
  21. package/src/deleteThread.js +56 -0
  22. package/src/editMessage.js +63 -0
  23. package/src/forwardAttachment.js +60 -0
  24. package/src/forwardMessage.js +63 -0
  25. package/src/getCurrentUserID.js +7 -0
  26. package/src/getEmojiUrl.js +29 -0
  27. package/src/getFriendsList.js +84 -0
  28. package/src/getGroupsList.js +83 -0
  29. package/src/getMarketplace.js +84 -0
  30. package/src/getNotifications.js +86 -0
  31. package/src/getPagesList.js +83 -0
  32. package/src/getStories.js +88 -0
  33. package/src/getThreadHistory.js +647 -0
  34. package/src/getThreadInfo.js +222 -0
  35. package/src/getThreadList.js +292 -0
  36. package/src/getThreadPictures.js +79 -0
  37. package/src/getUserID.js +66 -0
  38. package/src/getUserInfo.js +128 -0
  39. package/src/handleFriendRequest.js +57 -0
  40. package/src/handleMessageRequest.js +65 -0
  41. package/src/{apis/httpGet.js → httpGet.js} +15 -20
  42. package/src/httpPost.js +58 -0
  43. package/src/listenMqtt.js +1018 -0
  44. package/src/logout.js +75 -0
  45. package/src/markAsDelivered.js +58 -0
  46. package/src/{apis/markAsRead.js → markAsRead.js} +19 -30
  47. package/src/markAsReadAll.js +50 -0
  48. package/src/markAsSeen.js +61 -0
  49. package/src/muteThread.js +52 -0
  50. package/src/pinMessage.js +61 -0
  51. package/src/removeUserFromGroup.js +79 -0
  52. package/src/resolvePhotoUrl.js +45 -0
  53. package/src/searchForThread.js +53 -0
  54. package/src/searchUsers.js +89 -0
  55. package/src/sendComment.js +161 -0
  56. package/src/sendMessage.js +457 -0
  57. package/src/sendTypingIndicator.js +179 -0
  58. package/src/setBio.js +86 -0
  59. package/src/setMessageReaction.js +186 -0
  60. package/src/setPostReaction.js +71 -0
  61. package/src/setTheme.js +313 -0
  62. package/src/setTitle.js +90 -0
  63. package/src/shareContact.js +53 -0
  64. package/src/shareLink.js +62 -0
  65. package/src/threadColors.js +57 -0
  66. package/src/unfriend.js +53 -0
  67. package/src/unsendMessage.js +104 -0
  68. package/utils.js +1447 -0
  69. package/LICENSE +0 -3
  70. package/README.md +0 -491
  71. package/examples/login-with-cookies.js +0 -102
  72. package/examples/verify.js +0 -70
  73. package/src/apis/addUserToGroup.js +0 -108
  74. package/src/apis/changeAdminStatus.js +0 -148
  75. package/src/apis/changeArchivedStatus.js +0 -61
  76. package/src/apis/changeAvatar.js +0 -103
  77. package/src/apis/changeBio.js +0 -69
  78. package/src/apis/changeBlockedStatus.js +0 -54
  79. package/src/apis/changeGroupImage.js +0 -136
  80. package/src/apis/changeThreadColor.js +0 -116
  81. package/src/apis/comment.js +0 -207
  82. package/src/apis/createAITheme.js +0 -129
  83. package/src/apis/createNewGroup.js +0 -79
  84. package/src/apis/createPoll.js +0 -73
  85. package/src/apis/deleteMessage.js +0 -44
  86. package/src/apis/deleteThread.js +0 -52
  87. package/src/apis/e2ee.js +0 -17
  88. package/src/apis/editMessage.js +0 -70
  89. package/src/apis/emoji.js +0 -124
  90. package/src/apis/fetchThemeData.js +0 -82
  91. package/src/apis/follow.js +0 -81
  92. package/src/apis/forwardMessage.js +0 -52
  93. package/src/apis/friend.js +0 -243
  94. package/src/apis/gcmember.js +0 -122
  95. package/src/apis/gcname.js +0 -123
  96. package/src/apis/gcrule.js +0 -119
  97. package/src/apis/getAccess.js +0 -111
  98. package/src/apis/getBotInfo.js +0 -88
  99. package/src/apis/getBotInitialData.js +0 -43
  100. package/src/apis/getFriendsList.js +0 -79
  101. package/src/apis/getMessage.js +0 -423
  102. package/src/apis/getTheme.js +0 -95
  103. package/src/apis/getThemeInfo.js +0 -116
  104. package/src/apis/getThreadHistory.js +0 -239
  105. package/src/apis/getThreadInfo.js +0 -267
  106. package/src/apis/getThreadList.js +0 -232
  107. package/src/apis/getThreadPictures.js +0 -58
  108. package/src/apis/getUserID.js +0 -117
  109. package/src/apis/getUserInfo.js +0 -513
  110. package/src/apis/getUserInfoV2.js +0 -146
  111. package/src/apis/handleMessageRequest.js +0 -50
  112. package/src/apis/httpPost.js +0 -89
  113. package/src/apis/httpPostFormData.js +0 -69
  114. package/src/apis/listenMqtt.js +0 -1236
  115. package/src/apis/listenSpeed.js +0 -179
  116. package/src/apis/logout.js +0 -87
  117. package/src/apis/markAsDelivered.js +0 -47
  118. package/src/apis/markAsReadAll.js +0 -40
  119. package/src/apis/markAsSeen.js +0 -70
  120. package/src/apis/mqttDeltaValue.js +0 -278
  121. package/src/apis/muteThread.js +0 -45
  122. package/src/apis/nickname.js +0 -132
  123. package/src/apis/notes.js +0 -163
  124. package/src/apis/pinMessage.js +0 -150
  125. package/src/apis/produceMetaTheme.js +0 -180
  126. package/src/apis/realtime.js +0 -182
  127. package/src/apis/removeUserFromGroup.js +0 -117
  128. package/src/apis/resolvePhotoUrl.js +0 -58
  129. package/src/apis/searchForThread.js +0 -154
  130. package/src/apis/sendMessage.js +0 -354
  131. package/src/apis/sendMessageMqtt.js +0 -249
  132. package/src/apis/sendTypingIndicator.js +0 -91
  133. package/src/apis/setMessageReaction.js +0 -27
  134. package/src/apis/setMessageReactionMqtt.js +0 -61
  135. package/src/apis/setThreadTheme.js +0 -260
  136. package/src/apis/setThreadThemeMqtt.js +0 -94
  137. package/src/apis/share.js +0 -107
  138. package/src/apis/shareContact.js +0 -66
  139. package/src/apis/stickers.js +0 -257
  140. package/src/apis/story.js +0 -181
  141. package/src/apis/theme.js +0 -233
  142. package/src/apis/unfriend.js +0 -47
  143. package/src/apis/unsendMessage.js +0 -17
  144. package/src/engine/client.js +0 -92
  145. package/src/engine/models/buildAPI.js +0 -152
  146. package/src/engine/models/loginHelper.js +0 -519
  147. package/src/engine/models/setOptions.js +0 -88
  148. package/src/security/e2ee.js +0 -109
  149. package/src/types/index.d.ts +0 -498
  150. package/src/utils/antiSuspension.js +0 -506
  151. package/src/utils/auth-helpers.js +0 -149
  152. package/src/utils/autoReLogin.js +0 -336
  153. package/src/utils/axios.js +0 -436
  154. package/src/utils/cache.js +0 -54
  155. package/src/utils/clients.js +0 -282
  156. package/src/utils/constants.js +0 -410
  157. package/src/utils/formatters/data/formatAttachment.js +0 -370
  158. package/src/utils/formatters/data/formatDelta.js +0 -109
  159. package/src/utils/formatters/index.js +0 -159
  160. package/src/utils/formatters/value/formatCookie.js +0 -91
  161. package/src/utils/formatters/value/formatDate.js +0 -36
  162. package/src/utils/formatters/value/formatID.js +0 -16
  163. package/src/utils/formatters.js +0 -1373
  164. package/src/utils/headers.js +0 -230
  165. package/src/utils/index.js +0 -153
  166. package/src/utils/monitoring.js +0 -333
  167. package/src/utils/rateLimiter.js +0 -319
  168. package/src/utils/tokenRefresh.js +0 -657
  169. package/src/utils/user-agents.js +0 -238
  170. package/src/utils/validation.js +0 -157
@@ -1,238 +0,0 @@
1
- "use strict";
2
- const { getRandom } = require("./constants");
3
-
4
- const BROWSER_DATA = {
5
- windows: {
6
- platform: "Windows NT 10.0; Win64; x64",
7
- chromeVersions: ["139.0.0.0", "131.0.6778.86", "130.0.6723.92", "129.0.6668.101", "128.0.6613.120", "127.0.6533.120"],
8
- edgeVersions: ["139.0.0.0", "131.0.2903.51", "130.0.2849.68", "129.0.2792.89"],
9
- platformVersion: '"15.0.0"'
10
- },
11
- mac: {
12
- platform: "Macintosh; Intel Mac OS X 10_15_7",
13
- chromeVersions: ["139.0.0.0", "131.0.6778.86", "130.0.6723.92", "129.0.6668.101", "128.0.6613.120", "127.0.6533.120"],
14
- edgeVersions: ["139.0.0.0", "131.0.2903.51", "130.0.2849.68", "129.0.2792.89"],
15
- platformVersion: '"14.7.0"'
16
- },
17
- linux: {
18
- platform: "X11; Linux x86_64",
19
- chromeVersions: ["139.0.0.0", "131.0.6778.86", "130.0.6723.92", "129.0.6668.101", "128.0.6613.120"],
20
- edgeVersions: ["139.0.0.0", "131.0.2903.51", "130.0.2849.68"],
21
- platformVersion: '""'
22
- }
23
- };
24
-
25
- const defaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36";
26
-
27
- /**
28
- * Generates a realistic, randomized User-Agent string and related Sec-CH headers.
29
- * Supports Chrome and Edge browsers across Windows, macOS, and Linux.
30
- * @returns {{userAgent: string, secChUa: string, secChUaFullVersionList: string, secChUaPlatform: string, secChUaPlatformVersion: string, browser: string}}
31
- */
32
- function randomUserAgent() {
33
- const os = getRandom(Object.keys(BROWSER_DATA));
34
- const data = BROWSER_DATA[os];
35
-
36
- const useEdge = Math.random() > 0.7 && data.edgeVersions;
37
- const versions = useEdge ? data.edgeVersions : data.chromeVersions;
38
- const version = getRandom(versions);
39
- const majorVersion = version.split('.')[0];
40
- const browserName = useEdge ? 'Microsoft Edge' : 'Google Chrome';
41
- const browserIdentifier = useEdge ? 'Edg' : 'Chrome';
42
-
43
- const userAgent = useEdge
44
- ? `Mozilla/5.0 (${data.platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version} Safari/537.36 Edg/${version}`
45
- : `Mozilla/5.0 (${data.platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version} Safari/537.36`;
46
-
47
- const greeseValue = Math.random() > 0.5 ? '99' : '8';
48
- const brands = useEdge ? [
49
- `"Chromium";v="${majorVersion}"`,
50
- `"Not(A:Brand";v="${greeseValue}"`,
51
- `"${browserName}";v="${majorVersion}"`
52
- ] : [
53
- `"${browserName}";v="${majorVersion}"`,
54
- `"Not;A=Brand";v="${greeseValue}"`,
55
- `"Chromium";v="${majorVersion}"`
56
- ];
57
-
58
- const secChUa = brands.join(', ');
59
- const secChUaFullVersionList = brands.map(b => {
60
- const match = b.match(/v="(\d+)"/);
61
- if (match && match[1] === majorVersion) {
62
- return b.replace(`v="${majorVersion}"`, `v="${version}"`);
63
- }
64
- return b;
65
- }).join(', ');
66
-
67
- const platformName = os === 'windows' ? 'Windows' : os === 'mac' ? 'macOS' : 'Linux';
68
-
69
- return {
70
- userAgent,
71
- secChUa,
72
- secChUaFullVersionList,
73
- secChUaPlatform: `"${platformName}"`,
74
- secChUaPlatformVersion: data.platformVersion,
75
- browser: browserName
76
- };
77
- }
78
-
79
- function randomInt(min, max) {
80
- return Math.floor(Math.random() * (max - min + 1)) + min;
81
- }
82
-
83
- function randomChoice(arr) {
84
- return arr[Math.floor(Math.random() * arr.length)];
85
- }
86
-
87
- function randomBuildId() {
88
- const prefixes = ["QP1A", "RP1A", "SP1A", "TP1A", "UP1A", "AP4A"];
89
- return `${randomChoice(prefixes)}.${randomInt(180000, 250000)}.${randomInt(10, 99)}`;
90
- }
91
-
92
- function randomResolution() {
93
- const presets = [
94
- { width: 720, height: 1280, density: 2.0 },
95
- { width: 1080, height: 1920, density: 2.625 },
96
- { width: 1080, height: 2400, density: 3.0 },
97
- { width: 1440, height: 3040, density: 3.5 },
98
- { width: 1440, height: 3200, density: 4.0 }
99
- ];
100
- return randomChoice(presets);
101
- }
102
-
103
- function randomFbav() {
104
- return `${randomInt(390, 499)}.${randomInt(0, 3)}.${randomInt(0, 2)}.${randomInt(10, 60)}.${randomInt(100, 999)}`;
105
- }
106
-
107
- function randomOrcaUA() {
108
- const androidVersions = ["8.1.0", "9", "10", "11", "12", "13", "14"];
109
- const devices = [
110
- { brand: "samsung", model: "SM-G996B" },
111
- { brand: "samsung", model: "SM-S908E" },
112
- { brand: "Xiaomi", model: "M2101K9AG" },
113
- { brand: "OPPO", model: "CPH2219" },
114
- { brand: "vivo", model: "V2109" },
115
- { brand: "HUAWEI", model: "VOG-L29" },
116
- { brand: "asus", model: "ASUS_I001DA" },
117
- { brand: "Google", model: "Pixel 6" },
118
- { brand: "realme", model: "RMX2170" }
119
- ];
120
- const carriers = [
121
- "Viettel Telecom", "Mobifone", "Vinaphone",
122
- "T-Mobile", "Verizon", "AT&T",
123
- "Telkomsel", "Jio", "NTT DOCOMO",
124
- "Vodafone", "Orange"
125
- ];
126
- const locales = [
127
- "vi_VN", "en_US", "en_GB", "id_ID",
128
- "th_TH", "fr_FR", "de_DE", "es_ES", "pt_BR"
129
- ];
130
- const archs = ["arm64-v8a", "armeabi-v7a"];
131
-
132
- const androidVersion = randomChoice(androidVersions);
133
- const device = randomChoice(devices);
134
- const buildId = randomBuildId();
135
- const resolution = randomResolution();
136
- const fbav = randomFbav();
137
- const fbbv = randomInt(320000000, 520000000);
138
- const arch = `${randomChoice(archs)}:${randomChoice(archs)}`;
139
- const selectedLocale = randomChoice(locales);
140
- const selectedCarrier = randomChoice(carriers);
141
-
142
- const userAgent = `Dalvik/2.1.0 (Linux; U; Android ${androidVersion}; ${device.model} Build/${buildId}) ` +
143
- `[FBAN/Orca-Android;FBAV/${fbav};FBPN/com.facebook.orca;` +
144
- `FBLC/${selectedLocale};FBBV/${fbbv};FBCR/${selectedCarrier};` +
145
- `FBMF/${device.brand};FBBD/${device.brand};FBDV/${device.model};` +
146
- `FBSV/${androidVersion};FBCA/${arch};` +
147
- `FBDM/{density=${resolution.density.toFixed(1)},width=${resolution.width},height=${resolution.height}};` +
148
- `FB_FW/1;]`;
149
-
150
- return {
151
- userAgent,
152
- androidVersion,
153
- device,
154
- buildId,
155
- resolution,
156
- fbav,
157
- fbbv,
158
- locale: selectedLocale,
159
- carrier: selectedCarrier
160
- };
161
- }
162
-
163
- function generateUserAgentByPersona(persona = 'desktop', options = {}) {
164
- if (persona === 'android' || persona === 'mobile') {
165
- if (options.cachedAndroidUA && options.cachedAndroidDevice) {
166
- return {
167
- userAgent: options.cachedAndroidUA,
168
- androidVersion: options.cachedAndroidVersion,
169
- device: options.cachedAndroidDevice,
170
- buildId: options.cachedAndroidBuildId,
171
- resolution: options.cachedAndroidResolution,
172
- fbav: options.cachedAndroidFbav,
173
- fbbv: options.cachedAndroidFbbv,
174
- locale: options.cachedAndroidLocale,
175
- carrier: options.cachedAndroidCarrier,
176
- persona: 'android'
177
- };
178
- }
179
-
180
- const androidData = randomOrcaUA();
181
- return {
182
- ...androidData,
183
- persona: 'android'
184
- };
185
- }
186
-
187
- if (options.cachedUserAgent && options.cachedSecChUa) {
188
- return {
189
- userAgent: options.cachedUserAgent,
190
- secChUa: options.cachedSecChUa,
191
- secChUaFullVersionList: options.cachedSecChUaFullVersionList,
192
- secChUaPlatform: options.cachedSecChUaPlatform,
193
- secChUaPlatformVersion: options.cachedSecChUaPlatformVersion,
194
- browser: options.cachedBrowser || 'Google Chrome',
195
- persona: 'desktop'
196
- };
197
- }
198
-
199
- const desktopData = randomUserAgent();
200
- return {
201
- ...desktopData,
202
- persona: 'desktop'
203
- };
204
- }
205
-
206
- function cachePersonaData(options, personaData) {
207
- if (personaData.persona === 'android') {
208
- options.cachedAndroidUA = personaData.userAgent;
209
- options.cachedAndroidVersion = personaData.androidVersion;
210
- options.cachedAndroidDevice = personaData.device;
211
- options.cachedAndroidBuildId = personaData.buildId;
212
- options.cachedAndroidResolution = personaData.resolution;
213
- options.cachedAndroidFbav = personaData.fbav;
214
- options.cachedAndroidFbbv = personaData.fbbv;
215
- options.cachedAndroidLocale = personaData.locale;
216
- options.cachedAndroidCarrier = personaData.carrier;
217
- } else {
218
- options.cachedUserAgent = personaData.userAgent;
219
- options.cachedSecChUa = personaData.secChUa;
220
- options.cachedSecChUaFullVersionList = personaData.secChUaFullVersionList;
221
- options.cachedSecChUaPlatform = personaData.secChUaPlatform;
222
- options.cachedSecChUaPlatformVersion = personaData.secChUaPlatformVersion;
223
- options.cachedBrowser = personaData.browser;
224
- }
225
- return options;
226
- }
227
-
228
- module.exports = {
229
- defaultUserAgent,
230
- windowsUserAgent: defaultUserAgent,
231
- randomUserAgent,
232
- randomBuildId,
233
- randomResolution,
234
- randomFbav,
235
- randomOrcaUA,
236
- generateUserAgentByPersona,
237
- cachePersonaData,
238
- };
@@ -1,157 +0,0 @@
1
- "use strict";
2
-
3
- /**
4
- * Input validation and sanitization utilities
5
- */
6
-
7
- class InputValidator {
8
- constructor() {
9
- this.maxMessageLength = 10000;
10
- this.maxThreadNameLength = 255;
11
- this.maxNicknameLength = 50;
12
- }
13
-
14
- /**
15
- * Validate thread ID
16
- * @param {string|number} threadID
17
- * @returns {boolean}
18
- */
19
- isValidThreadID(threadID) {
20
- if (!threadID) return false;
21
- const id = String(threadID).trim();
22
- // Thread IDs are numeric, can be up to 20 digits
23
- return /^\d{1,20}$/.test(id);
24
- }
25
-
26
- /**
27
- * Validate user ID
28
- * @param {string|number} userID
29
- * @returns {boolean}
30
- */
31
- isValidUserID(userID) {
32
- return this.isValidThreadID(userID); // Same format
33
- }
34
-
35
- /**
36
- * Validate message content
37
- * @param {string|object} message
38
- * @returns {boolean}
39
- */
40
- isValidMessage(message) {
41
- if (typeof message === 'string') {
42
- return message.length > 0 && message.length <= this.maxMessageLength;
43
- }
44
- if (typeof message === 'object' && message !== null) {
45
- return message.body || message.sticker || message.attachment || message.emoji;
46
- }
47
- return false;
48
- }
49
-
50
- /**
51
- * Sanitize message content
52
- * @param {string} message
53
- * @returns {string}
54
- */
55
- sanitizeMessage(message) {
56
- if (typeof message !== 'string') return message;
57
- // Remove null bytes and control characters
58
- return message.replace(/[\x00-\x1F\x7F]/g, '').trim();
59
- }
60
-
61
- /**
62
- * Validate and sanitize thread name
63
- * @param {string} name
64
- * @returns {string|null}
65
- */
66
- sanitizeThreadName(name) {
67
- if (typeof name !== 'string') return null;
68
- const sanitized = name.trim();
69
- return sanitized.length > 0 && sanitized.length <= this.maxThreadNameLength ? sanitized : null;
70
- }
71
-
72
- /**
73
- * Validate and sanitize nickname
74
- * @param {string} nickname
75
- * @returns {string|null}
76
- */
77
- sanitizeNickname(nickname) {
78
- if (typeof nickname !== 'string') return null;
79
- const sanitized = nickname.trim();
80
- return sanitized.length > 0 && sanitized.length <= this.maxNicknameLength ? sanitized : null;
81
- }
82
-
83
- /**
84
- * Validate array of IDs
85
- * @param {Array} ids
86
- * @param {function} validator
87
- * @returns {boolean}
88
- */
89
- validateIDArray(ids, validator = this.isValidThreadID.bind(this)) {
90
- if (!Array.isArray(ids)) return false;
91
- return ids.length > 0 && ids.length <= 100 && ids.every(validator);
92
- }
93
-
94
- /**
95
- * Validate email
96
- * @param {string} email
97
- * @returns {boolean}
98
- */
99
- isValidEmail(email) {
100
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
101
- return emailRegex.test(email);
102
- }
103
-
104
- /**
105
- * Validate URL
106
- * @param {string} url
107
- * @returns {boolean}
108
- */
109
- isValidUrl(url) {
110
- try {
111
- new URL(url);
112
- return true;
113
- } catch {
114
- return false;
115
- }
116
- }
117
-
118
- /**
119
- * Validate file path (basic check)
120
- * @param {string} path
121
- * @returns {boolean}
122
- */
123
- isValidFilePath(path) {
124
- if (typeof path !== 'string') return false;
125
- // Basic check - no null bytes, reasonable length
126
- return path.length > 0 && path.length <= 255 && !path.includes('\x00');
127
- }
128
-
129
- /**
130
- * Validate emoji
131
- * @param {string} emoji
132
- * @returns {boolean}
133
- */
134
- isValidEmoji(emoji) {
135
- if (typeof emoji !== 'string') return false;
136
- // Check if it's an emoji (basic check)
137
- return /\p{Emoji}/u.test(emoji) || emoji.length === 1;
138
- }
139
- }
140
-
141
- const globalValidator = new InputValidator();
142
-
143
- module.exports = {
144
- InputValidator,
145
- globalValidator,
146
- validateThreadID: (id) => globalValidator.isValidThreadID(id),
147
- validateUserID: (id) => globalValidator.isValidUserID(id),
148
- validateMessage: (msg) => globalValidator.isValidMessage(msg),
149
- sanitizeMessage: (msg) => globalValidator.sanitizeMessage(msg),
150
- sanitizeThreadName: (name) => globalValidator.sanitizeThreadName(name),
151
- sanitizeNickname: (nick) => globalValidator.sanitizeNickname(nick),
152
- validateIDArray: (ids, validator) => globalValidator.validateIDArray(ids, validator),
153
- isValidEmail: (email) => globalValidator.isValidEmail(email),
154
- isValidUrl: (url) => globalValidator.isValidUrl(url),
155
- isValidFilePath: (path) => globalValidator.isValidFilePath(path),
156
- isValidEmoji: (emoji) => globalValidator.isValidEmoji(emoji)
157
- };