@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.
- package/README.md +21 -14
- package/dist/app.js +5 -3
- package/dist/app.js.map +1 -1
- package/dist/constants.d.ts +22 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -1
- package/dist/middleware/cors.d.ts +15 -0
- package/dist/middleware/cors.js +25 -6
- package/dist/middleware/cors.js.map +1 -1
- package/dist/middleware/ratelimit.d.ts +53 -1
- package/dist/middleware/ratelimit.js +180 -71
- package/dist/middleware/ratelimit.js.map +1 -1
- package/dist/modules/v4/barcode.d.ts +1 -1
- package/dist/modules/v4/barcode.js +9 -2
- package/dist/modules/v4/barcode.js.map +1 -1
- package/dist/modules/v4/captcha.d.ts +1 -1
- package/dist/modules/v4/captcha.js +5 -1
- package/dist/modules/v4/captcha.js.map +1 -1
- package/dist/modules/v4/chat.js +61 -12
- package/dist/modules/v4/chat.js.map +1 -1
- package/dist/modules/v4/cron.js +20 -2
- package/dist/modules/v4/cron.js.map +1 -1
- package/dist/modules/v4/hyperplanning.d.ts +11 -0
- package/dist/modules/v4/hyperplanning.js +30 -29
- package/dist/modules/v4/hyperplanning.js.map +1 -1
- package/dist/modules/v4/qrcode.d.ts +10 -0
- package/dist/modules/v4/qrcode.js +138 -14
- package/dist/modules/v4/qrcode.js.map +1 -1
- package/dist/modules/v4/regex.d.ts +1 -1
- package/dist/modules/v4/regex.js +67 -22
- package/dist/modules/v4/regex.js.map +1 -1
- package/dist/modules/v4/tic_tac_toe.js +56 -15
- package/dist/modules/v4/tic_tac_toe.js.map +1 -1
- package/dist/modules/v5/asymmetric.d.ts +15 -0
- package/dist/modules/v5/asymmetric.js +67 -5
- package/dist/modules/v5/asymmetric.js.map +1 -1
- package/dist/modules/v5/barcode.d.ts +1 -1
- package/dist/modules/v5/barcode.js +9 -2
- package/dist/modules/v5/barcode.js.map +1 -1
- package/dist/modules/v5/captcha.d.ts +12 -4
- package/dist/modules/v5/captcha.js +25 -8
- package/dist/modules/v5/captcha.js.map +1 -1
- package/dist/modules/v5/chat.js +66 -17
- package/dist/modules/v5/chat.js.map +1 -1
- package/dist/modules/v5/cron.d.ts +26 -0
- package/dist/modules/v5/cron.js +356 -0
- package/dist/modules/v5/cron.js.map +1 -0
- package/dist/modules/v5/pow.js +1 -1
- package/dist/modules/v5/pow.js.map +1 -1
- package/dist/modules/v5/tic_tac_toe.js +61 -20
- package/dist/modules/v5/tic_tac_toe.js.map +1 -1
- package/dist/modules/v5.d.ts +3 -2
- package/dist/modules/v5.js +3 -2
- package/dist/modules/v5.js.map +1 -1
- package/dist/routes/post.js +12 -5
- package/dist/routes/post.js.map +1 -1
- package/dist/storage/index.js +9 -8
- package/dist/storage/index.js.map +1 -1
- package/dist/types/storage.d.ts +4 -0
- package/dist/utils/challenge.d.ts +5 -3
- package/dist/utils/challenge.js +52 -6
- package/dist/utils/challenge.js.map +1 -1
- package/dist/utils/helpers.d.ts +18 -0
- package/dist/utils/helpers.js +35 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/remote.d.ts +42 -0
- package/dist/utils/remote.js +313 -0
- package/dist/utils/remote.js.map +1 -0
- 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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE5G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAahD,wGAAwG;AACxG,MAAM,YAAY,GAAG;IACjB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CACZ,CAAC;AAEX,4DAA4D;AAC5D,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEpE,MAAM,SAAS,GAA2B;IACtC,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEnG;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,KAAa,EAAE,KAAmC;IAClE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,GAAG,CAAC,CAAC;YAC1E,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;gBACpF,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,aAAa,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,aAAa,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAU,EAAE,SAA8B;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAK,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO;QACH,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;QAC1C,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAO,EAAE,EAAE,CAAC;QACnC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAK,EAAE,EAAE,CAAC,GAAG,EAAE;QACpC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAI,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAM,EAAE,EAAE,CAAC;QACjC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,OAAQ,CAAC,IAAI,CAAC;KACtC,CAAC;AACN,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,OAAe,CAAC,EAAE,SAAiB,CAAC;IACvF,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;IAC/C,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,SAA8B;IAC3F,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvG,iHAAiH;IACjH,MAAM,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1G,kGAAkG;IAClG,MAAM,GAAG,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IACtE,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IAChD,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,IAAI,OAAO,CAAC;IACjG,OAAO,CAAC,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,OAAO,CACZ,IAAY,EACZ,KAAa,EACb,GAAW,EACX,MAAmB,EACnB,QAAqB,EACrB,MAAmB,EACnB,SAA8B;IAE9B,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,IAAI,IAAI,GAAG,GAAG,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/B,8DAA8D;YAC9D,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBAAE,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YACnG,CAAC;QACL,CAAC;QACD,CAAC,EAAE,CAAC;QACJ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACT,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,EAAE,CAAC;QACR,CAAC;QACD,IAAI,GAAG,CAAC,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,GAAG,CAAC,CAAS;IAClB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,KAAa;IAC5B,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,uBAAuB,CAAC;IACpD,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC;IACpD,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC;IACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;IAClD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,MAAgB;IAC9B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,MAAkD,CAAC;IAExF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAElD,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,IAAI,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1E,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,IAAI,eAAe,CAAC;IACvF,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,qBAAqB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,IAAY,EAAE,QAAgB,CAAC,EAAE,IAAa,EAAE,WAAmB,KAAK;IACjG,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACtB,IAAY,EACZ,KAAa,EACb,IAAwB,EACxB,QAAgB;IAEhB,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAEjF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAoB,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,6CAA6C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,+BAA+B,gBAAgB,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5D,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,IAMtD,CAAC;IAEF,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAc,EAAE,QAAQ,EAAE,CAAC;IAE1G,8EAA8E;IAC9E,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE7C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC/C,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAEzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;IAChD,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,UAAU,GAAG,mBAAmB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtF,kGAAkG;QAClG,IAAI,SAAS,GAAG,MAAM,GAAG,YAAY,EAAE,CAAC;YACpC,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACV,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAE9F,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAChF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClB,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM;YACV,CAAC;YAED,wFAAwF;YACxF,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,SAAS,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;QACvC,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,uFAAuF;YACvF,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,CAAC,EAAE,CAAC;YACxC,SAAS,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7C,MAAM,GAAG,SAAS,CAAC;YACnB,SAAS,IAAI,KAAK,CAAC;QACvB,CAAC;QAED,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
|
package/dist/modules/v5/pow.js
CHANGED
|
@@ -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;
|
|
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]
|
|
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
|
|
61
|
+
if (!Object.hasOwn(games, game))
|
|
49
62
|
throw new Error('Game not found');
|
|
50
63
|
const u = params.username.toLowerCase();
|
|
51
|
-
if (sessions
|
|
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
|
|
101
|
+
if (Object.hasOwn(sessions, u) && sessions[u].user !== session) {
|
|
78
102
|
throw new Error('Session ID mismatch');
|
|
79
103
|
}
|
|
80
|
-
games
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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":"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"}
|
package/dist/modules/v5.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
export { agent, avatar, captcha, color, convert, credit,
|
|
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';
|