@moxon/api 6.1.0 → 6.2.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 (69) hide show
  1. package/README.md +21 -14
  2. package/dist/app.js +5 -3
  3. package/dist/app.js.map +1 -1
  4. package/dist/constants.d.ts +22 -0
  5. package/dist/constants.js +22 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/middleware/cors.d.ts +15 -0
  8. package/dist/middleware/cors.js +25 -6
  9. package/dist/middleware/cors.js.map +1 -1
  10. package/dist/middleware/ratelimit.d.ts +53 -1
  11. package/dist/middleware/ratelimit.js +180 -71
  12. package/dist/middleware/ratelimit.js.map +1 -1
  13. package/dist/modules/v4/barcode.d.ts +1 -1
  14. package/dist/modules/v4/barcode.js +9 -2
  15. package/dist/modules/v4/barcode.js.map +1 -1
  16. package/dist/modules/v4/captcha.d.ts +1 -1
  17. package/dist/modules/v4/captcha.js +5 -1
  18. package/dist/modules/v4/captcha.js.map +1 -1
  19. package/dist/modules/v4/chat.js +61 -12
  20. package/dist/modules/v4/chat.js.map +1 -1
  21. package/dist/modules/v4/cron.js +20 -2
  22. package/dist/modules/v4/cron.js.map +1 -1
  23. package/dist/modules/v4/hyperplanning.d.ts +11 -0
  24. package/dist/modules/v4/hyperplanning.js +30 -29
  25. package/dist/modules/v4/hyperplanning.js.map +1 -1
  26. package/dist/modules/v4/qrcode.d.ts +10 -0
  27. package/dist/modules/v4/qrcode.js +138 -14
  28. package/dist/modules/v4/qrcode.js.map +1 -1
  29. package/dist/modules/v4/regex.d.ts +1 -1
  30. package/dist/modules/v4/regex.js +67 -22
  31. package/dist/modules/v4/regex.js.map +1 -1
  32. package/dist/modules/v4/tic_tac_toe.js +56 -15
  33. package/dist/modules/v4/tic_tac_toe.js.map +1 -1
  34. package/dist/modules/v5/asymmetric.d.ts +15 -0
  35. package/dist/modules/v5/asymmetric.js +67 -5
  36. package/dist/modules/v5/asymmetric.js.map +1 -1
  37. package/dist/modules/v5/barcode.d.ts +1 -1
  38. package/dist/modules/v5/barcode.js +9 -2
  39. package/dist/modules/v5/barcode.js.map +1 -1
  40. package/dist/modules/v5/captcha.d.ts +12 -4
  41. package/dist/modules/v5/captcha.js +25 -8
  42. package/dist/modules/v5/captcha.js.map +1 -1
  43. package/dist/modules/v5/chat.js +66 -17
  44. package/dist/modules/v5/chat.js.map +1 -1
  45. package/dist/modules/v5/cron.d.ts +26 -0
  46. package/dist/modules/v5/cron.js +356 -0
  47. package/dist/modules/v5/cron.js.map +1 -0
  48. package/dist/modules/v5/pow.js +1 -1
  49. package/dist/modules/v5/pow.js.map +1 -1
  50. package/dist/modules/v5/tic_tac_toe.js +61 -20
  51. package/dist/modules/v5/tic_tac_toe.js.map +1 -1
  52. package/dist/modules/v5.d.ts +3 -2
  53. package/dist/modules/v5.js +3 -2
  54. package/dist/modules/v5.js.map +1 -1
  55. package/dist/routes/post.js +12 -5
  56. package/dist/routes/post.js.map +1 -1
  57. package/dist/storage/index.js +9 -8
  58. package/dist/storage/index.js.map +1 -1
  59. package/dist/types/storage.d.ts +4 -0
  60. package/dist/utils/challenge.d.ts +5 -3
  61. package/dist/utils/challenge.js +52 -6
  62. package/dist/utils/challenge.js.map +1 -1
  63. package/dist/utils/helpers.d.ts +18 -0
  64. package/dist/utils/helpers.js +35 -1
  65. package/dist/utils/helpers.js.map +1 -1
  66. package/dist/utils/remote.d.ts +42 -0
  67. package/dist/utils/remote.js +313 -0
  68. package/dist/utils/remote.js.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,356 @@
1
+ import { MAX_CRON_DURATION, MAX_CRON_GAP, MAX_CRON_ITERATIONS, MAX_CRON_RESULTS } from '../../constants.js';
2
+ import { VALID_TIMEZONES } from '../v4/time.js';
3
+ // Bounds of the minute, hour, day of month, month and day of week fields, where 0 and 7 are both Sunday
4
+ const FIELD_RANGES = [
5
+ { min: 0, max: 59 },
6
+ { min: 0, max: 23 },
7
+ { min: 1, max: 31 },
8
+ { min: 1, max: 12 },
9
+ { min: 0, max: 7 },
10
+ ];
11
+ // Longest length of each month, February counted as 29 days
12
+ const MONTH_DAYS = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
13
+ const DOW_NAMES = {
14
+ Sunday: 0,
15
+ Monday: 1,
16
+ Tuesday: 2,
17
+ Wednesday: 3,
18
+ Thursday: 4,
19
+ Friday: 5,
20
+ Saturday: 6,
21
+ };
22
+ const DOW_DISPLAY = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
23
+ /**
24
+ * Parses one cron field into the set of values it matches.
25
+ *
26
+ * @param field - Raw field text: a wildcard, a step, a range, a value or a comma-separated list of those
27
+ * @param range - Inclusive bounds allowed for this field
28
+ * @returns Every value matched by the field
29
+ * @throws Error if a value, range or step is invalid
30
+ */
31
+ function parseField(field, range) {
32
+ const result = new Set();
33
+ for (const part of field.split(',')) {
34
+ if (part === '*') {
35
+ for (let i = range.min; i <= range.max; i++)
36
+ result.add(i);
37
+ }
38
+ else if (part.startsWith('*/')) {
39
+ const step = parseInt(part.slice(2), 10);
40
+ if (isNaN(step) || step < 1)
41
+ throw new Error(`Invalid step in "${part}"`);
42
+ for (let i = range.min; i <= range.max; i += step)
43
+ result.add(i);
44
+ }
45
+ else if (part.includes('-')) {
46
+ const [s, e] = part.split('-');
47
+ const start = parseInt(s, 10);
48
+ const end = parseInt(e, 10);
49
+ if (isNaN(start) || isNaN(end) || start < range.min || end > range.max || start > end) {
50
+ throw new Error(`Invalid range "${part}" (valid: ${range.min}-${range.max})`);
51
+ }
52
+ for (let i = start; i <= end; i++)
53
+ result.add(i);
54
+ }
55
+ else {
56
+ const val = parseInt(part, 10);
57
+ if (isNaN(val) || val < range.min || val > range.max) {
58
+ throw new Error(`Invalid value "${part}" (valid: ${range.min}-${range.max})`);
59
+ }
60
+ result.add(val);
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ /**
66
+ * Reads the local calendar fields of an instant in the formatter's timezone.
67
+ *
68
+ * @param date - Instant to read
69
+ * @param formatter - Formatter bound to the target timezone
70
+ * @returns Local year, minute, hour, day of month, month (1-12) and day of week (0 = Sunday)
71
+ */
72
+ function getComponents(date, formatter) {
73
+ const parts = Object.fromEntries(formatter.formatToParts(date).map((p) => [p.type, p.value]));
74
+ const year = parseInt(parts.year, 10);
75
+ return {
76
+ year: parts.era === 'BC' ? 1 - year : year,
77
+ minute: parseInt(parts.minute, 10),
78
+ hour: parseInt(parts.hour, 10) % 24,
79
+ dom: parseInt(parts.day, 10),
80
+ month: parseInt(parts.month, 10),
81
+ dow: DOW_NAMES[parts.weekday] ?? 0,
82
+ };
83
+ }
84
+ /**
85
+ * Builds a UTC timestamp from calendar fields, without the 1900 offset Date.UTC applies to years 0-99.
86
+ *
87
+ * @param year - Full year, possibly zero or negative
88
+ * @param month - Month from 1 to 12
89
+ * @param day - Day of month
90
+ * @param hour - Hour of day
91
+ * @param minute - Minute of hour
92
+ * @returns Milliseconds since the epoch
93
+ */
94
+ function utc(year, month, day, hour = 0, minute = 0) {
95
+ const d = new Date(0);
96
+ d.setUTCFullYear(year, month - 1, day);
97
+ d.setUTCHours(hour, minute, 0, 0);
98
+ return d.getTime();
99
+ }
100
+ /**
101
+ * Counts the days of a month in the proleptic Gregorian calendar.
102
+ *
103
+ * @param year - Full year
104
+ * @param month - Month from 1 to 12
105
+ * @returns Number of days, 28 to 31
106
+ */
107
+ function daysInMonth(year, month) {
108
+ if (month !== 2)
109
+ return MONTH_DAYS[month - 1];
110
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 29 : 28;
111
+ }
112
+ /**
113
+ * Finds the first instant of a local calendar day in the formatter's timezone.
114
+ *
115
+ * @param year - Local year
116
+ * @param month - Local month from 1 to 12
117
+ * @param day - Local day of month
118
+ * @param formatter - Formatter bound to the target timezone
119
+ * @returns Timestamp of local midnight, or of the first whole hour of that day when midnight does not exist
120
+ */
121
+ function localMidnight(year, month, day, formatter) {
122
+ const guess = utc(year, month, day);
123
+ const p = getComponents(new Date(guess), formatter);
124
+ const ms = 2 * guess - utc(p.year, p.month, p.dom, p.hour, p.minute);
125
+ const q = getComponents(new Date(ms), formatter);
126
+ if (q.year === year && q.month === month && q.dom === day && q.hour === 0 && q.minute === 0)
127
+ return ms;
128
+ // The guess fell after a change later that day: the offset at the first estimate is the one in force at midnight
129
+ const retry = ms + guess - utc(q.year, q.month, q.dom, q.hour, q.minute);
130
+ const r = getComponents(new Date(retry), formatter);
131
+ if (r.year === year && r.month === month && r.dom === day && r.hour === 0 && r.minute === 0)
132
+ return retry;
133
+ // The offset changed between the guess and midnight: walk hourly from the earliest possible start
134
+ const key = (c) => (c.year * 100 + c.month) * 100 + c.dom;
135
+ const target = (year * 100 + month) * 100 + day;
136
+ let t = guess - 14 * 3600000;
137
+ for (let i = 0; i < 48 && key(getComponents(new Date(t), formatter)) < target; i++)
138
+ t += 3600000;
139
+ return t;
140
+ }
141
+ /**
142
+ * Finds the next local day, after the given one, whose month, day of month and day of week are all allowed.
143
+ *
144
+ * @param year - Current local year
145
+ * @param month - Current local month from 1 to 12
146
+ * @param dom - Current local day of month, or 0 to include the first day of the month
147
+ * @param domSet - Allowed days of month
148
+ * @param monthSet - Allowed months
149
+ * @param dowSet - Allowed days of week, 0 being Sunday
150
+ * @param formatter - Formatter bound to the target timezone
151
+ * @returns Timestamp of that day's local midnight, or null if none exists within 400 years
152
+ */
153
+ function nextDay(year, month, dom, domSet, monthSet, dowSet, formatter) {
154
+ let y = year;
155
+ let m = month;
156
+ let from = dom;
157
+ for (let i = 0; i < 400 * 12; i++) {
158
+ if (monthSet.has(m)) {
159
+ const last = daysInMonth(y, m);
160
+ // A calendar date falls on the same weekday in every timezone
161
+ const first = new Date(utc(y, m, 1)).getUTCDay();
162
+ for (let d = from + 1; d <= last; d++) {
163
+ if (domSet.has(d) && dowSet.has((first + d - 1) % 7))
164
+ return localMidnight(y, m, d, formatter);
165
+ }
166
+ }
167
+ m++;
168
+ if (m > 12) {
169
+ m = 1;
170
+ y++;
171
+ }
172
+ from = 0;
173
+ }
174
+ return null;
175
+ }
176
+ /**
177
+ * Formats a number on two digits.
178
+ *
179
+ * @param n - Number to format
180
+ * @returns Number padded with a leading zero
181
+ */
182
+ function pad(n) {
183
+ return String(n).padStart(2, '0');
184
+ }
185
+ /**
186
+ * Turns a day-of-week field into a readable label.
187
+ *
188
+ * @param field - Raw day-of-week field
189
+ * @returns Day name, weekday range label, or the raw field when it has no label
190
+ */
191
+ function formatDow(field) {
192
+ if (field === '1-5')
193
+ return 'Monday through Friday';
194
+ if (field === '0' || field === '7')
195
+ return 'Sunday';
196
+ if (field === '6')
197
+ return 'Saturday';
198
+ const n = parseInt(field, 10);
199
+ if (!isNaN(n))
200
+ return DOW_DISPLAY[n % 7] ?? field;
201
+ return field;
202
+ }
203
+ /**
204
+ * Builds a human-readable description of a cron expression.
205
+ *
206
+ * @param fields - The 5 raw fields of the expression
207
+ * @returns English sentence describing the schedule
208
+ */
209
+ function describe(fields) {
210
+ const [mF, hF, domF, monthF, dowF] = fields;
211
+ const isAll = (f) => f === '*';
212
+ const isFixed = (f) => /^\d+$/.test(f);
213
+ const isStep = (f) => /^\*\/\d+$/.test(f);
214
+ if (isAll(mF) && isAll(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
215
+ return 'Every minute';
216
+ }
217
+ if (isStep(mF) && isAll(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
218
+ const n = mF.slice(2);
219
+ return `Every ${n} minute${n === '1' ? '' : 's'}`;
220
+ }
221
+ if (mF === '0' && isAll(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
222
+ return 'Every hour';
223
+ }
224
+ if (mF === '0' && isStep(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
225
+ const n = hF.slice(2);
226
+ return `Every ${n} hour${n === '1' ? '' : 's'}`;
227
+ }
228
+ if (isFixed(mF) && isFixed(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
229
+ return `At ${pad(parseInt(hF))}:${pad(parseInt(mF))} daily`;
230
+ }
231
+ if (isFixed(mF) && isFixed(hF) && isAll(domF) && isAll(monthF) && !isAll(dowF)) {
232
+ return `At ${pad(parseInt(hF))}:${pad(parseInt(mF))}, ${formatDow(dowF)}`;
233
+ }
234
+ if (isFixed(mF) && isFixed(hF) && isFixed(domF) && isAll(monthF) && isAll(dowF)) {
235
+ return `At ${pad(parseInt(hF))}:${pad(parseInt(mF))}, on day ${domF} of the month`;
236
+ }
237
+ if (isStep(mF) && !isAll(hF) && isAll(domF) && isAll(monthF)) {
238
+ const n = mF.slice(2);
239
+ const parts = [`Every ${n} minute${n === '1' ? '' : 's'}`];
240
+ if (hF.includes('-')) {
241
+ const [h1, h2] = hF.split('-');
242
+ parts.push(`between ${pad(parseInt(h1))}:00 and ${pad(parseInt(h2))}:59`);
243
+ }
244
+ if (!isAll(dowF))
245
+ parts.push(formatDow(dowF));
246
+ return parts.join(', ');
247
+ }
248
+ return `At cron schedule: ${fields.join(' ')}`;
249
+ }
250
+ /**
251
+ * Parses a cron expression and returns the next scheduled execution dates.
252
+ *
253
+ * @param expr - Cron expression with 5 space-separated fields (minute hour dom month dow)
254
+ * @param count - Number of next executions to return (1-20, default 5)
255
+ * @param from - Starting date in ISO 8601 format (defaults to now)
256
+ * @param timezone - Timezone to evaluate the expression in (default "UTC")
257
+ * @returns Parsed expression with description and list of next execution timestamps
258
+ * @throws Error if the expression is invalid, count is out of range, or timezone is unsupported
259
+ */
260
+ export default function cron(expr, count = 5, from, timezone = 'UTC') {
261
+ return cronSearch(expr, count, from, timezone).result;
262
+ }
263
+ /**
264
+ * Runs the cron search and also tells whether it listed every date the schedule will ever have.
265
+ *
266
+ * @param expr - Cron expression with 5 space-separated fields (minute hour dom month dow)
267
+ * @param count - Number of next executions to look for (1-20)
268
+ * @param from - Starting date in ISO 8601 format (defaults to now)
269
+ * @param timezone - Timezone to evaluate the expression in
270
+ * @returns The cron result, and complete set when fewer than count dates exist after from
271
+ * @throws Error if the expression is invalid, count is out of range, or timezone is unsupported
272
+ */
273
+ export function cronSearch(expr, count, from, timezone) {
274
+ if (!expr)
275
+ throw new Error('Please provide a cron expression (?expr=* * * * *)');
276
+ if (!VALID_TIMEZONES.includes(timezone)) {
277
+ throw new Error(`Please provide a valid timezone. Options: ${VALID_TIMEZONES.join(', ')}`);
278
+ }
279
+ const fields = expr.trim().split(/\s+/);
280
+ if (fields.length !== 5) {
281
+ throw new Error('Cron expression must have exactly 5 fields (minute hour dom month dow)');
282
+ }
283
+ if (count < 1 || count > MAX_CRON_RESULTS) {
284
+ throw new Error(`Count must be between 1 and ${MAX_CRON_RESULTS}`);
285
+ }
286
+ const fromMs = from ? new Date(from).getTime() : Date.now();
287
+ if (from && isNaN(fromMs))
288
+ throw new Error('Please provide a valid from date (ISO 8601)');
289
+ const sets = fields.map((f, i) => parseField(f, FIELD_RANGES[i]));
290
+ const [minuteSet, hourSet, domSet, monthSet, dowSet] = sets;
291
+ if (dowSet.has(7)) {
292
+ dowSet.add(0);
293
+ dowSet.delete(7);
294
+ }
295
+ const result = { expression: expr.trim(), description: describe(fields), next: [], timezone };
296
+ // A day of month longer than every allowed month (31 2, 30 2) can never match
297
+ const fits = [...monthSet].some((m) => [...domSet].some((d) => d <= MONTH_DAYS[m - 1]));
298
+ if (!fits)
299
+ return { result, complete: true };
300
+ const formatter = new Intl.DateTimeFormat('en-US', {
301
+ timeZone: timezone,
302
+ era: 'short',
303
+ year: 'numeric',
304
+ month: 'numeric',
305
+ day: 'numeric',
306
+ hour: 'numeric',
307
+ minute: 'numeric',
308
+ weekday: 'long',
309
+ hour12: false,
310
+ });
311
+ let currentMs = (Math.floor(fromMs / 60000) + 1) * 60000;
312
+ const { next } = result;
313
+ const lastHour = Math.max(...hourSet);
314
+ const deadline = Date.now() + MAX_CRON_DURATION;
315
+ let lastMs = fromMs;
316
+ let complete = false;
317
+ let iterations = 0;
318
+ while (next.length < count && iterations < MAX_CRON_ITERATIONS && Date.now() < deadline) {
319
+ // Dates and weekdays repeat every 400 years, so a schedule idle for longer never fires (DST gaps)
320
+ if (currentMs - lastMs > MAX_CRON_GAP) {
321
+ complete = true;
322
+ break;
323
+ }
324
+ const { year, minute, hour, dom, month, dow } = getComponents(new Date(currentMs), formatter);
325
+ // Past the last allowed hour, the rest of the day cannot match either
326
+ const dayOver = hour > lastHour;
327
+ if (!monthSet.has(month) || !domSet.has(dom) || !dowSet.has(dow) || dayOver) {
328
+ const after = monthSet.has(month) ? dom : 0;
329
+ const target = nextDay(year, month, after, domSet, monthSet, dowSet, formatter);
330
+ if (target === null) {
331
+ complete = true;
332
+ break;
333
+ }
334
+ // A jump that does not move forward would loop forever, so fall back to the next minute
335
+ currentMs = Math.max(target, currentMs + 60000);
336
+ }
337
+ else if (!hourSet.has(hour)) {
338
+ currentMs += (60 - minute) * 60000;
339
+ }
340
+ else if (!minuteSet.has(minute)) {
341
+ // Offsets never change within an hour in the supported timezones, so this jump is safe
342
+ let m = minute + 1;
343
+ while (m < 60 && !minuteSet.has(m))
344
+ m++;
345
+ currentMs += (m - minute) * 60000;
346
+ }
347
+ else {
348
+ next.push(new Date(currentMs).toISOString());
349
+ lastMs = currentMs;
350
+ currentMs += 60000;
351
+ }
352
+ iterations++;
353
+ }
354
+ return { result, complete };
355
+ }
356
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/modules/v5/cron.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,6 @@ export function verifyPow(token, nonce, storage) {
44
44
  if (!digest(decoded.salt, nonce).startsWith('0'.repeat(decoded.difficulty))) {
45
45
  return { valid: false, reason: 'wrong' };
46
46
  }
47
- return verifyToken(token, `${decoded.salt}.${decoded.difficulty}`, storage);
47
+ return verifyToken(token, `${decoded.salt}.${decoded.difficulty}`, storage, 'pow');
48
48
  }
49
49
  //# sourceMappingURL=pow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pow.js","sourceRoot":"","sources":["../../../src/modules/v5/pow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGhF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAW7E,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAErH;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,aAAqB,sBAAsB;IACnE,IAAI,KAAK,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,kBAAkB,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,oCAAoC,kBAAkB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAE9E,OAAO;QACH,SAAS,EAAE,QAAQ;QACnB,IAAI;QACJ,UAAU;QACV,OAAO,EAAE,SAAS,CAAC,KAAK,CAAE,CAAC,GAAG;QAC9B,KAAK;QACL,YAAY,EAAE,uDAAuD,UAAU,YAAY;KAC9F,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,KAAa,EAAE,OAAyB;IAC7E,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"pow.js","sourceRoot":"","sources":["../../../src/modules/v5/pow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGhF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAW7E,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAErH;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,aAAqB,sBAAsB;IACnE,IAAI,KAAK,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,kBAAkB,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,oCAAoC,kBAAkB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAE9E,OAAO;QACH,SAAS,EAAE,QAAQ;QACnB,IAAI;QACJ,UAAU;QACV,OAAO,EAAE,SAAS,CAAC,KAAK,CAAE,CAAC,GAAG;QAC9B,KAAK;QACL,YAAY,EAAE,uDAAuD,UAAU,YAAY;KAC9F,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,KAAa,EAAE,OAAyB;IAC7E,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACvF,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { randomBytes } from 'crypto';
2
- import { GAME_CLEANUP_TTL, RATE_LIMIT_MAX, RATE_LIMIT_WINDOW, SESSION_TTL } from '../../constants.js';
2
+ import { GAME_CLEANUP_TTL, MAX_ID_LENGTH, MAX_USERNAME_LENGTH, RATE_LIMIT_MAX, RATE_LIMIT_WINDOW, SESSION_TTL, } from '../../constants.js';
3
+ import { checkString } from '../../utils/helpers.js';
3
4
  /**
4
5
  * Handles Tic-Tac-Toe game actions including playing a move, fetching game state, listing games, and forfeiting.
5
6
  *
@@ -10,17 +11,20 @@ import { GAME_CLEANUP_TTL, RATE_LIMIT_MAX, RATE_LIMIT_WINDOW, SESSION_TTL } from
10
11
  */
11
12
  export default function tic_tac_toe(action, params) {
12
13
  const storage = params.storage;
13
- storage.games ??= {};
14
- storage.sessions ??= {};
15
- storage.rateLimits ??= {};
14
+ storage.games ??= Object.create(null);
15
+ storage.sessions ??= Object.create(null);
16
+ storage.rateLimits ??= Object.create(null);
16
17
  const { games, sessions, rateLimits } = storage;
17
18
  if (action === 'list')
18
19
  return listGames(games);
19
20
  if (!params.username)
20
21
  throw new Error('Please provide a username');
22
+ checkString(params.username, 'username', MAX_USERNAME_LENGTH);
23
+ checkString(params.session, 'session ID', MAX_ID_LENGTH);
24
+ checkString(params.game, 'game ID', MAX_ID_LENGTH);
21
25
  const u = params.username.toLowerCase();
22
26
  const now = Date.now();
23
- rateLimits[u] = (rateLimits[u] ?? []).filter((ts) => now - ts < RATE_LIMIT_WINDOW);
27
+ rateLimits[u] = (Object.hasOwn(rateLimits, u) ? rateLimits[u] : []).filter((ts) => now - ts < RATE_LIMIT_WINDOW);
24
28
  if (rateLimits[u].length >= RATE_LIMIT_MAX) {
25
29
  const remainingTime = Math.ceil((rateLimits[u][0] + RATE_LIMIT_WINDOW - now) / 1000);
26
30
  throw new Error(`Rate limit exceeded. Try again in ${remainingTime} seconds.`);
@@ -39,16 +43,25 @@ export default function tic_tac_toe(action, params) {
39
43
  throw new Error('Invalid action. Use "play", "fetch", "list", or "forfeit"');
40
44
  }
41
45
  }
46
+ /**
47
+ * Ends a game on behalf of one of its players, the other player winning.
48
+ *
49
+ * @param params - Game parameters holding the game ID, session and username
50
+ * @param games - Games keyed by ID
51
+ * @param sessions - Session bound to each lowercased username
52
+ * @returns Forfeit message with the winner, or null when the player was alone, and the loser
53
+ * @throws Error if the game or session is missing, the game does not exist, the session does not match, or the user is not a player
54
+ */
42
55
  function forfeitGame(params, games, sessions) {
43
56
  const { game, session } = params;
44
57
  if (!game)
45
58
  throw new Error('Please provide a valid game ID');
46
59
  if (!session)
47
60
  throw new Error('Please provide a valid session ID');
48
- if (!games[game])
61
+ if (!Object.hasOwn(games, game))
49
62
  throw new Error('Game not found');
50
63
  const u = params.username.toLowerCase();
51
- if (sessions[u] && sessions[u].user !== session) {
64
+ if (Object.hasOwn(sessions, u) && sessions[u].user !== session) {
52
65
  throw new Error('Session ID mismatch');
53
66
  }
54
67
  const players = games[game].players;
@@ -63,6 +76,17 @@ function forfeitGame(params, games, sessions) {
63
76
  loser: params.username,
64
77
  };
65
78
  }
79
+ /**
80
+ * Records a move in a game, creating the game on its first move.
81
+ *
82
+ * @param params - Game parameters holding the move, session, game ID and username
83
+ * @param games - Games keyed by ID
84
+ * @param sessions - Session bound to each lowercased username
85
+ * @param u - Lowercased username
86
+ * @param now - Current timestamp in milliseconds
87
+ * @returns Confirmation message, with the winner, loser or tie once the game is over
88
+ * @throws Error if a parameter is missing or invalid, the session does not match, the game is full, or it is not the user's turn
89
+ */
66
90
  function playMove(params, games, sessions, u, now) {
67
91
  const { move, session, game } = params;
68
92
  const validMoves = ['1-1', '1-2', '1-3', '2-1', '2-2', '2-3', '3-1', '3-2', '3-3'];
@@ -74,15 +98,17 @@ function playMove(params, games, sessions, u, now) {
74
98
  throw new Error('Please provide a valid game ID');
75
99
  if (!validMoves.includes(move))
76
100
  throw new Error('Invalid move. Please provide a valid move (e.g., 1-1, 2-2, 3-3).');
77
- if (sessions[u] && sessions[u].user !== session) {
101
+ if (Object.hasOwn(sessions, u) && sessions[u].user !== session) {
78
102
  throw new Error('Session ID mismatch');
79
103
  }
80
- games[game] = games[game] ?? {
81
- moves: [],
82
- players: [],
83
- private: params.private || false,
84
- creation: Date.now(),
85
- };
104
+ if (!Object.hasOwn(games, game)) {
105
+ games[game] = {
106
+ moves: [],
107
+ players: [],
108
+ private: params.private || false,
109
+ creation: Date.now(),
110
+ };
111
+ }
86
112
  const g = games[game];
87
113
  const moves = g.moves;
88
114
  if (!g.players.includes(u)) {
@@ -103,7 +129,7 @@ function playMove(params, games, sessions, u, now) {
103
129
  const result = checkGame(moves);
104
130
  if (result.winner || result.tie) {
105
131
  setTimeout(() => {
106
- if (games[game] && games[game].creation === creation)
132
+ if (Object.hasOwn(games, game) && games[game].creation === creation)
107
133
  delete games[game];
108
134
  }, GAME_CLEANUP_TTL).unref();
109
135
  return {
@@ -112,22 +138,31 @@ function playMove(params, games, sessions, u, now) {
112
138
  };
113
139
  }
114
140
  setTimeout(() => {
115
- const cur = games[game];
141
+ const cur = Object.hasOwn(games, game) ? games[game] : undefined;
116
142
  if (cur && cur.creation === creation && Date.now() - (cur.last ?? cur.creation) >= SESSION_TTL) {
117
143
  delete games[game];
118
144
  }
119
145
  }, SESSION_TTL).unref();
120
- sessions[u] = sessions[u] ?? { user: session, last: now };
146
+ if (!Object.hasOwn(sessions, u))
147
+ sessions[u] = { user: session, last: now };
121
148
  sessions[u].last = now;
122
149
  setTimeout(() => {
123
- if (sessions[u] && Date.now() - sessions[u].last >= SESSION_TTL)
150
+ if (Object.hasOwn(sessions, u) && Date.now() - sessions[u].last >= SESSION_TTL)
124
151
  delete sessions[u];
125
152
  }, SESSION_TTL).unref();
126
153
  return { message: 'Move sent successfully' };
127
154
  }
155
+ /**
156
+ * Returns the state of a game and adds the user to its players, creating it when needed.
157
+ *
158
+ * @param params - Game parameters holding the optional game ID, a random one being generated when absent
159
+ * @param games - Games keyed by ID
160
+ * @param u - Lowercased username
161
+ * @returns Game ID, moves, players, turn, status, privacy and result so far
162
+ */
128
163
  function fetchGame(params, games, u) {
129
164
  const id = params.game || generateGameId();
130
- if (!games[id]) {
165
+ if (!Object.hasOwn(games, id)) {
131
166
  games[id] = {
132
167
  moves: [],
133
168
  players: [],
@@ -191,11 +226,17 @@ function generateGameId() {
191
226
  .map((b) => chars[b % chars.length])
192
227
  .join('');
193
228
  }
229
+ /**
230
+ * Replays the moves on a board to find the winner or a tie.
231
+ *
232
+ * @param moves - Moves in play order, the first player taking X
233
+ * @returns Winner and loser usernames, null when nobody won yet, and whether the board is full without a winner
234
+ */
194
235
  function checkGame(moves) {
195
236
  const board = Array(3)
196
237
  .fill(null)
197
238
  .map(() => Array(3).fill(null));
198
- const playerSymbols = {};
239
+ const playerSymbols = Object.create(null);
199
240
  const playersOrder = [];
200
241
  moves.forEach(({ username, move }) => {
201
242
  if (!playerSymbols[username]) {
@@ -1 +1 @@
1
- {"version":3,"file":"tic_tac_toe.js","sourceRoot":"","sources":["../../../src/modules/v5/tic_tac_toe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tic_tac_toe.js","sourceRoot":"","sources":["../../../src/modules/v5/tic_tac_toe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,WAAW,GACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAiBrD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,MAAc,EAAE,MAAuB;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAE/B,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEhD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAEnE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC9D,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACzD,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAEnD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAClH,IAAI,UAAU,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,iBAAiB,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,qCAAqC,aAAa,WAAW,CAAC,CAAC;IACnF,CAAC;IACD,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACjF,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,WAAW,CAChB,MAAuB,EACvB,KAAoC,EACpC,QAAwD;IAExD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEjC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEnE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAS,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAE/E,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEnB,OAAO;QACH,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,uBAAuB,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;QACpF,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,QAAQ;KACzB,CAAC;AACN,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,QAAQ,CACb,MAAuB,EACvB,KAAoC,EACpC,QAAwD,EACxD,CAAS,EACT,GAAW;IAEX,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACvC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEnF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAEpH,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG;YACV,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC;IACN,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;IACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAEtB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAChF,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,IAAI,GAAkB,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;IAEb,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAC9B,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAK,CAAC,IAAI,KAAK,CAAC,IAAK,CAAE,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC,IAAK,CAAC,CAAC;QAChG,CAAC,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO;YACH,OAAO,EAAE,2BAA2B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE;YAC1H,GAAG,MAAM;SACZ,CAAC;IACN,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACZ,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC;YAC7F,OAAO,KAAK,CAAC,IAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAExB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC5E,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,GAAG,GAAG,CAAC;IACxB,UAAU,CAAC,GAAG,EAAE;QACZ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,WAAW;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxG,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAExB,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,MAAuB,EAAE,KAAoC,EAAE,CAAS;IACvF,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,EAAE,CAAC,GAAG;YACR,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC;IACN,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC,KAAK,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,OAAO;QACH,EAAE;QACF,KAAK;QACL,OAAO;QACP,IAAI;QACJ,MAAM;QACN,OAAO,EAAE,WAAW;QACpB,GAAG,MAAM;KACZ,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,KAAoC;IACnD,MAAM,WAAW,GAA8B,EAAE,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC;YAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE9D,WAAW,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,MAAM;oBACV,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBACjC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;oBACxB,IAAI;oBACJ,MAAM;oBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,GAAG;iBACjC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,QAAmB,GAAI,CAAC,CAAC,QAAmB,CAAC,CAAC;IAE5E,OAAO;QACH,OAAO,EAAE,wBAAwB;QACjC,KAAK,EAAE,WAAW,CAAC,MAAM;QACzB,KAAK,EAAE,WAAW;KACrB,CAAC;AACN,CAAC;AAED,SAAS,cAAc;IACnB,MAAM,KAAK,GAAG,sCAAsC,CAAC;IACrD,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;SACnC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,KAAsB;IACrC,MAAM,KAAK,GAAwB,KAAK,CAAC,CAAC,CAAC;SACtC,IAAI,CAAC,IAAI,CAAC;SACV,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAsB,CAAC,CAAC;IACzD,MAAM,aAAa,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,aAAa,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqB,CAAC;QACnE,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,CAAC,MAAc,EAAW,EAAE;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC/F,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC/F,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC/F,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IACxG,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GACP,MAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5G,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC"}
@@ -1,13 +1,14 @@
1
- export { agent, avatar, captcha, color, convert, credit, cron, dice, domain, encode, geo, hash, hyperplanning, ip, levenshtein, palette, password, personal, placeholder, qrcode, regex, statistics, time, token, username, validate, } from './v4.js';
1
+ export { agent, avatar, captcha, color, convert, credit, dice, domain, encode, geo, hash, hyperplanning, ip, levenshtein, palette, password, personal, placeholder, qrcode, regex, statistics, time, token, username, validate, } from './v4.js';
2
2
  export { default as address } from './v5/address.js';
3
3
  export * as algorithms from './v5/algorithms.js';
4
- export { default as asymmetric } from './v5/asymmetric.js';
4
+ export { default as asymmetric, asymmetricAsync } from './v5/asymmetric.js';
5
5
  export { default as barcode } from './v5/barcode.js';
6
6
  export { default as base } from './v5/base.js';
7
7
  export { default as captchaChallenge, verifyCaptcha } from './v5/captcha.js';
8
8
  export { default as caseConvert } from './v5/case.js';
9
9
  export * as chart from './v5/chart.js';
10
10
  export { default as chat } from './v5/chat.js';
11
+ export { default as cron } from './v5/cron.js';
11
12
  export { default as csv } from './v5/csv.js';
12
13
  export { default as diff } from './v5/diff.js';
13
14
  export { default as evaluate } from './v5/evaluate.js';