@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.
Files changed (246) hide show
  1. package/.prettierignore +5 -0
  2. package/LICENSE +28 -0
  3. package/README.md +277 -0
  4. package/dist/app.d.ts +2 -0
  5. package/dist/app.js +55 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/config/env.d.ts +22 -0
  8. package/dist/config/env.js +36 -0
  9. package/dist/config/env.js.map +1 -0
  10. package/dist/config/plans.d.ts +26 -0
  11. package/dist/config/plans.js +44 -0
  12. package/dist/config/plans.js.map +1 -0
  13. package/dist/config/versions.d.ts +18 -0
  14. package/dist/config/versions.js +248 -0
  15. package/dist/config/versions.js.map +1 -0
  16. package/dist/constants.d.ts +48 -0
  17. package/dist/constants.js +75 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/middleware/cors.d.ts +2 -0
  20. package/dist/middleware/cors.js +31 -0
  21. package/dist/middleware/cors.js.map +1 -0
  22. package/dist/middleware/error.d.ts +4 -0
  23. package/dist/middleware/error.js +8 -0
  24. package/dist/middleware/error.js.map +1 -0
  25. package/dist/middleware/json.d.ts +2 -0
  26. package/dist/middleware/json.js +8 -0
  27. package/dist/middleware/json.js.map +1 -0
  28. package/dist/middleware/logger.d.ts +26 -0
  29. package/dist/middleware/logger.js +65 -0
  30. package/dist/middleware/logger.js.map +1 -0
  31. package/dist/middleware/ratelimit.d.ts +2 -0
  32. package/dist/middleware/ratelimit.js +83 -0
  33. package/dist/middleware/ratelimit.js.map +1 -0
  34. package/dist/middleware/version.d.ts +3 -0
  35. package/dist/middleware/version.js +30 -0
  36. package/dist/middleware/version.js.map +1 -0
  37. package/dist/modules/v4/address.d.ts +20 -0
  38. package/dist/modules/v4/address.js +381 -0
  39. package/dist/modules/v4/address.js.map +1 -0
  40. package/dist/modules/v4/agent.d.ts +30 -0
  41. package/dist/modules/v4/agent.js +92 -0
  42. package/dist/modules/v4/agent.js.map +1 -0
  43. package/dist/modules/v4/algorithms.d.ts +90 -0
  44. package/dist/modules/v4/algorithms.js +279 -0
  45. package/dist/modules/v4/algorithms.js.map +1 -0
  46. package/dist/modules/v4/avatar.d.ts +23 -0
  47. package/dist/modules/v4/avatar.js +136 -0
  48. package/dist/modules/v4/avatar.js.map +1 -0
  49. package/dist/modules/v4/barcode.d.ts +27 -0
  50. package/dist/modules/v4/barcode.js +440 -0
  51. package/dist/modules/v4/barcode.js.map +1 -0
  52. package/dist/modules/v4/captcha.d.ts +22 -0
  53. package/dist/modules/v4/captcha.js +79 -0
  54. package/dist/modules/v4/captcha.js.map +1 -0
  55. package/dist/modules/v4/chat.d.ts +21 -0
  56. package/dist/modules/v4/chat.js +100 -0
  57. package/dist/modules/v4/chat.js.map +1 -0
  58. package/dist/modules/v4/color.d.ts +16 -0
  59. package/dist/modules/v4/color.js +59 -0
  60. package/dist/modules/v4/color.js.map +1 -0
  61. package/dist/modules/v4/convert.d.ts +15 -0
  62. package/dist/modules/v4/convert.js +116 -0
  63. package/dist/modules/v4/convert.js.map +1 -0
  64. package/dist/modules/v4/credit.d.ts +22 -0
  65. package/dist/modules/v4/credit.js +104 -0
  66. package/dist/modules/v4/credit.js.map +1 -0
  67. package/dist/modules/v4/cron.d.ts +17 -0
  68. package/dist/modules/v4/cron.js +202 -0
  69. package/dist/modules/v4/cron.js.map +1 -0
  70. package/dist/modules/v4/dice.d.ts +16 -0
  71. package/dist/modules/v4/dice.js +37 -0
  72. package/dist/modules/v4/dice.js.map +1 -0
  73. package/dist/modules/v4/domain.d.ts +6 -0
  74. package/dist/modules/v4/domain.js +83 -0
  75. package/dist/modules/v4/domain.js.map +1 -0
  76. package/dist/modules/v4/encode.d.ts +81 -0
  77. package/dist/modules/v4/encode.js +236 -0
  78. package/dist/modules/v4/encode.js.map +1 -0
  79. package/dist/modules/v4/geo.d.ts +30 -0
  80. package/dist/modules/v4/geo.js +51 -0
  81. package/dist/modules/v4/geo.js.map +1 -0
  82. package/dist/modules/v4/hash.d.ts +15 -0
  83. package/dist/modules/v4/hash.js +25 -0
  84. package/dist/modules/v4/hash.js.map +1 -0
  85. package/dist/modules/v4/hyperplanning.d.ts +19 -0
  86. package/dist/modules/v4/hyperplanning.js +80 -0
  87. package/dist/modules/v4/hyperplanning.js.map +1 -0
  88. package/dist/modules/v4/ip.d.ts +19 -0
  89. package/dist/modules/v4/ip.js +132 -0
  90. package/dist/modules/v4/ip.js.map +1 -0
  91. package/dist/modules/v4/levenshtein.d.ts +13 -0
  92. package/dist/modules/v4/levenshtein.js +37 -0
  93. package/dist/modules/v4/levenshtein.js.map +1 -0
  94. package/dist/modules/v4/palette.d.ts +19 -0
  95. package/dist/modules/v4/palette.js +56 -0
  96. package/dist/modules/v4/palette.js.map +1 -0
  97. package/dist/modules/v4/password.d.ts +25 -0
  98. package/dist/modules/v4/password.js +343 -0
  99. package/dist/modules/v4/password.js.map +1 -0
  100. package/dist/modules/v4/personal.d.ts +6 -0
  101. package/dist/modules/v4/personal.js +121 -0
  102. package/dist/modules/v4/personal.js.map +1 -0
  103. package/dist/modules/v4/placeholder.d.ts +30 -0
  104. package/dist/modules/v4/placeholder.js +160 -0
  105. package/dist/modules/v4/placeholder.js.map +1 -0
  106. package/dist/modules/v4/qrcode.d.ts +25 -0
  107. package/dist/modules/v4/qrcode.js +92 -0
  108. package/dist/modules/v4/qrcode.js.map +1 -0
  109. package/dist/modules/v4/regex.d.ts +23 -0
  110. package/dist/modules/v4/regex.js +48 -0
  111. package/dist/modules/v4/regex.js.map +1 -0
  112. package/dist/modules/v4/statistics.d.ts +20 -0
  113. package/dist/modules/v4/statistics.js +48 -0
  114. package/dist/modules/v4/statistics.js.map +1 -0
  115. package/dist/modules/v4/text.d.ts +43 -0
  116. package/dist/modules/v4/text.js +323 -0
  117. package/dist/modules/v4/text.js.map +1 -0
  118. package/dist/modules/v4/tic_tac_toe.d.ts +19 -0
  119. package/dist/modules/v4/tic_tac_toe.js +214 -0
  120. package/dist/modules/v4/tic_tac_toe.js.map +1 -0
  121. package/dist/modules/v4/time.d.ts +15 -0
  122. package/dist/modules/v4/time.js +124 -0
  123. package/dist/modules/v4/time.js.map +1 -0
  124. package/dist/modules/v4/token.d.ts +9 -0
  125. package/dist/modules/v4/token.js +45 -0
  126. package/dist/modules/v4/token.js.map +1 -0
  127. package/dist/modules/v4/username.d.ts +6 -0
  128. package/dist/modules/v4/username.js +92 -0
  129. package/dist/modules/v4/username.js.map +1 -0
  130. package/dist/modules/v4/validate.d.ts +34 -0
  131. package/dist/modules/v4/validate.js +75 -0
  132. package/dist/modules/v4/validate.js.map +1 -0
  133. package/dist/modules/v4.d.ts +32 -0
  134. package/dist/modules/v4.js +33 -0
  135. package/dist/modules/v4.js.map +1 -0
  136. package/dist/modules/v5/address.d.ts +5 -0
  137. package/dist/modules/v5/address.js +20 -0
  138. package/dist/modules/v5/address.js.map +1 -0
  139. package/dist/modules/v5/algorithms.d.ts +9 -0
  140. package/dist/modules/v5/algorithms.js +39 -0
  141. package/dist/modules/v5/algorithms.js.map +1 -0
  142. package/dist/modules/v5/asymmetric.d.ts +26 -0
  143. package/dist/modules/v5/asymmetric.js +74 -0
  144. package/dist/modules/v5/asymmetric.js.map +1 -0
  145. package/dist/modules/v5/barcode.d.ts +27 -0
  146. package/dist/modules/v5/barcode.js +424 -0
  147. package/dist/modules/v5/barcode.js.map +1 -0
  148. package/dist/modules/v5/base.d.ts +16 -0
  149. package/dist/modules/v5/base.js +41 -0
  150. package/dist/modules/v5/base.js.map +1 -0
  151. package/dist/modules/v5/captcha.d.ts +27 -0
  152. package/dist/modules/v5/captcha.js +136 -0
  153. package/dist/modules/v5/captcha.js.map +1 -0
  154. package/dist/modules/v5/case.d.ts +10 -0
  155. package/dist/modules/v5/case.js +57 -0
  156. package/dist/modules/v5/case.js.map +1 -0
  157. package/dist/modules/v5/chart.d.ts +53 -0
  158. package/dist/modules/v5/chart.js +385 -0
  159. package/dist/modules/v5/chart.js.map +1 -0
  160. package/dist/modules/v5/chat.d.ts +21 -0
  161. package/dist/modules/v5/chat.js +107 -0
  162. package/dist/modules/v5/chat.js.map +1 -0
  163. package/dist/modules/v5/csv.d.ts +29 -0
  164. package/dist/modules/v5/csv.js +143 -0
  165. package/dist/modules/v5/csv.js.map +1 -0
  166. package/dist/modules/v5/diff.d.ts +20 -0
  167. package/dist/modules/v5/diff.js +81 -0
  168. package/dist/modules/v5/diff.js.map +1 -0
  169. package/dist/modules/v5/evaluate.d.ts +14 -0
  170. package/dist/modules/v5/evaluate.js +284 -0
  171. package/dist/modules/v5/evaluate.js.map +1 -0
  172. package/dist/modules/v5/jwt.d.ts +11 -0
  173. package/dist/modules/v5/jwt.js +42 -0
  174. package/dist/modules/v5/jwt.js.map +1 -0
  175. package/dist/modules/v5/matrix.d.ts +77 -0
  176. package/dist/modules/v5/matrix.js +239 -0
  177. package/dist/modules/v5/matrix.js.map +1 -0
  178. package/dist/modules/v5/otp.d.ts +30 -0
  179. package/dist/modules/v5/otp.js +117 -0
  180. package/dist/modules/v5/otp.js.map +1 -0
  181. package/dist/modules/v5/pow.d.ts +29 -0
  182. package/dist/modules/v5/pow.js +49 -0
  183. package/dist/modules/v5/pow.js.map +1 -0
  184. package/dist/modules/v5/read.d.ts +20 -0
  185. package/dist/modules/v5/read.js +59 -0
  186. package/dist/modules/v5/read.js.map +1 -0
  187. package/dist/modules/v5/semver.d.ts +33 -0
  188. package/dist/modules/v5/semver.js +99 -0
  189. package/dist/modules/v5/semver.js.map +1 -0
  190. package/dist/modules/v5/symmetric.d.ts +15 -0
  191. package/dist/modules/v5/symmetric.js +88 -0
  192. package/dist/modules/v5/symmetric.js.map +1 -0
  193. package/dist/modules/v5/text.d.ts +5 -0
  194. package/dist/modules/v5/text.js +12 -0
  195. package/dist/modules/v5/text.js.map +1 -0
  196. package/dist/modules/v5/tic_tac_toe.d.ts +19 -0
  197. package/dist/modules/v5/tic_tac_toe.js +226 -0
  198. package/dist/modules/v5/tic_tac_toe.js.map +1 -0
  199. package/dist/modules/v5/url.d.ts +18 -0
  200. package/dist/modules/v5/url.js +51 -0
  201. package/dist/modules/v5/url.js.map +1 -0
  202. package/dist/modules/v5/uuid.d.ts +25 -0
  203. package/dist/modules/v5/uuid.js +40 -0
  204. package/dist/modules/v5/uuid.js.map +1 -0
  205. package/dist/modules/v5.d.ts +24 -0
  206. package/dist/modules/v5.js +25 -0
  207. package/dist/modules/v5.js.map +1 -0
  208. package/dist/modules/v6.d.ts +1 -0
  209. package/dist/modules/v6.js +2 -0
  210. package/dist/modules/v6.js.map +1 -0
  211. package/dist/routes/delete.d.ts +2 -0
  212. package/dist/routes/delete.js +73 -0
  213. package/dist/routes/delete.js.map +1 -0
  214. package/dist/routes/get.d.ts +2 -0
  215. package/dist/routes/get.js +857 -0
  216. package/dist/routes/get.js.map +1 -0
  217. package/dist/routes/index.d.ts +2 -0
  218. package/dist/routes/index.js +95 -0
  219. package/dist/routes/index.js.map +1 -0
  220. package/dist/routes/patch.d.ts +2 -0
  221. package/dist/routes/patch.js +45 -0
  222. package/dist/routes/patch.js.map +1 -0
  223. package/dist/routes/post.d.ts +2 -0
  224. package/dist/routes/post.js +604 -0
  225. package/dist/routes/post.js.map +1 -0
  226. package/dist/storage/index.d.ts +5 -0
  227. package/dist/storage/index.js +14 -0
  228. package/dist/storage/index.js.map +1 -0
  229. package/dist/types/storage.d.ts +52 -0
  230. package/dist/types/storage.js +2 -0
  231. package/dist/types/storage.js.map +1 -0
  232. package/dist/utils/challenge.d.ts +40 -0
  233. package/dist/utils/challenge.js +75 -0
  234. package/dist/utils/challenge.js.map +1 -0
  235. package/dist/utils/colors.d.ts +44 -0
  236. package/dist/utils/colors.js +93 -0
  237. package/dist/utils/colors.js.map +1 -0
  238. package/dist/utils/helpers.d.ts +55 -0
  239. package/dist/utils/helpers.js +82 -0
  240. package/dist/utils/helpers.js.map +1 -0
  241. package/dist/utils/response.d.ts +9 -0
  242. package/dist/utils/response.js +24 -0
  243. package/dist/utils/response.js.map +1 -0
  244. package/package.json +90 -0
  245. package/robots.txt +74 -0
  246. package/src/favicon.ico +0 -0
@@ -0,0 +1,100 @@
1
+ import { SESSION_TTL } from '../../constants.js';
2
+ import { checkRateLimit } from '../../utils/helpers.js';
3
+ /**
4
+ * Handles real-time chat actions including sending, fetching, and clearing messages.
5
+ *
6
+ * @param action - The action to perform: "message", "private", "fetch", or "clear"
7
+ * @param params - Chat parameters including username, message, session, and shared storage
8
+ * @returns The result of the action — a message list, a sent confirmation, or a status message
9
+ * @throws Error if a required parameter is missing or the action is invalid
10
+ */
11
+ export default function chat(action, params) {
12
+ const storage = params.storage;
13
+ storage.messages ??= [];
14
+ storage.privateChats ??= {};
15
+ storage.sessions ??= {};
16
+ storage.rateLimits ??= {};
17
+ const { messages, privateChats, sessions, rateLimits } = storage;
18
+ if (!params.username)
19
+ throw new Error('Please provide a username');
20
+ const u = params.username.toLowerCase();
21
+ const now = Date.now();
22
+ checkRateLimit(rateLimits, u, now);
23
+ if (action === 'message') {
24
+ return sendMessage(params, messages, privateChats, sessions, u, now);
25
+ }
26
+ else if (action === 'private') {
27
+ return getPrivateChat(params, privateChats);
28
+ }
29
+ else if (action === 'fetch') {
30
+ return fetchMessages(messages);
31
+ }
32
+ else if (action === 'clear') {
33
+ return clearPrivateChat(params, privateChats, sessions, u);
34
+ }
35
+ else {
36
+ throw new Error('Invalid action. Use "message", "private", "fetch", or "clear"');
37
+ }
38
+ }
39
+ function sendMessage(params, messages, privateChats, sessions, u, now) {
40
+ const { message, session, token } = params;
41
+ if (!message)
42
+ throw new Error('Please provide a message');
43
+ if (!session)
44
+ throw new Error('Please provide a valid session ID');
45
+ if (sessions[u] && sessions[u].user !== session) {
46
+ throw new Error('Session ID mismatch');
47
+ }
48
+ const msg = {
49
+ username: params.username,
50
+ message,
51
+ timestamp: params.timestamp || new Date().toISOString(),
52
+ };
53
+ if (token) {
54
+ privateChats[token] = privateChats[token] || [];
55
+ privateChats[token].push(msg);
56
+ setTimeout(() => {
57
+ delete privateChats[token];
58
+ }, SESSION_TTL).unref();
59
+ }
60
+ else {
61
+ messages.push(msg);
62
+ setTimeout(() => messages.splice(messages.indexOf(msg), 1), SESSION_TTL).unref();
63
+ }
64
+ sessions[u] = sessions[u] || { user: session, last: now };
65
+ sessions[u].last = now;
66
+ setTimeout(() => {
67
+ if (sessions[u] && now - sessions[u].last >= SESSION_TTL)
68
+ delete sessions[u];
69
+ }, SESSION_TTL).unref();
70
+ return { message: 'Message sent successfully' };
71
+ }
72
+ function getPrivateChat(params, privateChats) {
73
+ const { token } = params;
74
+ if (!token)
75
+ throw new Error('Please provide a valid token');
76
+ if (privateChats[token])
77
+ return privateChats[token];
78
+ throw new Error('Invalid or expired token.');
79
+ }
80
+ function fetchMessages(messages) {
81
+ if (messages.length > 0)
82
+ return messages;
83
+ throw new Error('No messages stored.');
84
+ }
85
+ function clearPrivateChat(params, privateChats, sessions, u) {
86
+ const { token, session } = params;
87
+ if (!token)
88
+ throw new Error('Please provide a valid token');
89
+ if (!session)
90
+ throw new Error('Please provide a valid session ID');
91
+ if (sessions[u] && sessions[u].user !== session) {
92
+ throw new Error('Session ID mismatch');
93
+ }
94
+ if (!privateChats[token])
95
+ throw new Error('Invalid or expired token.');
96
+ delete privateChats[token];
97
+ delete sessions[u];
98
+ return { message: 'Private chat cleared successfully' };
99
+ }
100
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/modules/v4/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface ColorResult {
2
+ hex: string;
3
+ rgb: string;
4
+ hsl: string;
5
+ hsv: string;
6
+ hwb: string;
7
+ cmyk: string;
8
+ }
9
+ /**
10
+ * Converts a hex color to all major color space representations, or generates a random color.
11
+ *
12
+ * @param hex - Optional hex color string (e.g. "#ff5733"); generates a random color if omitted
13
+ * @returns Color in hex, RGB, HSL, HSV, HWB, and CMYK formats
14
+ * @throws Error if the hex string is invalid
15
+ */
16
+ export default function color(hex?: string): ColorResult;
@@ -0,0 +1,59 @@
1
+ import { hexToRgb, rgbToHex, rgbToHsl } from '../../utils/colors.js';
2
+ function rgbToHsv(r, g, b) {
3
+ const max = Math.max(r, g, b), min = Math.min(r, g, b), v = max / 255, s = max ? (max - min) / max : 0;
4
+ if (max === min)
5
+ return [0, s * 100, v * 100];
6
+ let h = 0;
7
+ const d = max - min;
8
+ if (max === r)
9
+ h = (g - b) / d + (g < b ? 6 : 0);
10
+ else if (max === g)
11
+ h = (b - r) / d + 2;
12
+ else
13
+ h = (r - g) / d + 4;
14
+ return [(h * 60) % 360, s * 100, v * 100];
15
+ }
16
+ function rgbToHwb(r, g, b) {
17
+ const [h] = rgbToHsv(r, g, b);
18
+ const whiteness = Math.min(r, g, b) / 255;
19
+ const blackness = 1 - Math.max(r, g, b) / 255;
20
+ return [h, whiteness * 100, blackness * 100];
21
+ }
22
+ function rgbToCmyk(r, g, b) {
23
+ const k = 1 - Math.max(r, g, b) / 255;
24
+ const c = (1 - r / 255 - k) / (1 - k) || 0;
25
+ const m = (1 - g / 255 - k) / (1 - k) || 0;
26
+ const y = (1 - b / 255 - k) / (1 - k) || 0;
27
+ return [c * 100, m * 100, y * 100, k * 100];
28
+ }
29
+ /**
30
+ * Converts a hex color to all major color space representations, or generates a random color.
31
+ *
32
+ * @param hex - Optional hex color string (e.g. "#ff5733"); generates a random color if omitted
33
+ * @returns Color in hex, RGB, HSL, HSV, HWB, and CMYK formats
34
+ * @throws Error if the hex string is invalid
35
+ */
36
+ export default function color(hex) {
37
+ let r, g, b;
38
+ if (hex) {
39
+ [r, g, b] = hexToRgb(hex);
40
+ }
41
+ else {
42
+ r = Math.floor(Math.random() * 256);
43
+ g = Math.floor(Math.random() * 256);
44
+ b = Math.floor(Math.random() * 256);
45
+ }
46
+ const [h, s, l] = rgbToHsl(r, g, b);
47
+ const hsv = rgbToHsv(r, g, b);
48
+ const hwb = rgbToHwb(r, g, b);
49
+ const cmyk = rgbToCmyk(r, g, b);
50
+ return {
51
+ hex: rgbToHex(r, g, b),
52
+ rgb: `rgb(${r}, ${g}, ${b})`,
53
+ hsl: `hsl(${h.toFixed(1)}, ${(s * 100).toFixed(1)}%, ${(l * 100).toFixed(1)}%)`,
54
+ hsv: `hsv(${hsv[0].toFixed(1)}, ${hsv[1].toFixed(1)}%, ${hsv[2].toFixed(1)}%)`,
55
+ hwb: `hwb(${hwb[0].toFixed(1)}, ${hwb[1].toFixed(1)}%, ${hwb[2].toFixed(1)}%)`,
56
+ cmyk: `cmyk(${cmyk.map((x) => x.toFixed(1)).join('%, ')}%)`,
57
+ };
58
+ }
59
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/modules/v4/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Converts a numeric value from one unit to another.
3
+ *
4
+ * @param value - The numeric value to convert
5
+ * @param from - The source unit (e.g. "km", "celsius", "kg")
6
+ * @param to - The target unit (e.g. "mi", "fahrenheit", "lb")
7
+ * @returns Object with source unit, target unit, original value, and converted result
8
+ * @throws Error if the conversion pair is unsupported, the value is NaN, or the temperature is below absolute zero
9
+ */
10
+ export default function convert(value: number, from: string, to: string): {
11
+ from: string;
12
+ to: string;
13
+ value: number;
14
+ result: number;
15
+ };
@@ -0,0 +1,116 @@
1
+ const TEMPERATURE_UNITS = new Set(['celsius', 'fahrenheit', 'kelvin']);
2
+ const ABSOLUTE_ZERO = { celsius: -273.15, fahrenheit: -459.67, kelvin: 0 };
3
+ const conversions = {
4
+ // Temperature
5
+ celsius: {
6
+ fahrenheit: (v) => (v * 9) / 5 + 32,
7
+ kelvin: (v) => v + 273.15,
8
+ },
9
+ fahrenheit: {
10
+ celsius: (v) => ((v - 32) * 5) / 9,
11
+ kelvin: (v) => ((v - 32) * 5) / 9 + 273.15,
12
+ },
13
+ kelvin: {
14
+ celsius: (v) => v - 273.15,
15
+ fahrenheit: (v) => ((v - 273.15) * 9) / 5 + 32,
16
+ },
17
+ // Length
18
+ km: {
19
+ mi: (v) => v * 0.621371,
20
+ m: (v) => v * 1000,
21
+ ft: (v) => v * 3280.84,
22
+ cm: (v) => v * 100000,
23
+ in: (v) => v * 39370.1,
24
+ yd: (v) => v * 1093.61,
25
+ },
26
+ mi: {
27
+ km: (v) => v * 1.60934,
28
+ m: (v) => v * 1609.34,
29
+ ft: (v) => v * 5280,
30
+ cm: (v) => v * 160934,
31
+ in: (v) => v * 63360,
32
+ yd: (v) => v * 1760,
33
+ },
34
+ m: {
35
+ km: (v) => v / 1000,
36
+ mi: (v) => v * 0.000621371,
37
+ ft: (v) => v * 3.28084,
38
+ cm: (v) => v * 100,
39
+ in: (v) => v * 39.3701,
40
+ yd: (v) => v * 1.09361,
41
+ },
42
+ ft: {
43
+ km: (v) => v * 0.0003048,
44
+ mi: (v) => v / 5280,
45
+ m: (v) => v * 0.3048,
46
+ cm: (v) => v * 30.48,
47
+ in: (v) => v * 12,
48
+ yd: (v) => v / 3,
49
+ },
50
+ cm: {
51
+ km: (v) => v / 100000,
52
+ mi: (v) => v / 160934,
53
+ m: (v) => v / 100,
54
+ ft: (v) => v / 30.48,
55
+ in: (v) => v / 2.54,
56
+ yd: (v) => v / 91.44,
57
+ },
58
+ in: {
59
+ km: (v) => v / 39370.1,
60
+ mi: (v) => v / 63360,
61
+ m: (v) => v * 0.0254,
62
+ ft: (v) => v / 12,
63
+ cm: (v) => v * 2.54,
64
+ yd: (v) => v / 36,
65
+ },
66
+ yd: {
67
+ km: (v) => v * 0.0009144,
68
+ mi: (v) => v / 1760,
69
+ m: (v) => v * 0.9144,
70
+ ft: (v) => v * 3,
71
+ cm: (v) => v * 91.44,
72
+ in: (v) => v * 36,
73
+ },
74
+ // Weight
75
+ kg: { lb: (v) => v * 2.20462, oz: (v) => v * 35.274, g: (v) => v * 1000, ton: (v) => v / 1000 },
76
+ lb: { kg: (v) => v * 0.453592, oz: (v) => v * 16, g: (v) => v * 453.592, ton: (v) => v * 0.000453592 },
77
+ oz: { kg: (v) => v * 0.0283495, lb: (v) => v / 16, g: (v) => v * 28.3495, ton: (v) => v * 0.0000283495 },
78
+ g: { kg: (v) => v / 1000, lb: (v) => v * 0.00220462, oz: (v) => v * 0.035274, ton: (v) => v / 1000000 },
79
+ ton: { kg: (v) => v * 1000, lb: (v) => v * 2204.62, oz: (v) => v * 35274, g: (v) => v * 1000000 },
80
+ // Data
81
+ b: { kb: (v) => v / 1024, mb: (v) => v / 1048576, gb: (v) => v / 1073741824, tb: (v) => v / 1099511627776 },
82
+ kb: { b: (v) => v * 1024, mb: (v) => v / 1024, gb: (v) => v / 1048576, tb: (v) => v / 1073741824 },
83
+ mb: { b: (v) => v * 1048576, kb: (v) => v * 1024, gb: (v) => v / 1024, tb: (v) => v / 1048576 },
84
+ gb: { b: (v) => v * 1073741824, kb: (v) => v * 1048576, mb: (v) => v * 1024, tb: (v) => v / 1024 },
85
+ tb: { b: (v) => v * 1099511627776, kb: (v) => v * 1073741824, mb: (v) => v * 1048576, gb: (v) => v * 1024 },
86
+ // Speed
87
+ 'km/h': { mph: (v) => v * 0.621371, 'm/s': (v) => v / 3.6, knots: (v) => v * 0.539957 },
88
+ mph: { 'km/h': (v) => v * 1.60934, 'm/s': (v) => v * 0.44704, knots: (v) => v * 0.868976 },
89
+ 'm/s': { 'km/h': (v) => v * 3.6, mph: (v) => v * 2.23694, knots: (v) => v * 1.94384 },
90
+ knots: { 'km/h': (v) => v * 1.852, mph: (v) => v * 1.15078, 'm/s': (v) => v * 0.514444 },
91
+ };
92
+ /**
93
+ * Converts a numeric value from one unit to another.
94
+ *
95
+ * @param value - The numeric value to convert
96
+ * @param from - The source unit (e.g. "km", "celsius", "kg")
97
+ * @param to - The target unit (e.g. "mi", "fahrenheit", "lb")
98
+ * @returns Object with source unit, target unit, original value, and converted result
99
+ * @throws Error if the conversion pair is unsupported, the value is NaN, or the temperature is below absolute zero
100
+ */
101
+ export default function convert(value, from, to) {
102
+ const fromKey = from.toLowerCase();
103
+ const toKey = to.toLowerCase();
104
+ const convertFn = conversions[fromKey]?.[toKey];
105
+ if (!convertFn)
106
+ throw new Error('Invalid conversion unit');
107
+ if (isNaN(value))
108
+ throw new Error('Value must be a number');
109
+ if (TEMPERATURE_UNITS.has(fromKey)) {
110
+ const minValue = ABSOLUTE_ZERO[fromKey];
111
+ if (value < minValue)
112
+ throw new Error('Value must be greater than absolute zero');
113
+ }
114
+ return { from, to, value, result: convertFn(value) };
115
+ }
116
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/modules/v4/convert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface CreditCard {
2
+ number: string;
3
+ formatted: string;
4
+ brand: string;
5
+ expiry: string;
6
+ cvv: string;
7
+ luhn: true;
8
+ }
9
+ export interface CreditResult {
10
+ cards: CreditCard[];
11
+ }
12
+ /**
13
+ * Generates fictitious credit card numbers that pass Luhn validation.
14
+ * These are for testing purposes only — not real card numbers.
15
+ *
16
+ * @param brand - Card brand: visa, mastercard, amex, discover (default: random)
17
+ * @param count - Number of cards to generate (1–10, default 1)
18
+ * @param format - Response format: full or masked (default: masked)
19
+ * @returns Array of generated cards with number, formatted, expiry, cvv
20
+ * @throws Error if brand is unknown, count is out of range, or format is invalid
21
+ */
22
+ export default function credit(brand?: string, count?: number, format?: string): CreditResult;
@@ -0,0 +1,104 @@
1
+ import { randomInt } from 'node:crypto';
2
+ import { MAX_CREDIT_COUNT } from '../../constants.js';
3
+ const BRANDS = ['visa', 'mastercard', 'amex', 'discover'];
4
+ const IIN_PREFIXES = {
5
+ visa: ['4'],
6
+ mastercard: ['51', '52', '53', '54', '55'],
7
+ amex: ['34', '37'],
8
+ discover: ['6011', '65'],
9
+ };
10
+ const CARD_LENGTHS = {
11
+ visa: 16,
12
+ mastercard: 16,
13
+ amex: 15,
14
+ discover: 16,
15
+ };
16
+ function luhnCheckDigit(partial) {
17
+ const digits = partial.split('').map(Number);
18
+ let sum = 0;
19
+ let alt = true; // next-to-last position is doubled
20
+ for (let i = digits.length - 1; i >= 0; i--) {
21
+ let n = digits[i];
22
+ if (alt) {
23
+ n *= 2;
24
+ if (n > 9)
25
+ n -= 9;
26
+ }
27
+ sum += n;
28
+ alt = !alt;
29
+ }
30
+ return (10 - (sum % 10)) % 10;
31
+ }
32
+ function formatFull(num, brand) {
33
+ if (brand === 'amex') {
34
+ // 4-6-5 format
35
+ return `${num.slice(0, 4)} ${num.slice(4, 10)} ${num.slice(10)}`;
36
+ }
37
+ // 4-4-4-4 format
38
+ return num.match(/.{1,4}/g).join(' ');
39
+ }
40
+ function formatMasked(num, brand) {
41
+ if (brand === 'amex') {
42
+ // 4-*-5: show first 4, mask middle 6, show last 5
43
+ return `${num.slice(0, 4)} ${'*'.repeat(6)} ${num.slice(10)}`;
44
+ }
45
+ // 4-*-4: show first 4, mask middle 8, show last 4
46
+ return `${num.slice(0, 4)} ${'*'.repeat(8)} ${num.slice(-4)}`;
47
+ }
48
+ function generateCard(brand) {
49
+ const prefixes = IIN_PREFIXES[brand];
50
+ const prefix = prefixes[randomInt(prefixes.length)];
51
+ const length = CARD_LENGTHS[brand];
52
+ const cvvLength = brand === 'amex' ? 4 : 3;
53
+ let partial = prefix;
54
+ while (partial.length < length - 1) {
55
+ partial += randomInt(10).toString();
56
+ }
57
+ const number = partial + luhnCheckDigit(partial);
58
+ const now = new Date();
59
+ const year = now.getFullYear() + randomInt(1, 6);
60
+ const month = String(randomInt(1, 13)).padStart(2, '0');
61
+ const expiry = `${month}/${String(year).slice(-2)}`;
62
+ const cvv = String(randomInt(Math.pow(10, cvvLength - 1), Math.pow(10, cvvLength))).padStart(cvvLength, '0');
63
+ return { number, brand, expiry, cvv };
64
+ }
65
+ /**
66
+ * Generates fictitious credit card numbers that pass Luhn validation.
67
+ * These are for testing purposes only — not real card numbers.
68
+ *
69
+ * @param brand - Card brand: visa, mastercard, amex, discover (default: random)
70
+ * @param count - Number of cards to generate (1–10, default 1)
71
+ * @param format - Response format: full or masked (default: masked)
72
+ * @returns Array of generated cards with number, formatted, expiry, cvv
73
+ * @throws Error if brand is unknown, count is out of range, or format is invalid
74
+ */
75
+ export default function credit(brand, count = 1, format = 'masked') {
76
+ const resolvedBrand = !brand || brand === 'random'
77
+ ? BRANDS[randomInt(BRANDS.length)]
78
+ : (() => {
79
+ if (!BRANDS.includes(brand)) {
80
+ throw new Error(`Unknown brand "${brand}". Valid options: ${BRANDS.join(', ')}`);
81
+ }
82
+ return brand;
83
+ })();
84
+ if (!Number.isInteger(count) || count < 1 || count > MAX_CREDIT_COUNT) {
85
+ throw new Error(`Count must be an integer between 1 and ${MAX_CREDIT_COUNT}`);
86
+ }
87
+ if (format !== 'full' && format !== 'masked') {
88
+ throw new Error('Format must be "full" or "masked"');
89
+ }
90
+ const cards = Array.from({ length: count }, () => {
91
+ const { number, brand: b, expiry, cvv } = generateCard(resolvedBrand);
92
+ const isMasked = format === 'masked';
93
+ return {
94
+ number: isMasked ? number.slice(0, 4) + '*'.repeat(number.length - 8) + number.slice(-4) : number,
95
+ formatted: isMasked ? formatMasked(number, b) : formatFull(number, b),
96
+ brand: b,
97
+ expiry,
98
+ cvv,
99
+ luhn: true,
100
+ };
101
+ });
102
+ return { cards };
103
+ }
104
+ //# sourceMappingURL=credit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit.js","sourceRoot":"","sources":["../../../src/modules/v4/credit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAiBtD,MAAM,MAAM,GAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEnE,MAAM,YAAY,GAA4B;IAC1C,IAAI,EAAE,CAAC,GAAG,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,YAAY,GAA0B;IACxC,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,EAAE;CACf,CAAC;AAEF,SAAS,cAAc,CAAC,OAAe;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,mCAAmC;IACnD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,GAAG,EAAE,CAAC;YACN,CAAC,IAAI,CAAC,CAAC;YACP,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,GAAG,IAAI,CAAC,CAAC;QACT,GAAG,GAAG,CAAC,GAAG,CAAC;IACf,CAAC;IACD,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAY;IACzC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnB,eAAe;QACf,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,iBAAiB;IACjB,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,KAAY;IAC3C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnB,kDAAkD;QAClD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IACD,kDAAkD;IAClD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAE,CAAC;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,OAAO,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAE7G,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAc,EAAE,QAAgB,CAAC,EAAE,SAAiB,QAAQ;IACvF,MAAM,aAAa,GACf,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ;QACxB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAE;QACnC,CAAC,CAAC,CAAC,GAAG,EAAE;YACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAc,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,qBAAqB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,KAAc,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC;IAEf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,0CAA0C,gBAAgB,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAe,EAAE;QACzD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC;QACrC,OAAO;YACH,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YACjG,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,KAAK,EAAE,CAAC;YACR,MAAM;YACN,GAAG;YACH,IAAI,EAAE,IAAI;SACb,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface CronResult {
2
+ expression: string;
3
+ description: string;
4
+ next: string[];
5
+ timezone: string;
6
+ }
7
+ /**
8
+ * Parses a cron expression and returns the next scheduled execution dates.
9
+ *
10
+ * @param expr - Cron expression with 5 space-separated fields (minute hour dom month dow)
11
+ * @param count - Number of next executions to return (1–20, default 5)
12
+ * @param from - Starting date in ISO 8601 format (defaults to now)
13
+ * @param timezone - Timezone to evaluate the expression in (default "UTC")
14
+ * @returns Parsed expression with description and list of next execution timestamps
15
+ * @throws Error if the expression is invalid, count is out of range, or timezone is unsupported
16
+ */
17
+ export default function cron(expr: string, count?: number, from?: string, timezone?: string): CronResult;