@20syldev/api 3.5.0 → 4.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 (180) hide show
  1. package/.prettierrc +7 -0
  2. package/README.md +32 -33
  3. package/dist/app.js +36 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/config/env.js +73 -0
  6. package/dist/config/env.js.map +1 -0
  7. package/dist/config/versions.js +72 -0
  8. package/dist/config/versions.js.map +1 -0
  9. package/dist/constants.js +42 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/middleware/cors.js +15 -0
  12. package/dist/middleware/cors.js.map +1 -0
  13. package/dist/middleware/error.js +6 -0
  14. package/dist/middleware/error.js.map +1 -0
  15. package/dist/middleware/json.js +8 -0
  16. package/dist/middleware/json.js.map +1 -0
  17. package/dist/middleware/logger.js +26 -0
  18. package/dist/middleware/logger.js.map +1 -0
  19. package/dist/middleware/ratelimit.js +58 -0
  20. package/dist/middleware/ratelimit.js.map +1 -0
  21. package/dist/middleware/version.js +30 -0
  22. package/dist/middleware/version.js.map +1 -0
  23. package/dist/modules/v3/algorithms.js +221 -0
  24. package/dist/modules/v3/algorithms.js.map +1 -0
  25. package/{modules → dist/modules}/v3/captcha.js +4 -13
  26. package/dist/modules/v3/captcha.js.map +1 -0
  27. package/dist/modules/v3/chat.js +103 -0
  28. package/dist/modules/v3/chat.js.map +1 -0
  29. package/{modules → dist/modules}/v3/color.js +12 -13
  30. package/dist/modules/v3/color.js.map +1 -0
  31. package/dist/modules/v3/convert.js +41 -0
  32. package/dist/modules/v3/convert.js.map +1 -0
  33. package/dist/modules/v3/domain.js +83 -0
  34. package/dist/modules/v3/domain.js.map +1 -0
  35. package/dist/modules/v3/hash.js +16 -0
  36. package/dist/modules/v3/hash.js.map +1 -0
  37. package/dist/modules/v3/hyperplanning.js +50 -0
  38. package/dist/modules/v3/hyperplanning.js.map +1 -0
  39. package/dist/modules/v3/levenshtein.js +38 -0
  40. package/dist/modules/v3/levenshtein.js.map +1 -0
  41. package/dist/modules/v3/personal.js +129 -0
  42. package/dist/modules/v3/personal.js.map +1 -0
  43. package/dist/modules/v3/qrcode.js +21 -0
  44. package/dist/modules/v3/qrcode.js.map +1 -0
  45. package/dist/modules/v3/tic_tac_toe.js +221 -0
  46. package/dist/modules/v3/tic_tac_toe.js.map +1 -0
  47. package/dist/modules/v3/time.js +88 -0
  48. package/dist/modules/v3/time.js.map +1 -0
  49. package/{modules → dist/modules}/v3/token.js +10 -11
  50. package/dist/modules/v3/token.js.map +1 -0
  51. package/dist/modules/v3/username.js +92 -0
  52. package/dist/modules/v3/username.js.map +1 -0
  53. package/dist/modules/v3/utils.js +70 -0
  54. package/dist/modules/v3/utils.js.map +1 -0
  55. package/dist/modules/v3.js +16 -0
  56. package/dist/modules/v3.js.map +1 -0
  57. package/dist/modules/v4/algorithms.js +200 -0
  58. package/dist/modules/v4/algorithms.js.map +1 -0
  59. package/dist/modules/v4/captcha.js +35 -0
  60. package/dist/modules/v4/captcha.js.map +1 -0
  61. package/dist/modules/v4/chat.js +92 -0
  62. package/dist/modules/v4/chat.js.map +1 -0
  63. package/dist/modules/v4/color.js +43 -0
  64. package/dist/modules/v4/color.js.map +1 -0
  65. package/dist/modules/v4/convert.js +33 -0
  66. package/dist/modules/v4/convert.js.map +1 -0
  67. package/dist/modules/v4/dice.js +30 -0
  68. package/dist/modules/v4/dice.js.map +1 -0
  69. package/dist/modules/v4/domain.js +78 -0
  70. package/dist/modules/v4/domain.js.map +1 -0
  71. package/dist/modules/v4/encode.js +165 -0
  72. package/dist/modules/v4/encode.js.map +1 -0
  73. package/dist/modules/v4/geo.js +41 -0
  74. package/dist/modules/v4/geo.js.map +1 -0
  75. package/dist/modules/v4/hash.js +9 -0
  76. package/dist/modules/v4/hash.js.map +1 -0
  77. package/dist/modules/v4/hyperplanning.js +42 -0
  78. package/dist/modules/v4/hyperplanning.js.map +1 -0
  79. package/dist/modules/v4/levenshtein.js +29 -0
  80. package/dist/modules/v4/levenshtein.js.map +1 -0
  81. package/dist/modules/v4/palette.js +89 -0
  82. package/dist/modules/v4/palette.js.map +1 -0
  83. package/dist/modules/v4/personal.js +125 -0
  84. package/dist/modules/v4/personal.js.map +1 -0
  85. package/dist/modules/v4/placeholder.js +96 -0
  86. package/dist/modules/v4/placeholder.js.map +1 -0
  87. package/dist/modules/v4/qrcode.js +12 -0
  88. package/dist/modules/v4/qrcode.js.map +1 -0
  89. package/dist/modules/v4/statistics.js +41 -0
  90. package/dist/modules/v4/statistics.js.map +1 -0
  91. package/dist/modules/v4/text.js +293 -0
  92. package/dist/modules/v4/text.js.map +1 -0
  93. package/dist/modules/v4/tic_tac_toe.js +206 -0
  94. package/dist/modules/v4/tic_tac_toe.js.map +1 -0
  95. package/dist/modules/v4/time.js +73 -0
  96. package/dist/modules/v4/time.js.map +1 -0
  97. package/dist/modules/v4/token.js +36 -0
  98. package/dist/modules/v4/token.js.map +1 -0
  99. package/dist/modules/v4/username.js +87 -0
  100. package/dist/modules/v4/username.js.map +1 -0
  101. package/dist/modules/v4/utils.js +26 -0
  102. package/dist/modules/v4/utils.js.map +1 -0
  103. package/dist/modules/v4/validate.js +54 -0
  104. package/dist/modules/v4/validate.js.map +1 -0
  105. package/dist/modules/v4.js +18 -0
  106. package/dist/modules/v4.js.map +1 -0
  107. package/dist/routes/delete.js +65 -0
  108. package/dist/routes/delete.js.map +1 -0
  109. package/dist/routes/get.js +441 -0
  110. package/dist/routes/get.js.map +1 -0
  111. package/dist/routes/index.js +50 -0
  112. package/dist/routes/index.js.map +1 -0
  113. package/dist/routes/patch.js +41 -0
  114. package/dist/routes/patch.js.map +1 -0
  115. package/dist/routes/post.js +185 -0
  116. package/dist/routes/post.js.map +1 -0
  117. package/dist/storage/index.js +13 -0
  118. package/dist/storage/index.js.map +1 -0
  119. package/dist/types/storage.js +2 -0
  120. package/dist/types/storage.js.map +1 -0
  121. package/dist/utils/response.js +10 -0
  122. package/dist/utils/response.js.map +1 -0
  123. package/dist/utils/version.js +3 -0
  124. package/dist/utils/version.js.map +1 -0
  125. package/eslint.config.js +20 -0
  126. package/package.json +30 -15
  127. package/src/app.ts +44 -0
  128. package/src/config/env.ts +81 -0
  129. package/src/config/versions.ts +80 -0
  130. package/src/constants.ts +28 -0
  131. package/src/middleware/cors.ts +17 -0
  132. package/src/middleware/error.ts +7 -0
  133. package/src/middleware/json.ts +9 -0
  134. package/src/middleware/logger.ts +31 -0
  135. package/src/middleware/ratelimit.ts +66 -0
  136. package/src/middleware/version.ts +39 -0
  137. package/{modules → src/modules}/v3/algorithms.js +1 -1
  138. package/src/modules/v3/captcha.js +60 -0
  139. package/{modules → src/modules}/v3/chat.js +6 -4
  140. package/src/modules/v3/color.js +60 -0
  141. package/{modules → src/modules}/v3/convert.js +5 -5
  142. package/{modules → src/modules}/v3/domain.js +51 -4
  143. package/{modules → src/modules}/v3/hash.js +1 -1
  144. package/{modules → src/modules}/v3/hyperplanning.js +11 -10
  145. package/{modules → src/modules}/v3/levenshtein.js +3 -3
  146. package/{modules → src/modules}/v3/personal.js +20 -8
  147. package/{modules → src/modules}/v3/qrcode.js +1 -1
  148. package/{modules → src/modules}/v3/tic_tac_toe.js +24 -18
  149. package/{modules → src/modules}/v3/time.js +22 -11
  150. package/src/modules/v3/token.js +54 -0
  151. package/src/modules/v3/username.js +94 -0
  152. package/{modules → src/modules}/v3/utils.js +2 -2
  153. package/{modules → src/modules}/v3.js +1 -1
  154. package/src/modules/v4/algorithms.ts +155 -0
  155. package/src/modules/v4/captcha.ts +49 -0
  156. package/src/modules/v4/chat.ts +99 -0
  157. package/src/modules/v4/color.ts +64 -0
  158. package/src/modules/v4/convert.ts +38 -0
  159. package/src/modules/v4/domain.ts +81 -0
  160. package/src/modules/v4/hash.ts +9 -0
  161. package/src/modules/v4/hyperplanning.ts +58 -0
  162. package/src/modules/v4/levenshtein.ts +38 -0
  163. package/src/modules/v4/personal.ts +147 -0
  164. package/src/modules/v4/qrcode.ts +11 -0
  165. package/src/modules/v4/tic_tac_toe.ts +223 -0
  166. package/src/modules/v4/time.ts +92 -0
  167. package/src/modules/v4/token.ts +43 -0
  168. package/src/modules/v4/username.ts +89 -0
  169. package/src/modules/v4/utils.ts +38 -0
  170. package/src/modules/v4.ts +15 -0
  171. package/src/routes/get.ts +461 -0
  172. package/src/routes/index.ts +58 -0
  173. package/src/routes/post.ts +200 -0
  174. package/src/storage/index.ts +16 -0
  175. package/src/types/express.d.ts +17 -0
  176. package/src/types/storage.ts +48 -0
  177. package/src/utils/response.ts +11 -0
  178. package/tsconfig.json +17 -0
  179. package/app.js +0 -865
  180. package/modules/v3/username.js +0 -32
@@ -0,0 +1,206 @@
1
+ import { randomBytes } from 'crypto';
2
+ import { SESSION_TTL, GAME_CLEANUP_TTL, RATE_LIMIT_WINDOW, RATE_LIMIT_MAX } from '../../constants.js';
3
+ export default function tic_tac_toe(action, params) {
4
+ const storage = params.storage;
5
+ storage.games ??= {};
6
+ storage.sessions ??= {};
7
+ storage.rateLimits ??= {};
8
+ const { games, sessions, rateLimits } = storage;
9
+ if (action === 'list')
10
+ return listGames(games);
11
+ if (!params.username)
12
+ throw new Error('Please provide a username');
13
+ const u = params.username.toLowerCase();
14
+ const now = Date.now();
15
+ rateLimits[u] = (rateLimits[u] ?? []).filter((ts) => now - ts < RATE_LIMIT_WINDOW);
16
+ if (rateLimits[u].length > RATE_LIMIT_MAX) {
17
+ const remainingTime = Math.ceil((rateLimits[u][0] + RATE_LIMIT_WINDOW - now) / 1000);
18
+ throw new Error(`Rate limit exceeded. Try again in ${remainingTime} seconds.`);
19
+ }
20
+ rateLimits[u].push(now);
21
+ if (action === 'play') {
22
+ return playMove(params, games, sessions, u, now);
23
+ }
24
+ else if (action === 'fetch') {
25
+ return fetchGame(params, games, u);
26
+ }
27
+ else if (action === 'forfeit') {
28
+ return forfeitGame(params, games, sessions);
29
+ }
30
+ else {
31
+ throw new Error('Invalid action. Use "play", "fetch", "list", or "forfeit"');
32
+ }
33
+ }
34
+ function forfeitGame(params, games, sessions) {
35
+ const { game, session } = params;
36
+ if (!game)
37
+ throw new Error('Please provide a valid game ID');
38
+ if (!session)
39
+ throw new Error('Please provide a valid session ID');
40
+ if (!games[game])
41
+ throw new Error('Game not found');
42
+ const u = params.username.toLowerCase();
43
+ if (sessions[u] && sessions[u].user !== session) {
44
+ throw new Error('Session ID mismatch');
45
+ }
46
+ const players = games[game].players;
47
+ if (!players.includes(u))
48
+ throw new Error('You are not a player in this game');
49
+ const winner = players.find((p) => p !== u) ?? null;
50
+ delete games[game];
51
+ delete sessions[u];
52
+ return {
53
+ message: `${params.username} forfeited the game.${winner ? ` ${winner} wins.` : ''}`,
54
+ winner,
55
+ loser: params.username,
56
+ };
57
+ }
58
+ function playMove(params, games, sessions, u, now) {
59
+ const { move, session, game } = params;
60
+ const validMoves = ['1-1', '1-2', '1-3', '2-1', '2-2', '2-3', '3-1', '3-2', '3-3'];
61
+ if (!move)
62
+ throw new Error('Please provide a valid move');
63
+ if (!session)
64
+ throw new Error('Please provide a valid session ID');
65
+ if (!game)
66
+ throw new Error('Please provide a valid game ID');
67
+ if (!validMoves.includes(move))
68
+ throw new Error('Invalid move. Please provide a valid move (e.g., 1-1, 2-2, 3-3).');
69
+ if (sessions[u] && sessions[u].user !== session) {
70
+ throw new Error('Session ID mismatch');
71
+ }
72
+ games[game] = games[game] ?? {
73
+ moves: [],
74
+ players: [],
75
+ private: params.private || false,
76
+ creation: Date.now(),
77
+ };
78
+ const moves = games[game].moves;
79
+ const players = [...new Set(moves.map((play) => play.username))];
80
+ if (players.length >= 2 && !players.includes(params.username)) {
81
+ throw new Error('Game is full, you can only watch.');
82
+ }
83
+ if (moves.length > 0 && moves[moves.length - 1].username === params.username) {
84
+ throw new Error('Please wait for the other player to make a move.');
85
+ }
86
+ if (moves.some((play) => play.move === move)) {
87
+ throw new Error('Move already made. Please choose a different move.');
88
+ }
89
+ const play = { username: params.username, move, session };
90
+ moves.push(play);
91
+ const result = checkGame(moves);
92
+ if (result.winner || result.tie) {
93
+ setTimeout(() => delete games[game], GAME_CLEANUP_TTL);
94
+ return {
95
+ message: `Move sent successfully. ${result.winner ? result.winner + ' wins. ' + result.loser + ' loses.' : "It's a tie."}`,
96
+ ...result,
97
+ };
98
+ }
99
+ setTimeout(() => delete games[game], SESSION_TTL);
100
+ sessions[u] = sessions[u] ?? { user: session, last: now };
101
+ sessions[u].last = now;
102
+ setTimeout(() => {
103
+ if (sessions[u] && now - sessions[u].last >= SESSION_TTL)
104
+ delete sessions[u];
105
+ }, SESSION_TTL);
106
+ return { message: 'Move sent successfully' };
107
+ }
108
+ function fetchGame(params, games, u) {
109
+ const id = params.game || generateGameId();
110
+ if (!games[id]) {
111
+ games[id] = {
112
+ moves: [],
113
+ players: [],
114
+ private: params.private || false,
115
+ creation: Date.now(),
116
+ };
117
+ }
118
+ if (!games[id].players.includes(u)) {
119
+ games[id].players.push(u);
120
+ }
121
+ const moves = games[id].moves;
122
+ const players = games[id].players;
123
+ const privateGame = games[id].private;
124
+ const lastPlayer = moves.length ? moves[moves.length - 1].username : null;
125
+ const turn = players.find((p) => p !== lastPlayer) || players[0];
126
+ const status = players.length >= 2 ? 'ready' : 'waiting';
127
+ const result = moves.length ? checkGame(moves) : {};
128
+ return {
129
+ id,
130
+ moves,
131
+ players,
132
+ turn,
133
+ status,
134
+ private: privateGame,
135
+ ...result,
136
+ };
137
+ }
138
+ function listGames(games) {
139
+ const publicGames = [];
140
+ const now = Date.now();
141
+ for (const [gameId, game] of Object.entries(games)) {
142
+ if (!game.private) {
143
+ const result = game.moves.length ? checkGame(game.moves) : {};
144
+ const isFinished = result.winner || result.tie;
145
+ if (!isFinished) {
146
+ const lastPlayer = game.moves.length ? game.moves[game.moves.length - 1].username : null;
147
+ const turn = game.players.find((p) => p !== lastPlayer) || game.players[0];
148
+ const status = game.players.length >= 2 ? 'ready' : 'waiting';
149
+ publicGames.push({
150
+ id: gameId,
151
+ players: game.players,
152
+ playersCount: game.players.length,
153
+ moves: game.moves.length,
154
+ turn,
155
+ status,
156
+ creation: game.creation || now,
157
+ });
158
+ }
159
+ }
160
+ }
161
+ publicGames.sort((a, b) => b.creation - a.creation);
162
+ return {
163
+ message: 'Public games available',
164
+ count: publicGames.length,
165
+ games: publicGames,
166
+ };
167
+ }
168
+ function generateGameId() {
169
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
170
+ return Array.from(randomBytes(5))
171
+ .map((b) => chars[b % chars.length])
172
+ .join('');
173
+ }
174
+ function checkGame(moves) {
175
+ const board = Array(3)
176
+ .fill(null)
177
+ .map(() => Array(3).fill(null));
178
+ const playerSymbols = {};
179
+ const playersOrder = [];
180
+ moves.forEach(({ username, move }) => {
181
+ if (!playerSymbols[username]) {
182
+ playersOrder.push(username);
183
+ playerSymbols[username] = playersOrder.length === 1 ? 'X' : 'O';
184
+ }
185
+ const [row, col] = move.split('-').map(Number);
186
+ board[row - 1][col - 1] = playerSymbols[username];
187
+ });
188
+ const checkWinner = (symbol) => {
189
+ for (let i = 0; i < 3; i++) {
190
+ if (board[i][0] === symbol && board[i][1] === symbol && board[i][2] === symbol)
191
+ return true;
192
+ if (board[0][i] === symbol && board[1][i] === symbol && board[2][i] === symbol)
193
+ return true;
194
+ }
195
+ if (board[0][0] === symbol && board[1][1] === symbol && board[2][2] === symbol)
196
+ return true;
197
+ if (board[0][2] === symbol && board[1][1] === symbol && board[2][0] === symbol)
198
+ return true;
199
+ return false;
200
+ };
201
+ const winner = Object.keys(playerSymbols).find((player) => checkWinner(playerSymbols[player])) ?? null;
202
+ const isTie = !winner && moves.length === 9;
203
+ const loser = winner && playersOrder.length === 2 ? (playersOrder.find((player) => player !== winner) ?? null) : null;
204
+ return { winner, loser, tie: isTie };
205
+ }
206
+ //# sourceMappingURL=tic_tac_toe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tic_tac_toe.js","sourceRoot":"","sources":["../../../src/modules/v4/tic_tac_toe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ const validFormats = [
2
+ 'iso',
3
+ 'utc',
4
+ 'timestamp',
5
+ 'locale',
6
+ 'date',
7
+ 'time',
8
+ 'year',
9
+ 'month',
10
+ 'day',
11
+ 'hour',
12
+ 'minute',
13
+ 'second',
14
+ 'ms',
15
+ 'dayOfWeek',
16
+ 'dayOfYear',
17
+ 'weekNumber',
18
+ 'timezone',
19
+ 'timezoneOffset',
20
+ ];
21
+ const validTimezones = ['UTC', 'America/New_York', 'Europe/Paris', 'Asia/Tokyo', 'Australia/Sydney'];
22
+ export default function time(type = 'live', start, end, format, timezone) {
23
+ if (type !== 'live' && type !== 'random') {
24
+ throw new Error('Please provide a valid type (live or random)');
25
+ }
26
+ if (start && !Date.parse(start)) {
27
+ throw new Error('Please provide a valid start date (YYYY-MM-DD)');
28
+ }
29
+ if (end && !Date.parse(end)) {
30
+ throw new Error('Please provide a valid end date (YYYY-MM-DD)');
31
+ }
32
+ if (format && !validFormats.includes(format)) {
33
+ throw new Error(`Please provide a valid format. Options: ${validFormats.join(', ')}`);
34
+ }
35
+ if (timezone && !validTimezones.includes(timezone)) {
36
+ throw new Error(`Please provide a valid timezone. Options: ${validTimezones.join(', ')}`);
37
+ }
38
+ const getTimeFormats = (date, tz) => {
39
+ return {
40
+ iso: date.toISOString(),
41
+ utc: date.toUTCString(),
42
+ timestamp: date.getTime(),
43
+ locale: date.toLocaleString('en-US', { timeZone: tz, timeZoneName: 'long' }),
44
+ date: date.toLocaleDateString('en-US', { timeZone: tz }),
45
+ time: date.toLocaleTimeString('en-US', { timeZone: tz }),
46
+ year: date.getFullYear(),
47
+ month: date.getMonth() + 1,
48
+ day: date.getDate(),
49
+ hour: date.getHours(),
50
+ minute: date.getMinutes(),
51
+ second: date.getSeconds(),
52
+ ms: date.getMilliseconds(),
53
+ dayOfWeek: date.getDay(),
54
+ dayOfYear: Math.floor((date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000),
55
+ weekNumber: Math.ceil(((date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000 + 1) / 7),
56
+ timezone: tz,
57
+ timezoneOffset: date.getTimezoneOffset(),
58
+ };
59
+ };
60
+ if (type === 'random') {
61
+ const startDate = start ? new Date(start).getTime() : new Date('1900-01-01').getTime();
62
+ const endDate = end ? new Date(end).getTime() : new Date('2100-12-31').getTime();
63
+ const randomDate = new Date(startDate + Math.random() * (endDate - startDate));
64
+ const tz = timezone || validTimezones[Math.floor(Math.random() * validTimezones.length)];
65
+ const formats = getTimeFormats(randomDate, tz);
66
+ return format ? { date: formats[format] } : formats;
67
+ }
68
+ const now = new Date();
69
+ const tz = timezone || 'UTC';
70
+ const formats = getTimeFormats(now, tz);
71
+ return format ? { date: formats[format] } : formats;
72
+ }
73
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/modules/v4/time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { randomBytes } from 'crypto';
2
+ import { v4 } from 'uuid';
3
+ import { MIN_TOKEN_LENGTH, MAX_TOKEN_LENGTH } from '../../constants.js';
4
+ export default function token(len, type = 'alphanum') {
5
+ if (isNaN(len) || len < MIN_TOKEN_LENGTH) {
6
+ throw new Error('Length must be a number greater than or equal to 12');
7
+ }
8
+ if (len > MAX_TOKEN_LENGTH) {
9
+ throw new Error('Length cannot exceed 4096');
10
+ }
11
+ const genToken = (chars, length) => {
12
+ return Array.from({ length }, () => {
13
+ return chars[Math.floor(Math.random() * chars.length)];
14
+ }).join('');
15
+ };
16
+ const tokenTypes = {
17
+ alpha: () => genToken('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', len),
18
+ alphanum: () => genToken('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', len),
19
+ base64: () => randomBytes(Math.ceil(len * 0.75))
20
+ .toString('base64')
21
+ .slice(0, len),
22
+ hex: () => randomBytes(Math.ceil(len * 0.5))
23
+ .toString('hex')
24
+ .slice(0, len),
25
+ num: () => genToken('0123456789', len),
26
+ punct: () => genToken('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~', len),
27
+ urlsafe: () => genToken('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_', len),
28
+ uuid: () => v4().replace(/-/g, '').slice(0, len),
29
+ };
30
+ const lowerType = type.toLowerCase();
31
+ if (!tokenTypes[lowerType]) {
32
+ throw new Error(`Invalid token type. Valid types: ${Object.keys(tokenTypes).join(', ')}`);
33
+ }
34
+ return tokenTypes[lowerType]();
35
+ }
36
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/modules/v4/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAW,EAAE,OAAe,UAAU;IAChE,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,MAAc,EAAU,EAAE;QACvD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;YAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAiC;QAC7C,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,sDAAsD,EAAE,GAAG,CAAC;QAClF,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,gEAAgE,EAAE,GAAG,CAAC;QAC/F,MAAM,EAAE,GAAG,EAAE,CACT,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;aAC7B,QAAQ,CAAC,QAAQ,CAAC;aAClB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACtB,GAAG,EAAE,GAAG,EAAE,CACN,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;aAC5B,QAAQ,CAAC,KAAK,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACtB,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;QACtC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,CAAC;QAChE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,kEAAkE,EAAE,GAAG,CAAC;QAChG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;KACnD,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,UAAU,CAAC,SAAS,CAAE,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { random, randomNumber } from './utils.js';
2
+ export default function username() {
3
+ const adj = [
4
+ 'Happy',
5
+ 'Silly',
6
+ 'Clever',
7
+ 'Creative',
8
+ 'Brave',
9
+ 'Gentle',
10
+ 'Kind',
11
+ 'Funny',
12
+ 'Wise',
13
+ 'Charming',
14
+ 'Sincere',
15
+ 'Resourceful',
16
+ 'Patient',
17
+ 'Energetic',
18
+ 'Adventurous',
19
+ 'Ambitious',
20
+ 'Courageous',
21
+ 'Courteous',
22
+ 'Determined',
23
+ ];
24
+ const ani = [
25
+ 'Cat',
26
+ 'Dog',
27
+ 'Tiger',
28
+ 'Elephant',
29
+ 'Monkey',
30
+ 'Penguin',
31
+ 'Dolphin',
32
+ 'Lion',
33
+ 'Bear',
34
+ 'Fox',
35
+ 'Owl',
36
+ 'Giraffe',
37
+ 'Zebra',
38
+ 'Koala',
39
+ 'Rabbit',
40
+ 'Squirrel',
41
+ 'Panda',
42
+ 'Horse',
43
+ 'Wolf',
44
+ 'Eagle',
45
+ ];
46
+ const job = [
47
+ 'Writer',
48
+ 'Artist',
49
+ 'Musician',
50
+ 'Explorer',
51
+ 'Scientist',
52
+ 'Engineer',
53
+ 'Athlete',
54
+ 'Chef',
55
+ 'Doctor',
56
+ 'Teacher',
57
+ 'Lawyer',
58
+ 'Entrepreneur',
59
+ 'Actor',
60
+ 'Dancer',
61
+ 'Photographer',
62
+ 'Architect',
63
+ 'Pilot',
64
+ 'Designer',
65
+ 'Journalist',
66
+ 'Veterinarian',
67
+ ];
68
+ const nombre = randomNumber(0, 99);
69
+ const choix = {
70
+ adj_num: () => random(adj) + nombre,
71
+ ani_num: () => random(ani) + nombre,
72
+ pro_num: () => random(job) + nombre,
73
+ adj_ani: () => random(adj) + random(ani),
74
+ adj_ani_num: () => random(adj) + random(ani) + nombre,
75
+ adj_pro: () => random(adj) + random(job),
76
+ pro_ani: () => random(job) + random(ani),
77
+ pro_ani_num: () => random(job) + random(ani) + nombre,
78
+ };
79
+ return {
80
+ username: choix[random(Object.keys(choix))](),
81
+ number: nombre,
82
+ adjective: random(adj),
83
+ animal: random(ani),
84
+ job: random(job),
85
+ };
86
+ }
87
+ //# sourceMappingURL=username.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"username.js","sourceRoot":"","sources":["../../../src/modules/v4/username.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,QAAQ;IAC5B,MAAM,GAAG,GAAG;QACR,OAAO;QACP,OAAO;QACP,QAAQ;QACR,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;QACP,MAAM;QACN,UAAU;QACV,SAAS;QACT,aAAa;QACb,SAAS;QACT,WAAW;QACX,aAAa;QACb,WAAW;QACX,YAAY;QACZ,WAAW;QACX,YAAY;KACf,CAAC;IACF,MAAM,GAAG,GAAG;QACR,KAAK;QACL,KAAK;QACL,OAAO;QACP,UAAU;QACV,QAAQ;QACR,SAAS;QACT,SAAS;QACT,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,SAAS;QACT,OAAO;QACP,OAAO;QACP,QAAQ;QACR,UAAU;QACV,OAAO;QACP,OAAO;QACP,MAAM;QACN,OAAO;KACV,CAAC;IACF,MAAM,GAAG,GAAG;QACR,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,UAAU;QACV,WAAW;QACX,UAAU;QACV,SAAS;QACT,MAAM;QACN,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,cAAc;QACd,OAAO;QACP,QAAQ;QACR,cAAc;QACd,WAAW;QACX,OAAO;QACP,UAAU;QACV,YAAY;QACZ,cAAc;KACjB,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAiC;QACxC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACxC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACrD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACxC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACxC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;KACxD,CAAC;IAEF,OAAO;QACH,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;KACnB,CAAC;AACN,CAAC"}
@@ -0,0 +1,26 @@
1
+ export function random(arr) {
2
+ return arr[Math.floor(Math.random() * arr.length)];
3
+ }
4
+ export function randomNumber(min, max) {
5
+ return Math.floor(Math.random() * (max - min + 1)) + min;
6
+ }
7
+ export function genIP() {
8
+ return `${randomNumber(0, 255)}.${randomNumber(0, 255)}.${randomNumber(0, 255)}.${randomNumber(0, 255)}`;
9
+ }
10
+ export function formatDate(date) {
11
+ return new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().replace('Z', '');
12
+ }
13
+ export function envList(key) {
14
+ const v = process.env[key];
15
+ return v && v !== 'undefined' ? v.split(' ') : null;
16
+ }
17
+ export function checkRateLimit(rateLimits, userId, timestamp, window = 10000, limit = 50) {
18
+ rateLimits[userId] = (rateLimits[userId] ?? []).filter((ts) => timestamp - ts < window);
19
+ if (rateLimits[userId].length > limit) {
20
+ const remainingTime = Math.ceil((rateLimits[userId][0] + window - timestamp) / 1000);
21
+ throw new Error(`Rate limit exceeded. Try again in ${remainingTime} seconds.`);
22
+ }
23
+ rateLimits[userId].push(timestamp);
24
+ return false;
25
+ }
26
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/modules/v4/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAI,GAAQ;IAC9B,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,KAAK;IACjB,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACjC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,UAAoC,EACpC,MAAc,EACd,SAAiB,EACjB,MAAM,GAAG,KAAK,EACd,KAAK,GAAG,EAAE;IAEV,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IAExF,IAAI,UAAU,CAAC,MAAM,CAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAE,CAAC,CAAC,CAAE,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,qCAAqC,aAAa,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { MAX_STRING_LENGTH } from '../../constants.js';
2
+ function checkValue(value) {
3
+ if (!value)
4
+ throw new Error('A value is required');
5
+ if (typeof value !== 'string')
6
+ throw new Error('Value must be a string');
7
+ if (value.length > MAX_STRING_LENGTH)
8
+ throw new Error(`Value must be less than ${MAX_STRING_LENGTH} characters long`);
9
+ }
10
+ export function luhn(value) {
11
+ checkValue(value);
12
+ const digits = value.replace(/\s|-/g, '');
13
+ if (!/^\d+$/.test(digits))
14
+ throw new Error('Value must contain only digits, spaces or dashes');
15
+ if (digits.length < 12 || digits.length > 19)
16
+ throw new Error('Card number must have between 12 and 19 digits');
17
+ let sum = 0;
18
+ let alt = false;
19
+ for (let i = digits.length - 1; i >= 0; i--) {
20
+ let n = parseInt(digits[i], 10);
21
+ if (alt) {
22
+ n *= 2;
23
+ if (n > 9)
24
+ n -= 9;
25
+ }
26
+ sum += n;
27
+ alt = !alt;
28
+ }
29
+ return { valid: sum % 10 === 0, value: digits };
30
+ }
31
+ export function iban(value) {
32
+ checkValue(value);
33
+ const cleaned = value.replace(/\s/g, '').toUpperCase();
34
+ if (!/^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(cleaned))
35
+ throw new Error('Invalid IBAN format');
36
+ if (cleaned.length < 15 || cleaned.length > 34)
37
+ throw new Error('IBAN length must be between 15 and 34 characters');
38
+ const rearranged = cleaned.slice(4) + cleaned.slice(0, 4);
39
+ const numeric = rearranged
40
+ .split('')
41
+ .map((c) => (c >= 'A' && c <= 'Z' ? (c.charCodeAt(0) - 55).toString() : c))
42
+ .join('');
43
+ let remainder = 0;
44
+ for (const char of numeric) {
45
+ remainder = (remainder * 10 + parseInt(char, 10)) % 97;
46
+ }
47
+ return { valid: remainder === 1, value: cleaned, country: cleaned.slice(0, 2) };
48
+ }
49
+ export function email(value) {
50
+ checkValue(value);
51
+ const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
52
+ return { valid: regex.test(value), value };
53
+ }
54
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/modules/v4/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export * as algorithms from './v4/algorithms.js';
2
+ export { default as chat } from './v4/chat.js';
3
+ export { default as captcha } from './v4/captcha.js';
4
+ export { default as color } from './v4/color.js';
5
+ export { default as convert } from './v4/convert.js';
6
+ export { default as dice } from './v4/dice.js';
7
+ export { default as domain } from './v4/domain.js';
8
+ export { default as hash } from './v4/hash.js';
9
+ export { default as hyperplanning } from './v4/hyperplanning.js';
10
+ export { default as levenshtein } from './v4/levenshtein.js';
11
+ export { default as personal } from './v4/personal.js';
12
+ export { default as qrcode } from './v4/qrcode.js';
13
+ export { default as statistics } from './v4/statistics.js';
14
+ export { default as tic_tac_toe } from './v4/tic_tac_toe.js';
15
+ export { default as time } from './v4/time.js';
16
+ export { default as token } from './v4/token.js';
17
+ export { default as username } from './v4/username.js';
18
+ //# sourceMappingURL=v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v4.js","sourceRoot":"","sources":["../../src/modules/v4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { Router } from 'express';
2
+ import { chatStorage, ticTacToeStorage } from '../storage/index.js';
3
+ import { error } from '../utils/response.js';
4
+ import { supportsRest } from '../utils/version.js';
5
+ const router = Router();
6
+ // Forfeit a tic-tac-toe game (REST: DELETE /tic-tac-toe/:game)
7
+ router.delete('/:version/tic-tac-toe/:game', (req, res) => {
8
+ if (!supportsRest(req)) {
9
+ error(res, 405, 'DELETE is only supported in v4+.', `${req.version}/tic-tac-toe`);
10
+ return;
11
+ }
12
+ const game = req.params.game;
13
+ const { username, session } = req.body || {};
14
+ if (!username) {
15
+ error(res, 400, 'Please provide a username (?username={username})');
16
+ return;
17
+ }
18
+ if (!session) {
19
+ error(res, 400, 'Please provide a valid session ID (&session={ID})');
20
+ return;
21
+ }
22
+ try {
23
+ const result = req.module.tic_tac_toe('forfeit', {
24
+ username,
25
+ session,
26
+ game,
27
+ storage: ticTacToeStorage,
28
+ });
29
+ res.jsonResponse(result);
30
+ }
31
+ catch (err) {
32
+ error(res, 400, err.message);
33
+ }
34
+ });
35
+ // Clear a private chat (REST: DELETE /chat/:token)
36
+ router.delete('/:version/chat/:token', (req, res) => {
37
+ if (!supportsRest(req)) {
38
+ error(res, 405, 'DELETE is only supported in v4+.', `${req.version}/chat`);
39
+ return;
40
+ }
41
+ const token = req.params.token;
42
+ const { username, session } = req.body || {};
43
+ if (!username) {
44
+ error(res, 400, 'Please provide a username (?username={username})');
45
+ return;
46
+ }
47
+ if (!session) {
48
+ error(res, 400, 'Please provide a valid session ID (&session={ID})');
49
+ return;
50
+ }
51
+ try {
52
+ const result = req.module.chat('clear', {
53
+ username,
54
+ token,
55
+ session,
56
+ storage: chatStorage,
57
+ });
58
+ res.jsonResponse(result);
59
+ }
60
+ catch (err) {
61
+ error(res, 400, err.message);
62
+ }
63
+ });
64
+ export default router;
65
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/routes/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,CAAC,6BAA6B,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACzE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,kCAAkC,EAAE,GAAG,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC;QAClF,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAc,CAAC;IACvC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAI,GAAG,CAAC,IAA+B,IAAI,EAAE,CAAC;IAEzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,kDAAkD,CAAC,CAAC;QACpE,OAAO;IACX,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,mDAAmD,CAAC,CAAC;QACrE,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;YAC7C,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,OAAO,EAAE,gBAAgB;SAC5B,CAAC,CAAC;QACH,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,GAAG,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,mDAAmD;AACnD,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,kCAAkC,EAAE,GAAG,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC;QAC3E,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAe,CAAC;IACzC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAI,GAAG,CAAC,IAA+B,IAAI,EAAE,CAAC;IAEzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,kDAAkD,CAAC,CAAC;QACpE,OAAO;IACX,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,mDAAmD,CAAC,CAAC;QACrE,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;YACpC,QAAQ;YACR,KAAK;YACL,OAAO;YACP,OAAO,EAAE,WAAW;SACvB,CAAC,CAAC;QACH,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,GAAG,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}