@moxon/api 6.0.0-pre
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/.prettierignore +5 -0
- package/LICENSE +28 -0
- package/README.md +277 -0
- package/dist/app.d.ts +2 -0
- package/dist/app.js +55 -0
- package/dist/app.js.map +1 -0
- package/dist/config/env.d.ts +22 -0
- package/dist/config/env.js +36 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/plans.d.ts +26 -0
- package/dist/config/plans.js +44 -0
- package/dist/config/plans.js.map +1 -0
- package/dist/config/versions.d.ts +18 -0
- package/dist/config/versions.js +248 -0
- package/dist/config/versions.js.map +1 -0
- package/dist/constants.d.ts +48 -0
- package/dist/constants.js +75 -0
- package/dist/constants.js.map +1 -0
- package/dist/middleware/cors.d.ts +2 -0
- package/dist/middleware/cors.js +31 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/error.d.ts +4 -0
- package/dist/middleware/error.js +8 -0
- package/dist/middleware/error.js.map +1 -0
- package/dist/middleware/json.d.ts +2 -0
- package/dist/middleware/json.js +8 -0
- package/dist/middleware/json.js.map +1 -0
- package/dist/middleware/logger.d.ts +26 -0
- package/dist/middleware/logger.js +65 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/ratelimit.d.ts +2 -0
- package/dist/middleware/ratelimit.js +83 -0
- package/dist/middleware/ratelimit.js.map +1 -0
- package/dist/middleware/version.d.ts +3 -0
- package/dist/middleware/version.js +30 -0
- package/dist/middleware/version.js.map +1 -0
- package/dist/modules/v4/address.d.ts +20 -0
- package/dist/modules/v4/address.js +381 -0
- package/dist/modules/v4/address.js.map +1 -0
- package/dist/modules/v4/agent.d.ts +30 -0
- package/dist/modules/v4/agent.js +92 -0
- package/dist/modules/v4/agent.js.map +1 -0
- package/dist/modules/v4/algorithms.d.ts +90 -0
- package/dist/modules/v4/algorithms.js +279 -0
- package/dist/modules/v4/algorithms.js.map +1 -0
- package/dist/modules/v4/avatar.d.ts +23 -0
- package/dist/modules/v4/avatar.js +136 -0
- package/dist/modules/v4/avatar.js.map +1 -0
- package/dist/modules/v4/barcode.d.ts +27 -0
- package/dist/modules/v4/barcode.js +440 -0
- package/dist/modules/v4/barcode.js.map +1 -0
- package/dist/modules/v4/captcha.d.ts +22 -0
- package/dist/modules/v4/captcha.js +79 -0
- package/dist/modules/v4/captcha.js.map +1 -0
- package/dist/modules/v4/chat.d.ts +21 -0
- package/dist/modules/v4/chat.js +100 -0
- package/dist/modules/v4/chat.js.map +1 -0
- package/dist/modules/v4/color.d.ts +16 -0
- package/dist/modules/v4/color.js +59 -0
- package/dist/modules/v4/color.js.map +1 -0
- package/dist/modules/v4/convert.d.ts +15 -0
- package/dist/modules/v4/convert.js +116 -0
- package/dist/modules/v4/convert.js.map +1 -0
- package/dist/modules/v4/credit.d.ts +22 -0
- package/dist/modules/v4/credit.js +104 -0
- package/dist/modules/v4/credit.js.map +1 -0
- package/dist/modules/v4/cron.d.ts +17 -0
- package/dist/modules/v4/cron.js +202 -0
- package/dist/modules/v4/cron.js.map +1 -0
- package/dist/modules/v4/dice.d.ts +16 -0
- package/dist/modules/v4/dice.js +37 -0
- package/dist/modules/v4/dice.js.map +1 -0
- package/dist/modules/v4/domain.d.ts +6 -0
- package/dist/modules/v4/domain.js +83 -0
- package/dist/modules/v4/domain.js.map +1 -0
- package/dist/modules/v4/encode.d.ts +81 -0
- package/dist/modules/v4/encode.js +236 -0
- package/dist/modules/v4/encode.js.map +1 -0
- package/dist/modules/v4/geo.d.ts +30 -0
- package/dist/modules/v4/geo.js +51 -0
- package/dist/modules/v4/geo.js.map +1 -0
- package/dist/modules/v4/hash.d.ts +15 -0
- package/dist/modules/v4/hash.js +25 -0
- package/dist/modules/v4/hash.js.map +1 -0
- package/dist/modules/v4/hyperplanning.d.ts +19 -0
- package/dist/modules/v4/hyperplanning.js +80 -0
- package/dist/modules/v4/hyperplanning.js.map +1 -0
- package/dist/modules/v4/ip.d.ts +19 -0
- package/dist/modules/v4/ip.js +132 -0
- package/dist/modules/v4/ip.js.map +1 -0
- package/dist/modules/v4/levenshtein.d.ts +13 -0
- package/dist/modules/v4/levenshtein.js +37 -0
- package/dist/modules/v4/levenshtein.js.map +1 -0
- package/dist/modules/v4/palette.d.ts +19 -0
- package/dist/modules/v4/palette.js +56 -0
- package/dist/modules/v4/palette.js.map +1 -0
- package/dist/modules/v4/password.d.ts +25 -0
- package/dist/modules/v4/password.js +343 -0
- package/dist/modules/v4/password.js.map +1 -0
- package/dist/modules/v4/personal.d.ts +6 -0
- package/dist/modules/v4/personal.js +121 -0
- package/dist/modules/v4/personal.js.map +1 -0
- package/dist/modules/v4/placeholder.d.ts +30 -0
- package/dist/modules/v4/placeholder.js +160 -0
- package/dist/modules/v4/placeholder.js.map +1 -0
- package/dist/modules/v4/qrcode.d.ts +25 -0
- package/dist/modules/v4/qrcode.js +92 -0
- package/dist/modules/v4/qrcode.js.map +1 -0
- package/dist/modules/v4/regex.d.ts +23 -0
- package/dist/modules/v4/regex.js +48 -0
- package/dist/modules/v4/regex.js.map +1 -0
- package/dist/modules/v4/statistics.d.ts +20 -0
- package/dist/modules/v4/statistics.js +48 -0
- package/dist/modules/v4/statistics.js.map +1 -0
- package/dist/modules/v4/text.d.ts +43 -0
- package/dist/modules/v4/text.js +323 -0
- package/dist/modules/v4/text.js.map +1 -0
- package/dist/modules/v4/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v4/tic_tac_toe.js +214 -0
- package/dist/modules/v4/tic_tac_toe.js.map +1 -0
- package/dist/modules/v4/time.d.ts +15 -0
- package/dist/modules/v4/time.js +124 -0
- package/dist/modules/v4/time.js.map +1 -0
- package/dist/modules/v4/token.d.ts +9 -0
- package/dist/modules/v4/token.js +45 -0
- package/dist/modules/v4/token.js.map +1 -0
- package/dist/modules/v4/username.d.ts +6 -0
- package/dist/modules/v4/username.js +92 -0
- package/dist/modules/v4/username.js.map +1 -0
- package/dist/modules/v4/validate.d.ts +34 -0
- package/dist/modules/v4/validate.js +75 -0
- package/dist/modules/v4/validate.js.map +1 -0
- package/dist/modules/v4.d.ts +32 -0
- package/dist/modules/v4.js +33 -0
- package/dist/modules/v4.js.map +1 -0
- package/dist/modules/v5/address.d.ts +5 -0
- package/dist/modules/v5/address.js +20 -0
- package/dist/modules/v5/address.js.map +1 -0
- package/dist/modules/v5/algorithms.d.ts +9 -0
- package/dist/modules/v5/algorithms.js +39 -0
- package/dist/modules/v5/algorithms.js.map +1 -0
- package/dist/modules/v5/asymmetric.d.ts +26 -0
- package/dist/modules/v5/asymmetric.js +74 -0
- package/dist/modules/v5/asymmetric.js.map +1 -0
- package/dist/modules/v5/barcode.d.ts +27 -0
- package/dist/modules/v5/barcode.js +424 -0
- package/dist/modules/v5/barcode.js.map +1 -0
- package/dist/modules/v5/base.d.ts +16 -0
- package/dist/modules/v5/base.js +41 -0
- package/dist/modules/v5/base.js.map +1 -0
- package/dist/modules/v5/captcha.d.ts +27 -0
- package/dist/modules/v5/captcha.js +136 -0
- package/dist/modules/v5/captcha.js.map +1 -0
- package/dist/modules/v5/case.d.ts +10 -0
- package/dist/modules/v5/case.js +57 -0
- package/dist/modules/v5/case.js.map +1 -0
- package/dist/modules/v5/chart.d.ts +53 -0
- package/dist/modules/v5/chart.js +385 -0
- package/dist/modules/v5/chart.js.map +1 -0
- package/dist/modules/v5/chat.d.ts +21 -0
- package/dist/modules/v5/chat.js +107 -0
- package/dist/modules/v5/chat.js.map +1 -0
- package/dist/modules/v5/csv.d.ts +29 -0
- package/dist/modules/v5/csv.js +143 -0
- package/dist/modules/v5/csv.js.map +1 -0
- package/dist/modules/v5/diff.d.ts +20 -0
- package/dist/modules/v5/diff.js +81 -0
- package/dist/modules/v5/diff.js.map +1 -0
- package/dist/modules/v5/evaluate.d.ts +14 -0
- package/dist/modules/v5/evaluate.js +284 -0
- package/dist/modules/v5/evaluate.js.map +1 -0
- package/dist/modules/v5/jwt.d.ts +11 -0
- package/dist/modules/v5/jwt.js +42 -0
- package/dist/modules/v5/jwt.js.map +1 -0
- package/dist/modules/v5/matrix.d.ts +77 -0
- package/dist/modules/v5/matrix.js +239 -0
- package/dist/modules/v5/matrix.js.map +1 -0
- package/dist/modules/v5/otp.d.ts +30 -0
- package/dist/modules/v5/otp.js +117 -0
- package/dist/modules/v5/otp.js.map +1 -0
- package/dist/modules/v5/pow.d.ts +29 -0
- package/dist/modules/v5/pow.js +49 -0
- package/dist/modules/v5/pow.js.map +1 -0
- package/dist/modules/v5/read.d.ts +20 -0
- package/dist/modules/v5/read.js +59 -0
- package/dist/modules/v5/read.js.map +1 -0
- package/dist/modules/v5/semver.d.ts +33 -0
- package/dist/modules/v5/semver.js +99 -0
- package/dist/modules/v5/semver.js.map +1 -0
- package/dist/modules/v5/symmetric.d.ts +15 -0
- package/dist/modules/v5/symmetric.js +88 -0
- package/dist/modules/v5/symmetric.js.map +1 -0
- package/dist/modules/v5/text.d.ts +5 -0
- package/dist/modules/v5/text.js +12 -0
- package/dist/modules/v5/text.js.map +1 -0
- package/dist/modules/v5/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v5/tic_tac_toe.js +226 -0
- package/dist/modules/v5/tic_tac_toe.js.map +1 -0
- package/dist/modules/v5/url.d.ts +18 -0
- package/dist/modules/v5/url.js +51 -0
- package/dist/modules/v5/url.js.map +1 -0
- package/dist/modules/v5/uuid.d.ts +25 -0
- package/dist/modules/v5/uuid.js +40 -0
- package/dist/modules/v5/uuid.js.map +1 -0
- package/dist/modules/v5.d.ts +24 -0
- package/dist/modules/v5.js +25 -0
- package/dist/modules/v5.js.map +1 -0
- package/dist/modules/v6.d.ts +1 -0
- package/dist/modules/v6.js +2 -0
- package/dist/modules/v6.js.map +1 -0
- package/dist/routes/delete.d.ts +2 -0
- package/dist/routes/delete.js +73 -0
- package/dist/routes/delete.js.map +1 -0
- package/dist/routes/get.d.ts +2 -0
- package/dist/routes/get.js +857 -0
- package/dist/routes/get.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +95 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/patch.d.ts +2 -0
- package/dist/routes/patch.js +45 -0
- package/dist/routes/patch.js.map +1 -0
- package/dist/routes/post.d.ts +2 -0
- package/dist/routes/post.js +604 -0
- package/dist/routes/post.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.js +14 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/types/storage.d.ts +52 -0
- package/dist/types/storage.js +2 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/challenge.d.ts +40 -0
- package/dist/utils/challenge.js +75 -0
- package/dist/utils/challenge.js.map +1 -0
- package/dist/utils/colors.d.ts +44 -0
- package/dist/utils/colors.js +93 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/helpers.d.ts +55 -0
- package/dist/utils/helpers.js +82 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/response.d.ts +9 -0
- package/dist/utils/response.js +24 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +90 -0
- package/robots.txt +74 -0
- package/src/favicon.ico +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { MAX_CRON_ITERATIONS, MAX_CRON_RESULTS } from '../../constants.js';
|
|
2
|
+
import { VALID_TIMEZONES } from './time.js';
|
|
3
|
+
const FIELD_RANGES = [
|
|
4
|
+
{ min: 0, max: 59 }, // minute
|
|
5
|
+
{ min: 0, max: 23 }, // hour
|
|
6
|
+
{ min: 1, max: 31 }, // day of month
|
|
7
|
+
{ min: 1, max: 12 }, // month
|
|
8
|
+
{ min: 0, max: 7 }, // day of week (0 and 7 = Sunday)
|
|
9
|
+
];
|
|
10
|
+
const DOW_NAMES = {
|
|
11
|
+
Sunday: 0,
|
|
12
|
+
Monday: 1,
|
|
13
|
+
Tuesday: 2,
|
|
14
|
+
Wednesday: 3,
|
|
15
|
+
Thursday: 4,
|
|
16
|
+
Friday: 5,
|
|
17
|
+
Saturday: 6,
|
|
18
|
+
};
|
|
19
|
+
const DOW_DISPLAY = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
20
|
+
function parseField(field, range) {
|
|
21
|
+
const result = new Set();
|
|
22
|
+
for (const part of field.split(',')) {
|
|
23
|
+
if (part === '*') {
|
|
24
|
+
for (let i = range.min; i <= range.max; i++)
|
|
25
|
+
result.add(i);
|
|
26
|
+
}
|
|
27
|
+
else if (part.startsWith('*/')) {
|
|
28
|
+
const step = parseInt(part.slice(2), 10);
|
|
29
|
+
if (isNaN(step) || step < 1)
|
|
30
|
+
throw new Error(`Invalid step in "${part}"`);
|
|
31
|
+
for (let i = range.min; i <= range.max; i += step)
|
|
32
|
+
result.add(i);
|
|
33
|
+
}
|
|
34
|
+
else if (part.includes('-')) {
|
|
35
|
+
const [s, e] = part.split('-');
|
|
36
|
+
const start = parseInt(s, 10);
|
|
37
|
+
const end = parseInt(e, 10);
|
|
38
|
+
if (isNaN(start) || isNaN(end) || start < range.min || end > range.max || start > end) {
|
|
39
|
+
throw new Error(`Invalid range "${part}" (valid: ${range.min}-${range.max})`);
|
|
40
|
+
}
|
|
41
|
+
for (let i = start; i <= end; i++)
|
|
42
|
+
result.add(i);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const val = parseInt(part, 10);
|
|
46
|
+
if (isNaN(val) || val < range.min || val > range.max) {
|
|
47
|
+
throw new Error(`Invalid value "${part}" (valid: ${range.min}-${range.max})`);
|
|
48
|
+
}
|
|
49
|
+
result.add(val);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
function getComponents(date, formatter) {
|
|
55
|
+
const parts = Object.fromEntries(formatter.formatToParts(date).map((p) => [p.type, p.value]));
|
|
56
|
+
return {
|
|
57
|
+
minute: parseInt(parts.minute, 10),
|
|
58
|
+
hour: parseInt(parts.hour, 10) % 24,
|
|
59
|
+
dom: parseInt(parts.day, 10),
|
|
60
|
+
month: parseInt(parts.month, 10),
|
|
61
|
+
dow: DOW_NAMES[parts.weekday] ?? 0,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function pad(n) {
|
|
65
|
+
return String(n).padStart(2, '0');
|
|
66
|
+
}
|
|
67
|
+
function formatDow(field) {
|
|
68
|
+
if (field === '1-5')
|
|
69
|
+
return 'Monday through Friday';
|
|
70
|
+
if (field === '0' || field === '7')
|
|
71
|
+
return 'Sunday';
|
|
72
|
+
if (field === '6')
|
|
73
|
+
return 'Saturday';
|
|
74
|
+
const n = parseInt(field, 10);
|
|
75
|
+
if (!isNaN(n))
|
|
76
|
+
return DOW_DISPLAY[n % 7] ?? field;
|
|
77
|
+
return field;
|
|
78
|
+
}
|
|
79
|
+
function describe(fields) {
|
|
80
|
+
const [mF, hF, domF, monthF, dowF] = fields;
|
|
81
|
+
const isAll = (f) => f === '*';
|
|
82
|
+
const isFixed = (f) => /^\d+$/.test(f);
|
|
83
|
+
const isStep = (f) => /^\*\/\d+$/.test(f);
|
|
84
|
+
// Every minute
|
|
85
|
+
if (isAll(mF) && isAll(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
|
|
86
|
+
return 'Every minute';
|
|
87
|
+
}
|
|
88
|
+
// Every N minutes (whole day, every day)
|
|
89
|
+
if (isStep(mF) && isAll(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
|
|
90
|
+
const n = mF.slice(2);
|
|
91
|
+
return `Every ${n} minute${n === '1' ? '' : 's'}`;
|
|
92
|
+
}
|
|
93
|
+
// Every hour at minute 0
|
|
94
|
+
if (mF === '0' && isAll(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
|
|
95
|
+
return 'Every hour';
|
|
96
|
+
}
|
|
97
|
+
// Every N hours at minute 0
|
|
98
|
+
if (mF === '0' && isStep(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
|
|
99
|
+
const n = hF.slice(2);
|
|
100
|
+
return `Every ${n} hour${n === '1' ? '' : 's'}`;
|
|
101
|
+
}
|
|
102
|
+
// At specific time daily
|
|
103
|
+
if (isFixed(mF) && isFixed(hF) && isAll(domF) && isAll(monthF) && isAll(dowF)) {
|
|
104
|
+
return `At ${pad(parseInt(hF))}:${pad(parseInt(mF))} daily`;
|
|
105
|
+
}
|
|
106
|
+
// At specific time on specific weekday(s)
|
|
107
|
+
if (isFixed(mF) && isFixed(hF) && isAll(domF) && isAll(monthF) && !isAll(dowF)) {
|
|
108
|
+
return `At ${pad(parseInt(hF))}:${pad(parseInt(mF))}, ${formatDow(dowF)}`;
|
|
109
|
+
}
|
|
110
|
+
// At specific time on specific day of month
|
|
111
|
+
if (isFixed(mF) && isFixed(hF) && isFixed(domF) && isAll(monthF) && isAll(dowF)) {
|
|
112
|
+
return `At ${pad(parseInt(hF))}:${pad(parseInt(mF))}, on day ${domF} of the month`;
|
|
113
|
+
}
|
|
114
|
+
// Every N minutes, within hour range, optionally filtered by weekday
|
|
115
|
+
if (isStep(mF) && !isAll(hF) && isAll(domF) && isAll(monthF)) {
|
|
116
|
+
const n = mF.slice(2);
|
|
117
|
+
const parts = [`Every ${n} minute${n === '1' ? '' : 's'}`];
|
|
118
|
+
if (hF.includes('-')) {
|
|
119
|
+
const [h1, h2] = hF.split('-');
|
|
120
|
+
parts.push(`between ${pad(parseInt(h1))}:00 and ${pad(parseInt(h2))}:59`);
|
|
121
|
+
}
|
|
122
|
+
if (!isAll(dowF))
|
|
123
|
+
parts.push(formatDow(dowF));
|
|
124
|
+
return parts.join(', ');
|
|
125
|
+
}
|
|
126
|
+
return `At cron schedule: ${fields.join(' ')}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Parses a cron expression and returns the next scheduled execution dates.
|
|
130
|
+
*
|
|
131
|
+
* @param expr - Cron expression with 5 space-separated fields (minute hour dom month dow)
|
|
132
|
+
* @param count - Number of next executions to return (1–20, default 5)
|
|
133
|
+
* @param from - Starting date in ISO 8601 format (defaults to now)
|
|
134
|
+
* @param timezone - Timezone to evaluate the expression in (default "UTC")
|
|
135
|
+
* @returns Parsed expression with description and list of next execution timestamps
|
|
136
|
+
* @throws Error if the expression is invalid, count is out of range, or timezone is unsupported
|
|
137
|
+
*/
|
|
138
|
+
export default function cron(expr, count = 5, from, timezone = 'UTC') {
|
|
139
|
+
if (!expr)
|
|
140
|
+
throw new Error('Please provide a cron expression (?expr=* * * * *)');
|
|
141
|
+
if (!VALID_TIMEZONES.includes(timezone)) {
|
|
142
|
+
throw new Error(`Please provide a valid timezone. Options: ${VALID_TIMEZONES.join(', ')}`);
|
|
143
|
+
}
|
|
144
|
+
const fields = expr.trim().split(/\s+/);
|
|
145
|
+
if (fields.length !== 5) {
|
|
146
|
+
throw new Error('Cron expression must have exactly 5 fields (minute hour dom month dow)');
|
|
147
|
+
}
|
|
148
|
+
if (count < 1 || count > MAX_CRON_RESULTS) {
|
|
149
|
+
throw new Error(`Count must be between 1 and ${MAX_CRON_RESULTS}`);
|
|
150
|
+
}
|
|
151
|
+
const fromMs = from ? new Date(from).getTime() : Date.now();
|
|
152
|
+
if (from && isNaN(fromMs))
|
|
153
|
+
throw new Error('Please provide a valid from date (ISO 8601)');
|
|
154
|
+
const sets = fields.map((f, i) => parseField(f, FIELD_RANGES[i]));
|
|
155
|
+
const [minuteSet, hourSet, domSet, monthSet, dowSet] = sets;
|
|
156
|
+
// Normalize DOW: treat 7 as Sunday (0)
|
|
157
|
+
if (dowSet.has(7)) {
|
|
158
|
+
dowSet.add(0);
|
|
159
|
+
dowSet.delete(7);
|
|
160
|
+
}
|
|
161
|
+
const formatter = new Intl.DateTimeFormat('en-US', {
|
|
162
|
+
timeZone: timezone,
|
|
163
|
+
month: 'numeric',
|
|
164
|
+
day: 'numeric',
|
|
165
|
+
hour: 'numeric',
|
|
166
|
+
minute: 'numeric',
|
|
167
|
+
weekday: 'long',
|
|
168
|
+
hour12: false,
|
|
169
|
+
});
|
|
170
|
+
let currentMs = (Math.floor(fromMs / 60000) + 1) * 60000;
|
|
171
|
+
const next = [];
|
|
172
|
+
let iterations = 0;
|
|
173
|
+
while (next.length < count && iterations < MAX_CRON_ITERATIONS) {
|
|
174
|
+
const { minute, hour, dom, month, dow } = getComponents(new Date(currentMs), formatter);
|
|
175
|
+
if (!monthSet.has(month)) {
|
|
176
|
+
const d = new Date(currentMs);
|
|
177
|
+
d.setUTCMonth(d.getUTCMonth() + 1, 1);
|
|
178
|
+
d.setUTCHours(0, 0, 0, 0);
|
|
179
|
+
d.setTime(d.getTime() - 14 * 3600000);
|
|
180
|
+
while (getComponents(d, formatter).month === month) {
|
|
181
|
+
d.setTime(d.getTime() + 3600000);
|
|
182
|
+
}
|
|
183
|
+
currentMs = d.getTime();
|
|
184
|
+
}
|
|
185
|
+
else if (!domSet.has(dom) || !dowSet.has(dow)) {
|
|
186
|
+
currentMs += (24 * 60 - hour * 60 - minute) * 60000;
|
|
187
|
+
}
|
|
188
|
+
else if (!hourSet.has(hour)) {
|
|
189
|
+
currentMs += (60 - minute) * 60000;
|
|
190
|
+
}
|
|
191
|
+
else if (!minuteSet.has(minute)) {
|
|
192
|
+
currentMs += 60000;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
next.push(new Date(currentMs).toISOString());
|
|
196
|
+
currentMs += 60000;
|
|
197
|
+
}
|
|
198
|
+
iterations++;
|
|
199
|
+
}
|
|
200
|
+
return { expression: expr.trim(), description: describe(fields), next, timezone };
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/modules/v4/cron.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface DiceResult {
|
|
2
|
+
roll: string;
|
|
3
|
+
count: number;
|
|
4
|
+
sides: number;
|
|
5
|
+
modifier: number;
|
|
6
|
+
results: number[];
|
|
7
|
+
total: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Rolls dice using standard tabletop notation and returns individual results with a total.
|
|
11
|
+
*
|
|
12
|
+
* @param roll - Dice notation string (e.g. "2d6+3", "d20", "4d8-1")
|
|
13
|
+
* @returns Roll breakdown including count, sides, modifier, individual results, and total
|
|
14
|
+
* @throws Error if the notation is missing, invalid, or out of bounds
|
|
15
|
+
*/
|
|
16
|
+
export default function dice(roll: string): DiceResult;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rolls dice using standard tabletop notation and returns individual results with a total.
|
|
3
|
+
*
|
|
4
|
+
* @param roll - Dice notation string (e.g. "2d6+3", "d20", "4d8-1")
|
|
5
|
+
* @returns Roll breakdown including count, sides, modifier, individual results, and total
|
|
6
|
+
* @throws Error if the notation is missing, invalid, or out of bounds
|
|
7
|
+
*/
|
|
8
|
+
export default function dice(roll) {
|
|
9
|
+
if (!roll)
|
|
10
|
+
throw new Error('A roll notation is required (e.g. 2d6+3)');
|
|
11
|
+
if (typeof roll !== 'string')
|
|
12
|
+
throw new Error('Roll must be a string');
|
|
13
|
+
const match = /^(\d*)d(\d+)([+-]\d+)?$/i.exec(roll.trim().replace(/\s+/g, '+'));
|
|
14
|
+
if (!match)
|
|
15
|
+
throw new Error('Invalid notation. Use NdX or NdX+M (e.g. 2d6+3)');
|
|
16
|
+
const count = match[1] ? parseInt(match[1], 10) : 1;
|
|
17
|
+
const sides = parseInt(match[2], 10);
|
|
18
|
+
const modifier = match[3] ? parseInt(match[3], 10) : 0;
|
|
19
|
+
if (count < 1 || count > 100)
|
|
20
|
+
throw new Error('Number of dice must be between 1 and 100');
|
|
21
|
+
if (sides < 2 || sides > 1000)
|
|
22
|
+
throw new Error('Number of sides must be between 2 and 1000');
|
|
23
|
+
const results = [];
|
|
24
|
+
for (let i = 0; i < count; i++) {
|
|
25
|
+
results.push(1 + Math.floor(Math.random() * sides));
|
|
26
|
+
}
|
|
27
|
+
const total = results.reduce((a, b) => a + b, 0) + modifier;
|
|
28
|
+
return {
|
|
29
|
+
roll: `${count}d${sides}${modifier ? (modifier > 0 ? `+${modifier}` : modifier) : ''}`,
|
|
30
|
+
count,
|
|
31
|
+
sides,
|
|
32
|
+
modifier,
|
|
33
|
+
results,
|
|
34
|
+
total,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=dice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dice.js","sourceRoot":"","sources":["../../../src/modules/v4/dice.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,IAAY;IACrC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAE/E,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1F,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAE7F,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;IAE5D,OAAO;QACH,IAAI,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;QACtF,KAAK;QACL,KAAK;QACL,QAAQ;QACR,OAAO;QACP,KAAK;KACR,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { genIP, random } from '../../utils/helpers.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a randomized fictional domain profile with metadata.
|
|
4
|
+
*
|
|
5
|
+
* @returns Object containing domain name, IP addresses, DNS info, SEO score, and other domain attributes
|
|
6
|
+
*/
|
|
7
|
+
export default function domain() {
|
|
8
|
+
const subdomains = [
|
|
9
|
+
'fr.',
|
|
10
|
+
'en.',
|
|
11
|
+
'docs.',
|
|
12
|
+
'api.',
|
|
13
|
+
'projects.',
|
|
14
|
+
'app.',
|
|
15
|
+
'web.',
|
|
16
|
+
'info.',
|
|
17
|
+
'dev.',
|
|
18
|
+
'shop.',
|
|
19
|
+
'blog.',
|
|
20
|
+
'support.',
|
|
21
|
+
'mail.',
|
|
22
|
+
'forum.',
|
|
23
|
+
];
|
|
24
|
+
const domains = [
|
|
25
|
+
'example',
|
|
26
|
+
'site',
|
|
27
|
+
'test',
|
|
28
|
+
'demo',
|
|
29
|
+
'page',
|
|
30
|
+
'store',
|
|
31
|
+
'portfolio',
|
|
32
|
+
'platform',
|
|
33
|
+
'hub',
|
|
34
|
+
'network',
|
|
35
|
+
'service',
|
|
36
|
+
'cloud',
|
|
37
|
+
'solutions',
|
|
38
|
+
'company',
|
|
39
|
+
];
|
|
40
|
+
const tlds = [
|
|
41
|
+
'.com',
|
|
42
|
+
'.fr',
|
|
43
|
+
'.eu',
|
|
44
|
+
'.dev',
|
|
45
|
+
'.net',
|
|
46
|
+
'.org',
|
|
47
|
+
'.io',
|
|
48
|
+
'.tech',
|
|
49
|
+
'.biz',
|
|
50
|
+
'.info',
|
|
51
|
+
'.co',
|
|
52
|
+
'.app',
|
|
53
|
+
'.store',
|
|
54
|
+
'.online',
|
|
55
|
+
'.shop',
|
|
56
|
+
'.tv',
|
|
57
|
+
];
|
|
58
|
+
const domainName = `${random(domains)}${random(tlds)}`;
|
|
59
|
+
const fulldomain = `${random(subdomains)}${domainName}`;
|
|
60
|
+
const ips = Array.from({ length: Math.floor(Math.random() * 3) + 1 }, genIP);
|
|
61
|
+
const dns = Array.from({ length: Math.floor(Math.random() * 5) + 1 }, genIP);
|
|
62
|
+
return {
|
|
63
|
+
domain: domainName,
|
|
64
|
+
full_domain: fulldomain,
|
|
65
|
+
ip_address: ips,
|
|
66
|
+
ssl_certified: Math.random() > 0.5,
|
|
67
|
+
hosting_provider: random(['AWS', 'Bluehost', 'DigitalOcean', 'GitHub', 'HostGator', 'Render', 'SiteGround']),
|
|
68
|
+
dns_servers: dns,
|
|
69
|
+
dns_provider: random(['AWS Route 53', 'Cloudflare', 'GoDaddy', 'Google DNS', 'Namecheap']),
|
|
70
|
+
traffic: `${Math.floor(Math.random() * 10000)} visits/day`,
|
|
71
|
+
seo_score: Math.floor(Math.random() * 100),
|
|
72
|
+
page_rank: Math.floor(Math.random() * 10),
|
|
73
|
+
country: random(['Australia', 'Canada', 'France', 'Germany', 'India', 'Japan', 'UK', 'USA']),
|
|
74
|
+
website_type: random(['Blog', 'Community', 'Corporate', 'Educational', 'E-commerce', 'Personal', 'Portfolio']),
|
|
75
|
+
random_name: domainName.split('.')[0],
|
|
76
|
+
random_subdomain: fulldomain.split('.')[0],
|
|
77
|
+
random_tld: domainName.split('.').pop(),
|
|
78
|
+
backlinks_count: Math.floor(Math.random() * 1000),
|
|
79
|
+
creation_date: new Date(Date.now() - Math.floor(Math.random() * 10000000000)).toISOString(),
|
|
80
|
+
expiration_date: new Date(Date.now() + Math.floor(Math.random() * 10000000000)).toISOString(),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../src/modules/v4/domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encodes a UTF-8 string to Base64.
|
|
3
|
+
*
|
|
4
|
+
* @param value - The string to encode
|
|
5
|
+
* @returns Base64-encoded string
|
|
6
|
+
* @throws Error if value is missing, not a string, or too long
|
|
7
|
+
*/
|
|
8
|
+
export declare function base64encode(value: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Decodes a Base64 string to UTF-8.
|
|
11
|
+
*
|
|
12
|
+
* @param value - The Base64 string to decode
|
|
13
|
+
* @returns Decoded UTF-8 string
|
|
14
|
+
* @throws Error if value is missing, not valid Base64, or too long
|
|
15
|
+
*/
|
|
16
|
+
export declare function base64decode(value: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Percent-encodes a string for safe use in a URL.
|
|
19
|
+
*
|
|
20
|
+
* @param value - The string to encode
|
|
21
|
+
* @returns URL-encoded string
|
|
22
|
+
* @throws Error if value is missing, not a string, or too long
|
|
23
|
+
*/
|
|
24
|
+
export declare function urlencode(value: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Decodes a percent-encoded URL string.
|
|
27
|
+
*
|
|
28
|
+
* @param value - The URL-encoded string to decode
|
|
29
|
+
* @returns Decoded string
|
|
30
|
+
* @throws Error if value is missing, not a valid URL-encoded string, or too long
|
|
31
|
+
*/
|
|
32
|
+
export declare function urldecode(value: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Converts a plain text string to Morse code.
|
|
35
|
+
*
|
|
36
|
+
* @param value - The text to encode in Morse code
|
|
37
|
+
* @returns Morse code string where letters are separated by spaces and words by " / "
|
|
38
|
+
* @throws Error if value contains unsupported characters or is too long
|
|
39
|
+
*/
|
|
40
|
+
export declare function morse(value: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Converts a Morse code string back to plain text.
|
|
43
|
+
*
|
|
44
|
+
* @param value - Morse code string (letters separated by spaces, words by " / ")
|
|
45
|
+
* @returns Decoded plain text string
|
|
46
|
+
* @throws Error if the Morse code contains an unrecognized sequence or is too long
|
|
47
|
+
*/
|
|
48
|
+
export declare function unmorse(value: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Applies the ROT13 substitution cipher to a string.
|
|
51
|
+
*
|
|
52
|
+
* @param value - The string to encode
|
|
53
|
+
* @returns ROT13-encoded string (applying it twice restores the original)
|
|
54
|
+
* @throws Error if value is missing, not a string, or too long
|
|
55
|
+
*/
|
|
56
|
+
export declare function rot13(value: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Applies the Caesar cipher by shifting alphabetic characters by a given amount.
|
|
59
|
+
*
|
|
60
|
+
* @param value - The string to encode
|
|
61
|
+
* @param shift - Number of positions to shift (can be negative for left shift)
|
|
62
|
+
* @returns Caesar-shifted string
|
|
63
|
+
* @throws Error if value is missing or shift is not a number
|
|
64
|
+
*/
|
|
65
|
+
export declare function caesar(value: string, shift: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Converts a string to its binary representation, one byte per character.
|
|
68
|
+
*
|
|
69
|
+
* @param value - The string to convert
|
|
70
|
+
* @returns Space-separated 8-bit binary groups (one per character)
|
|
71
|
+
* @throws Error if value is missing, not a string, or too long
|
|
72
|
+
*/
|
|
73
|
+
export declare function binary(value: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* Converts a binary string back to plain text.
|
|
76
|
+
*
|
|
77
|
+
* @param value - Space-separated 8-bit binary groups
|
|
78
|
+
* @returns Decoded string
|
|
79
|
+
* @throws Error if value contains non-binary characters or groups are not 8 bits wide
|
|
80
|
+
*/
|
|
81
|
+
export declare function unbinary(value: string): string;
|