@20syldev/api 3.5.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/.prettierrc +7 -0
  2. package/README.md +32 -33
  3. package/dist/app.js +36 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/config/env.js +73 -0
  6. package/dist/config/env.js.map +1 -0
  7. package/dist/config/versions.js +72 -0
  8. package/dist/config/versions.js.map +1 -0
  9. package/dist/constants.js +42 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/middleware/cors.js +15 -0
  12. package/dist/middleware/cors.js.map +1 -0
  13. package/dist/middleware/error.js +6 -0
  14. package/dist/middleware/error.js.map +1 -0
  15. package/dist/middleware/json.js +8 -0
  16. package/dist/middleware/json.js.map +1 -0
  17. package/dist/middleware/logger.js +26 -0
  18. package/dist/middleware/logger.js.map +1 -0
  19. package/dist/middleware/ratelimit.js +58 -0
  20. package/dist/middleware/ratelimit.js.map +1 -0
  21. package/dist/middleware/version.js +30 -0
  22. package/dist/middleware/version.js.map +1 -0
  23. package/dist/modules/v3/algorithms.js +221 -0
  24. package/dist/modules/v3/algorithms.js.map +1 -0
  25. package/{modules → dist/modules}/v3/captcha.js +4 -13
  26. package/dist/modules/v3/captcha.js.map +1 -0
  27. package/dist/modules/v3/chat.js +103 -0
  28. package/dist/modules/v3/chat.js.map +1 -0
  29. package/{modules → dist/modules}/v3/color.js +12 -13
  30. package/dist/modules/v3/color.js.map +1 -0
  31. package/dist/modules/v3/convert.js +41 -0
  32. package/dist/modules/v3/convert.js.map +1 -0
  33. package/dist/modules/v3/domain.js +83 -0
  34. package/dist/modules/v3/domain.js.map +1 -0
  35. package/dist/modules/v3/hash.js +16 -0
  36. package/dist/modules/v3/hash.js.map +1 -0
  37. package/dist/modules/v3/hyperplanning.js +50 -0
  38. package/dist/modules/v3/hyperplanning.js.map +1 -0
  39. package/dist/modules/v3/levenshtein.js +38 -0
  40. package/dist/modules/v3/levenshtein.js.map +1 -0
  41. package/dist/modules/v3/personal.js +129 -0
  42. package/dist/modules/v3/personal.js.map +1 -0
  43. package/dist/modules/v3/qrcode.js +21 -0
  44. package/dist/modules/v3/qrcode.js.map +1 -0
  45. package/dist/modules/v3/tic_tac_toe.js +221 -0
  46. package/dist/modules/v3/tic_tac_toe.js.map +1 -0
  47. package/dist/modules/v3/time.js +88 -0
  48. package/dist/modules/v3/time.js.map +1 -0
  49. package/{modules → dist/modules}/v3/token.js +10 -11
  50. package/dist/modules/v3/token.js.map +1 -0
  51. package/dist/modules/v3/username.js +92 -0
  52. package/dist/modules/v3/username.js.map +1 -0
  53. package/dist/modules/v3/utils.js +70 -0
  54. package/dist/modules/v3/utils.js.map +1 -0
  55. package/dist/modules/v3.js +16 -0
  56. package/dist/modules/v3.js.map +1 -0
  57. package/dist/modules/v4/algorithms.js +200 -0
  58. package/dist/modules/v4/algorithms.js.map +1 -0
  59. package/dist/modules/v4/captcha.js +35 -0
  60. package/dist/modules/v4/captcha.js.map +1 -0
  61. package/dist/modules/v4/chat.js +92 -0
  62. package/dist/modules/v4/chat.js.map +1 -0
  63. package/dist/modules/v4/color.js +43 -0
  64. package/dist/modules/v4/color.js.map +1 -0
  65. package/dist/modules/v4/convert.js +33 -0
  66. package/dist/modules/v4/convert.js.map +1 -0
  67. package/dist/modules/v4/dice.js +30 -0
  68. package/dist/modules/v4/dice.js.map +1 -0
  69. package/dist/modules/v4/domain.js +78 -0
  70. package/dist/modules/v4/domain.js.map +1 -0
  71. package/dist/modules/v4/encode.js +165 -0
  72. package/dist/modules/v4/encode.js.map +1 -0
  73. package/dist/modules/v4/geo.js +41 -0
  74. package/dist/modules/v4/geo.js.map +1 -0
  75. package/dist/modules/v4/hash.js +9 -0
  76. package/dist/modules/v4/hash.js.map +1 -0
  77. package/dist/modules/v4/hyperplanning.js +42 -0
  78. package/dist/modules/v4/hyperplanning.js.map +1 -0
  79. package/dist/modules/v4/levenshtein.js +29 -0
  80. package/dist/modules/v4/levenshtein.js.map +1 -0
  81. package/dist/modules/v4/palette.js +89 -0
  82. package/dist/modules/v4/palette.js.map +1 -0
  83. package/dist/modules/v4/personal.js +125 -0
  84. package/dist/modules/v4/personal.js.map +1 -0
  85. package/dist/modules/v4/placeholder.js +96 -0
  86. package/dist/modules/v4/placeholder.js.map +1 -0
  87. package/dist/modules/v4/qrcode.js +12 -0
  88. package/dist/modules/v4/qrcode.js.map +1 -0
  89. package/dist/modules/v4/statistics.js +41 -0
  90. package/dist/modules/v4/statistics.js.map +1 -0
  91. package/dist/modules/v4/text.js +293 -0
  92. package/dist/modules/v4/text.js.map +1 -0
  93. package/dist/modules/v4/tic_tac_toe.js +206 -0
  94. package/dist/modules/v4/tic_tac_toe.js.map +1 -0
  95. package/dist/modules/v4/time.js +73 -0
  96. package/dist/modules/v4/time.js.map +1 -0
  97. package/dist/modules/v4/token.js +36 -0
  98. package/dist/modules/v4/token.js.map +1 -0
  99. package/dist/modules/v4/username.js +87 -0
  100. package/dist/modules/v4/username.js.map +1 -0
  101. package/dist/modules/v4/utils.js +26 -0
  102. package/dist/modules/v4/utils.js.map +1 -0
  103. package/dist/modules/v4/validate.js +54 -0
  104. package/dist/modules/v4/validate.js.map +1 -0
  105. package/dist/modules/v4.js +18 -0
  106. package/dist/modules/v4.js.map +1 -0
  107. package/dist/routes/delete.js +65 -0
  108. package/dist/routes/delete.js.map +1 -0
  109. package/dist/routes/get.js +441 -0
  110. package/dist/routes/get.js.map +1 -0
  111. package/dist/routes/index.js +50 -0
  112. package/dist/routes/index.js.map +1 -0
  113. package/dist/routes/patch.js +41 -0
  114. package/dist/routes/patch.js.map +1 -0
  115. package/dist/routes/post.js +185 -0
  116. package/dist/routes/post.js.map +1 -0
  117. package/dist/storage/index.js +13 -0
  118. package/dist/storage/index.js.map +1 -0
  119. package/dist/types/storage.js +2 -0
  120. package/dist/types/storage.js.map +1 -0
  121. package/dist/utils/response.js +10 -0
  122. package/dist/utils/response.js.map +1 -0
  123. package/dist/utils/version.js +3 -0
  124. package/dist/utils/version.js.map +1 -0
  125. package/docs/changelog.md +333 -0
  126. package/eslint.config.js +20 -0
  127. package/package.json +31 -15
  128. package/src/app.ts +48 -0
  129. package/src/config/env.ts +81 -0
  130. package/src/config/versions.ts +92 -0
  131. package/src/constants.ts +47 -0
  132. package/src/middleware/cors.ts +17 -0
  133. package/src/middleware/error.ts +7 -0
  134. package/src/middleware/json.ts +9 -0
  135. package/src/middleware/logger.ts +31 -0
  136. package/src/middleware/ratelimit.ts +66 -0
  137. package/src/middleware/version.ts +39 -0
  138. package/{modules → src/modules}/v3/algorithms.js +1 -1
  139. package/src/modules/v3/captcha.js +60 -0
  140. package/{modules → src/modules}/v3/chat.js +6 -4
  141. package/src/modules/v3/color.js +60 -0
  142. package/{modules → src/modules}/v3/convert.js +5 -5
  143. package/{modules → src/modules}/v3/domain.js +51 -4
  144. package/{modules → src/modules}/v3/hash.js +1 -1
  145. package/{modules → src/modules}/v3/hyperplanning.js +11 -10
  146. package/{modules → src/modules}/v3/levenshtein.js +3 -3
  147. package/{modules → src/modules}/v3/personal.js +20 -8
  148. package/{modules → src/modules}/v3/qrcode.js +1 -1
  149. package/{modules → src/modules}/v3/tic_tac_toe.js +24 -18
  150. package/{modules → src/modules}/v3/time.js +22 -11
  151. package/src/modules/v3/token.js +54 -0
  152. package/src/modules/v3/username.js +94 -0
  153. package/{modules → src/modules}/v3/utils.js +2 -2
  154. package/{modules → src/modules}/v3.js +1 -1
  155. package/src/modules/v4/algorithms.ts +197 -0
  156. package/src/modules/v4/captcha.ts +49 -0
  157. package/src/modules/v4/chat.ts +122 -0
  158. package/src/modules/v4/color.ts +64 -0
  159. package/src/modules/v4/convert.ts +38 -0
  160. package/src/modules/v4/dice.ts +39 -0
  161. package/src/modules/v4/domain.ts +81 -0
  162. package/src/modules/v4/encode.ts +170 -0
  163. package/src/modules/v4/geo.ts +53 -0
  164. package/src/modules/v4/hash.ts +9 -0
  165. package/src/modules/v4/hyperplanning.ts +58 -0
  166. package/src/modules/v4/levenshtein.ts +38 -0
  167. package/src/modules/v4/palette.ts +103 -0
  168. package/src/modules/v4/personal.ts +147 -0
  169. package/src/modules/v4/placeholder.ts +122 -0
  170. package/src/modules/v4/qrcode.ts +11 -0
  171. package/src/modules/v4/statistics.ts +55 -0
  172. package/src/modules/v4/text.ts +300 -0
  173. package/src/modules/v4/tic_tac_toe.ts +255 -0
  174. package/src/modules/v4/time.ts +92 -0
  175. package/src/modules/v4/token.ts +43 -0
  176. package/src/modules/v4/username.ts +89 -0
  177. package/src/modules/v4/utils.ts +38 -0
  178. package/src/modules/v4/validate.ts +55 -0
  179. package/src/modules/v4.ts +17 -0
  180. package/src/routes/delete.ts +72 -0
  181. package/src/routes/get.ts +508 -0
  182. package/src/routes/index.ts +58 -0
  183. package/src/routes/patch.ts +45 -0
  184. package/src/routes/post.ts +200 -0
  185. package/src/storage/index.ts +16 -0
  186. package/src/types/express.d.ts +17 -0
  187. package/src/types/storage.ts +48 -0
  188. package/src/utils/response.ts +11 -0
  189. package/src/utils/version.ts +5 -0
  190. package/tests/integration/api.test.ts +395 -0
  191. package/tests/tsconfig.json +3 -0
  192. package/tests/unit/algorithms.test.ts +120 -0
  193. package/tests/unit/color.test.ts +33 -0
  194. package/tests/unit/convert.test.ts +42 -0
  195. package/tests/unit/dice.test.ts +57 -0
  196. package/tests/unit/domain.test.ts +47 -0
  197. package/tests/unit/encode.test.ts +108 -0
  198. package/tests/unit/geo.test.ts +45 -0
  199. package/tests/unit/hash.test.ts +37 -0
  200. package/tests/unit/hyperplanning.test.ts +77 -0
  201. package/tests/unit/levenshtein.test.ts +34 -0
  202. package/tests/unit/palette.test.ts +53 -0
  203. package/tests/unit/personal.test.ts +65 -0
  204. package/tests/unit/statistics.test.ts +57 -0
  205. package/tests/unit/text.test.ts +107 -0
  206. package/tests/unit/time.test.ts +67 -0
  207. package/tests/unit/token.test.ts +61 -0
  208. package/tests/unit/username.test.ts +34 -0
  209. package/tests/unit/validate.test.ts +71 -0
  210. package/tsconfig.json +17 -0
  211. package/tsconfig.test.json +9 -0
  212. package/app.js +0 -865
  213. package/modules/v3/username.js +0 -32
@@ -0,0 +1,50 @@
1
+ import { formatDate } from './utils.js';
2
+ import ical from 'ical.js';
3
+ /**
4
+ * Parse an ICS calendar file and extract event information
5
+ *
6
+ * @param {string} url - URL to the ICS file
7
+ * @param {string} [detail] - Detail level of returned information ('full', 'list', or undefined)
8
+ * @returns {Promise<Array>} Array of calendar events
9
+ * @throws {Error} If the ICS file is invalid or inaccessible
10
+ */
11
+ export default async function hyperplanning(url, detail) {
12
+ const response = await fetch(url);
13
+ if (!response.ok || !(response.headers.get('content-type') || '').includes('text/calendar')) {
14
+ throw new Error('Invalid ICS file format.');
15
+ }
16
+ const events = new ical.Component(ical.parse(await response.text()))
17
+ .getAllSubcomponents('vevent')
18
+ .map((e) => {
19
+ const evt = new ical.Event(e);
20
+ const summary = (evt.summary || '').split(' ').filter((part) => part !== '-');
21
+ const start = formatDate(evt.startDate.toJSDate());
22
+ const end = formatDate(evt.endDate.toJSDate());
23
+ if (detail === 'full') {
24
+ const desc = (evt.description || '').split('\n').map((l) => l.trim());
25
+ const extract = (p) => (desc.find((l) => l.startsWith(p)) || '').replace(p, '').trim();
26
+ return {
27
+ summary,
28
+ subject: extract('Matière :'),
29
+ teacher: extract('Enseignant :'),
30
+ classes: extract('Promotions :')
31
+ .split(', ')
32
+ .map((c) => c.trim()),
33
+ type: extract('Salle :') || undefined,
34
+ start,
35
+ end,
36
+ };
37
+ }
38
+ if (detail === 'list')
39
+ return { summary, start, end };
40
+ return {
41
+ summary: evt.summary || '',
42
+ start,
43
+ end,
44
+ };
45
+ })
46
+ .sort((a, b) => new Date(a.start) - new Date(b.start))
47
+ .filter((e) => new Date(e.end) >= new Date());
48
+ return events;
49
+ }
50
+ //# sourceMappingURL=hyperplanning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperplanning.js","sourceRoot":"","sources":["../../../src/modules/v3/hyperplanning.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Calculate the Levenshtein distance between two strings.
3
+ *
4
+ * @param {string} str1 - The first string
5
+ * @param {string} str2 - The second string
6
+ * @returns {object} - Object containing the strings and their Levenshtein distance
7
+ * @throws {Error} - If inputs are invalid
8
+ */
9
+ export default function levenshtein(str1, str2) {
10
+ // Input validation
11
+ if (!str1 || typeof str1 !== 'string') {
12
+ throw new Error('Please provide a valid first string');
13
+ }
14
+ if (!str2 || typeof str2 !== 'string') {
15
+ throw new Error('Please provide a valid second string');
16
+ }
17
+ if (str1.length > 1000) {
18
+ throw new Error('First string exceeds 1000 characters');
19
+ }
20
+ if (str2.length > 1000) {
21
+ throw new Error('Second string exceeds 1000 characters');
22
+ }
23
+ // Calculate Levenshtein distance
24
+ const m = Array.from({ length: str1.length + 1 }, (_, i) => [i]);
25
+ for (let j = 0; j <= str2.length; j++)
26
+ m[0][j] = j;
27
+ for (let i = 1; i <= str1.length; i++) {
28
+ for (let j = 1; j <= str2.length; j++) {
29
+ m[i][j] = Math.min(m[i - 1][j] + 1, m[i][j - 1] + 1, m[i - 1][j - 1] + (str1[i - 1] !== str2[j - 1] ? 1 : 0));
30
+ }
31
+ }
32
+ return {
33
+ str1,
34
+ str2,
35
+ distance: m[str1.length][str2.length],
36
+ };
37
+ }
38
+ //# sourceMappingURL=levenshtein.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levenshtein.js","sourceRoot":"","sources":["../../../src/modules/v3/levenshtein.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,IAAI,EAAE,IAAI;IAC1C,mBAAmB;IACnB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACd,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACf,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EACf,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI;QACJ,IAAI;QACJ,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KACxC,CAAC;AACN,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { random, randomNumber } from './utils.js';
2
+ /**
3
+ * Generate random personal information
4
+ *
5
+ * @returns {Object} Comprehensive personal profile with contact info, financial data, and more
6
+ */
7
+ export default function personal() {
8
+ const people = [
9
+ { name: 'John Doe', social: 'john_doe', email: 'john@example.com', country: 'US' },
10
+ { name: 'Jane Martin', social: 'jane_martin', email: 'jane@example.com', country: 'FR' },
11
+ { name: 'Michael Johnson', social: 'mike_johnson', email: 'michael@example.com', country: 'UK' },
12
+ { name: 'Emily Davis', social: 'emily_davis', email: 'emily@example.com', country: 'ES' },
13
+ { name: 'Alexis Barbos', social: 'alexis_barbos', email: 'alexis@example.com', country: 'DE' },
14
+ { name: 'Sarah Williams', social: 'sarah_williams', email: 'sarah@example.com', country: 'IT' },
15
+ { name: 'Daniel Brown', social: 'daniel_brown', email: 'daniel@example.com', country: 'JP' },
16
+ { name: 'Sophia Wilson', social: 'sophia_wilson', email: 'sophia@example.com', country: 'BR' },
17
+ { name: 'James Taylor', social: 'james_taylor', email: 'james@example.com', country: 'CA' },
18
+ { name: 'Olivia Thomas', social: 'olivia_thomas', email: 'olivia@example.com', country: 'AU' },
19
+ ];
20
+ const countries = {
21
+ US: { tel: '123-456-7890', code: '1', lang: 'English' },
22
+ FR: { tel: '06 78 90 12 34', code: '33', lang: 'French' },
23
+ UK: { tel: '7911 123456', code: '44', lang: 'English' },
24
+ ES: { tel: '678 901 234', code: '34', lang: 'Spanish' },
25
+ DE: { tel: '163 555 1584', code: '49', lang: 'German' },
26
+ IT: { tel: '345 678 9012', code: '39', lang: 'Italian' },
27
+ JP: { tel: '080-1234-5678', code: '81', lang: 'Japanese' },
28
+ BR: { tel: '(11) 98765-4321', code: '55', lang: 'Portuguese' },
29
+ CA: { tel: '416-123-4567', code: '1', lang: 'English' },
30
+ AU: { tel: '0412 345 678', code: '61', lang: 'English' },
31
+ };
32
+ const jobs = ['Writer', 'Artist', 'Musician', 'Explorer', 'Scientist', 'Engineer', 'Athlete', 'Doctor'];
33
+ const hobbies = ['Reading', 'Traveling', 'Gaming', 'Cooking', 'Fitness', 'Music', 'Photography', 'Writing'];
34
+ const cities = [
35
+ 'New York',
36
+ 'Paris',
37
+ 'London',
38
+ 'Madrid',
39
+ 'Berlin',
40
+ 'Rome',
41
+ 'Tokyo',
42
+ 'Los Angeles',
43
+ 'Sydney',
44
+ 'São Paulo',
45
+ 'Toronto',
46
+ ];
47
+ const streets = ['Main St', '2nd Ave', 'Broadway', 'Park Lane', 'Elm St', 'Sunset Blvd', 'Maple St', 'Highland Rd'];
48
+ const card = Array.from({ length: 4 }, () => randomNumber(1000, 9999)).join(' ');
49
+ const cvc = randomNumber(100, 999);
50
+ const expiration = `${String(randomNumber(1, 12)).padStart(2, '0')}/${(new Date().getFullYear() + randomNumber(0, 3)).toString().slice(-2)}`;
51
+ const person = random(people);
52
+ const social = person.social;
53
+ const country = person.country;
54
+ const phone = countries[country].tel;
55
+ const lang = countries[country].lang;
56
+ const age = randomNumber(18, 67);
57
+ const birthday = new Date(Date.now() - randomNumber(18, 67) * 365.25 * 24 * 60 * 60 * 1000).toISOString();
58
+ let emergencyContacts = [];
59
+ let yearIncome = randomNumber(20000, 100000);
60
+ let subscriptions = [];
61
+ let pets = [];
62
+ let vehicles = [];
63
+ let civilStatus = 'Single';
64
+ let children = 0;
65
+ if (age >= 21 && Math.random() > 0.7)
66
+ civilStatus = 'Married';
67
+ if (civilStatus === 'Married' && age >= 25)
68
+ children = randomNumber(0, 3);
69
+ while (emergencyContacts.length < randomNumber(1, 3)) {
70
+ let emergencyContact = random(people);
71
+ while (emergencyContact.email === person.email ||
72
+ emergencyContacts.some((e) => e.email === emergencyContact.email)) {
73
+ emergencyContact = random(people);
74
+ }
75
+ const emergencyPhone = `${randomNumber(100, 999)}-${randomNumber(100, 999)}-${randomNumber(1000, 9999)}`;
76
+ emergencyContacts.push({
77
+ name: emergencyContact.name,
78
+ relationship: random(['Spouse', 'Parent', 'Sibling', 'Friend']),
79
+ phone: `+${countries[country].code} ${emergencyPhone}`,
80
+ });
81
+ }
82
+ while (subscriptions.length < randomNumber(1, 3)) {
83
+ let subscription = random(['Netflix', 'Spotify', 'Amazon Prime', 'Disney+', 'Hulu']);
84
+ if (!subscriptions.includes(subscription))
85
+ subscriptions.push(subscription);
86
+ }
87
+ while (pets.length < randomNumber(1, 3)) {
88
+ let pet = random(['Dog', 'Cat', 'Fish', 'Bird', 'None']);
89
+ if (!pets.includes(pet))
90
+ pets.push(pet);
91
+ }
92
+ while (vehicles.length < randomNumber(1, 3)) {
93
+ let vehicle = random(['Car', 'Bike', 'Motorcycle', 'Bus', 'None']);
94
+ if (!vehicles.includes(vehicle))
95
+ vehicles.push(vehicle);
96
+ }
97
+ return {
98
+ name: person.name,
99
+ email: person.email,
100
+ localisation: country,
101
+ phone: `+${countries[country].code} ${phone}`,
102
+ job: random(jobs),
103
+ hobbies: random(hobbies),
104
+ language: lang,
105
+ card,
106
+ cvc,
107
+ expiration,
108
+ address: `${randomNumber(1, 9999)} ${random(streets)}, ${random(cities)}`,
109
+ birthday,
110
+ civil_status: civilStatus,
111
+ children,
112
+ vehicle: vehicles,
113
+ social_profiles: {
114
+ twitter: `@${social}`,
115
+ facebook: `facebook.com/${social}`,
116
+ linkedin: `linkedin.com/in/${social}`,
117
+ instagram: `instagram.com/${social}`,
118
+ },
119
+ year_income: `${yearIncome} USD/year`,
120
+ month_income: `${(yearIncome / 12).toFixed(2)} USD/month`,
121
+ education: random(['High School', "Bachelor's", "Master's", 'PhD']),
122
+ work_experience: `${randomNumber(0, 20)} years`,
123
+ health_status: random(['Healthy', 'Minor Issues', 'Chronic Conditions']),
124
+ emergency_contacts: emergencyContacts,
125
+ subscriptions,
126
+ pets,
127
+ };
128
+ }
129
+ //# sourceMappingURL=personal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal.js","sourceRoot":"","sources":["../../../src/modules/v3/personal.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { toDataURL } from 'qrcode';
2
+ /**
3
+ * Generate a QR code for the provided URL.
4
+ *
5
+ * @param {string} url - The URL to encode in the QR code
6
+ * @returns {Promise<string>} - Base64 encoded QR code image
7
+ * @throws {Error} - If URL is invalid or QR code generation fails
8
+ */
9
+ export default async function qrcode(url) {
10
+ // Input validation
11
+ if (!url || typeof url !== 'string')
12
+ throw new Error('Please provide a valid URL');
13
+ try {
14
+ // Generate QR code
15
+ return await toDataURL(url);
16
+ }
17
+ catch (error) {
18
+ throw new Error(`Failed to generate QR code: ${error.message}`);
19
+ }
20
+ }
21
+ //# sourceMappingURL=qrcode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/modules/v3/qrcode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,MAAM,CAAC,GAAG;IACpC,mBAAmB;IACnB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEnF,IAAI,CAAC;QACD,mBAAmB;QACnB,OAAO,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACL,CAAC"}
@@ -0,0 +1,221 @@
1
+ import { randomBytes } from 'crypto';
2
+ /**
3
+ * Manages a Tic-Tac-Toe game session
4
+ *
5
+ * @param {string} action - The action to perform ('play', 'fetch', or 'list')
6
+ * @param {Object} params - The parameters for the action
7
+ * @returns {Object} - The result of the action
8
+ * @throws {Error} - If parameters are invalid
9
+ */
10
+ export default function tic_tac_toe(action, params = {}) {
11
+ // In-memory storage
12
+ const storage = params.storage || {};
13
+ // Initialize storage
14
+ storage.games ??= {};
15
+ storage.sessions ??= {};
16
+ storage.rateLimits ??= {};
17
+ // Reference the storage properties
18
+ const { games, sessions, rateLimits } = storage;
19
+ // List public games
20
+ if (action === 'list')
21
+ return listGames(games);
22
+ // Input validation for common parameters
23
+ if (!params.username)
24
+ throw new Error('Please provide a username');
25
+ const u = params.username.toLowerCase();
26
+ const now = Date.now();
27
+ // Rate limiting
28
+ rateLimits[u] = (rateLimits[u] || []).filter((ts) => now - ts < 10000);
29
+ if (rateLimits[u].length > 50) {
30
+ const remainingTime = Math.ceil((rateLimits[u][0] + 10000 - now) / 1000);
31
+ throw new Error(`Rate limit exceeded. Try again in ${remainingTime} seconds.`);
32
+ }
33
+ rateLimits[u].push(now);
34
+ // Handle different actions
35
+ if (action === 'play') {
36
+ return playMove(params, games, sessions, u, now);
37
+ }
38
+ else if (action === 'fetch') {
39
+ return fetchGame(params, games, u);
40
+ }
41
+ else {
42
+ throw new Error('Invalid action. Use "play", "fetch", or "list"');
43
+ }
44
+ }
45
+ /**
46
+ * Process a player's move
47
+ */
48
+ function playMove(params, games, sessions, u, now) {
49
+ const { move, session, game } = params;
50
+ const validMoves = ['1-1', '1-2', '1-3', '2-1', '2-2', '2-3', '3-1', '3-2', '3-3'];
51
+ // Input validation for play action
52
+ if (!move)
53
+ throw new Error('Please provide a valid move');
54
+ if (!session)
55
+ throw new Error('Please provide a valid session ID');
56
+ if (!game)
57
+ throw new Error('Please provide a valid game ID');
58
+ if (!validMoves.includes(move))
59
+ throw new Error('Invalid move. Please provide a valid move (e.g., 1-1, 2-2, 3-3).');
60
+ // Session validation
61
+ if (sessions[u] && sessions[u].user !== session) {
62
+ throw new Error('Session ID mismatch');
63
+ }
64
+ // Initialize game if needed
65
+ games[game] = games[game] || {
66
+ moves: [],
67
+ players: [],
68
+ private: params.private || false,
69
+ creation: Date.now(),
70
+ };
71
+ const moves = games[game].moves;
72
+ // Check if game is full
73
+ const players = [...new Set(moves.map((play) => play.username))];
74
+ if (players.length >= 2 && !players.includes(params.username)) {
75
+ throw new Error('Game is full, you can only watch.');
76
+ }
77
+ // Check if it's player's turn
78
+ if (moves.length > 0 && moves[moves.length - 1].username === params.username) {
79
+ throw new Error('Please wait for the other player to make a move.');
80
+ }
81
+ // Check if move is already made
82
+ if (moves.some((play) => play.move === move)) {
83
+ throw new Error('Move already made. Please choose a different move.');
84
+ }
85
+ // Add move to game
86
+ const play = { username: params.username, move, session };
87
+ moves.push(play);
88
+ // Check game result
89
+ const result = checkGame(moves);
90
+ if (result.winner || result.tie) {
91
+ setTimeout(() => delete games[game], 600000);
92
+ return {
93
+ message: `Move sent successfully. ${result.winner ? result.winner + ' wins. ' + result.loser + ' loses.' : "It's a tie."}`,
94
+ ...result,
95
+ };
96
+ }
97
+ // Set cleanup timeout
98
+ setTimeout(() => delete games[game], 3600000);
99
+ // Update session
100
+ sessions[u] = sessions[u] || { user: session, last: now };
101
+ sessions[u].last = now;
102
+ setTimeout(() => {
103
+ if (now - sessions[u].last >= 3600000)
104
+ delete sessions[u];
105
+ }, 3600000);
106
+ return { message: 'Move sent successfully' };
107
+ }
108
+ /**
109
+ * Fetch a game state
110
+ */
111
+ function fetchGame(params, games, u) {
112
+ const id = params.game || generateGameId();
113
+ if (!games[id]) {
114
+ games[id] = {
115
+ moves: [],
116
+ players: [],
117
+ private: params.private || false,
118
+ creation: Date.now(),
119
+ };
120
+ }
121
+ if (!games[id].players.includes(u)) {
122
+ games[id].players.push(u);
123
+ }
124
+ const moves = games[id].moves;
125
+ const players = games[id].players;
126
+ const privateGame = games[id].private;
127
+ const lastPlayer = moves.length ? moves[moves.length - 1].username : null;
128
+ const turn = players.find((p) => p !== lastPlayer) || players[0];
129
+ const status = players.length >= 2 ? 'ready' : 'waiting';
130
+ const result = moves.length ? checkGame(moves) : {};
131
+ return {
132
+ id,
133
+ moves,
134
+ players,
135
+ turn,
136
+ status,
137
+ private: privateGame,
138
+ ...result,
139
+ };
140
+ }
141
+ /**
142
+ * List all public games in progress
143
+ */
144
+ function listGames(games) {
145
+ const publicGames = [];
146
+ const now = Date.now();
147
+ for (const [gameId, game] of Object.entries(games)) {
148
+ // Only include public games
149
+ if (!game.private) {
150
+ const result = game.moves.length ? checkGame(game.moves) : {};
151
+ const isFinished = result.winner || result.tie;
152
+ // Only include active games (not finished)
153
+ if (!isFinished) {
154
+ const lastPlayer = game.moves.length ? game.moves[game.moves.length - 1].username : null;
155
+ const turn = game.players.find((p) => p !== lastPlayer) || game.players[0];
156
+ const status = game.players.length >= 2 ? 'ready' : 'waiting';
157
+ publicGames.push({
158
+ id: gameId,
159
+ players: game.players,
160
+ playersCount: game.players.length,
161
+ moves: game.moves.length,
162
+ turn,
163
+ status,
164
+ creation: game.creation || now,
165
+ });
166
+ }
167
+ }
168
+ }
169
+ // Sort by creation time (newest first)
170
+ publicGames.sort((a, b) => b.creation - a.creation);
171
+ return {
172
+ message: 'Public games available',
173
+ count: publicGames.length,
174
+ games: publicGames,
175
+ };
176
+ }
177
+ /**
178
+ * Generate a random game ID
179
+ */
180
+ function generateGameId() {
181
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
182
+ return Array.from(randomBytes(5))
183
+ .map((b) => chars[b % chars.length])
184
+ .join('');
185
+ }
186
+ /**
187
+ * Check the game result
188
+ */
189
+ function checkGame(moves) {
190
+ let board = Array(3)
191
+ .fill()
192
+ .map(() => Array(3).fill(null));
193
+ let playerSymbols = {};
194
+ let playersOrder = [];
195
+ moves.forEach(({ username, move }) => {
196
+ if (!playerSymbols[username]) {
197
+ playersOrder.push(username);
198
+ playerSymbols[username] = playersOrder.length === 1 ? 'X' : 'O';
199
+ }
200
+ let [row, col] = move.split('-').map(Number);
201
+ board[row - 1][col - 1] = playerSymbols[username];
202
+ });
203
+ const checkWinner = (symbol) => {
204
+ for (let i = 0; i < 3; i++) {
205
+ if (board[i][0] === symbol && board[i][1] === symbol && board[i][2] === symbol)
206
+ return true;
207
+ if (board[0][i] === symbol && board[1][i] === symbol && board[2][i] === symbol)
208
+ return true;
209
+ }
210
+ if (board[0][0] === symbol && board[1][1] === symbol && board[2][2] === symbol)
211
+ return true;
212
+ if (board[0][2] === symbol && board[1][1] === symbol && board[2][0] === symbol)
213
+ return true;
214
+ return false;
215
+ };
216
+ let winner = Object.keys(playerSymbols).find((player) => checkWinner(playerSymbols[player]));
217
+ let isTie = !winner && moves.length === 9;
218
+ let loser = winner && playersOrder.length === 2 ? playersOrder.find((player) => player !== winner) : null;
219
+ return { winner, loser, tie: isTie };
220
+ }
221
+ //# sourceMappingURL=tic_tac_toe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tic_tac_toe.js","sourceRoot":"","sources":["../../../src/modules/v3/tic_tac_toe.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Generate time information based on specified parameters.
3
+ *
4
+ * @param {string} type - The type of time information ('live' or 'random')
5
+ * @param {string} start - Start date for random generation (ISO format)
6
+ * @param {string} end - End date for random generation (ISO format)
7
+ * @param {string} format - Specific time format to return
8
+ * @param {string} timezone - Timezone to use
9
+ * @returns {object} - Time information in various formats
10
+ * @throws {Error} - If inputs are invalid
11
+ */
12
+ export default function time(type = 'live', start, end, format, timezone) {
13
+ const validFormats = [
14
+ 'iso',
15
+ 'utc',
16
+ 'timestamp',
17
+ 'locale',
18
+ 'date',
19
+ 'time',
20
+ 'year',
21
+ 'month',
22
+ 'day',
23
+ 'hour',
24
+ 'minute',
25
+ 'second',
26
+ 'ms',
27
+ 'dayOfWeek',
28
+ 'dayOfYear',
29
+ 'weekNumber',
30
+ 'timezone',
31
+ 'timezoneOffset',
32
+ ];
33
+ const validTimezones = ['UTC', 'America/New_York', 'Europe/Paris', 'Asia/Tokyo', 'Australia/Sydney'];
34
+ // Input validation
35
+ if (type !== 'live' && type !== 'random') {
36
+ throw new Error('Please provide a valid type (live or random)');
37
+ }
38
+ if (start && !Date.parse(start)) {
39
+ throw new Error('Please provide a valid start date (YYYY-MM-DD)');
40
+ }
41
+ if (end && !Date.parse(end)) {
42
+ throw new Error('Please provide a valid end date (YYYY-MM-DD)');
43
+ }
44
+ if (format && !validFormats.includes(format)) {
45
+ throw new Error(`Please provide a valid format. Options: ${validFormats.join(', ')}`);
46
+ }
47
+ if (timezone && !validTimezones.includes(timezone)) {
48
+ throw new Error(`Please provide a valid timezone. Options: ${validTimezones.join(', ')}`);
49
+ }
50
+ // Helper function to get all time formats for a date
51
+ const getTimeFormats = (date, tz) => {
52
+ return {
53
+ iso: date.toISOString(),
54
+ utc: date.toUTCString(),
55
+ timestamp: date.getTime(),
56
+ locale: date.toLocaleString('en-US', { timeZone: tz, timeZoneName: 'long' }),
57
+ date: date.toLocaleDateString('en-US', { timeZone: tz }),
58
+ time: date.toLocaleTimeString('en-US', { timeZone: tz }),
59
+ year: date.getFullYear(),
60
+ month: date.getMonth() + 1,
61
+ day: date.getDate(),
62
+ hour: date.getHours(),
63
+ minute: date.getMinutes(),
64
+ second: date.getSeconds(),
65
+ ms: date.getMilliseconds(),
66
+ dayOfWeek: date.getDay(),
67
+ dayOfYear: Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 86400000),
68
+ weekNumber: Math.ceil(((date - new Date(date.getFullYear(), 0, 0)) / 86400000 + 1) / 7),
69
+ timezone: tz,
70
+ timezoneOffset: date.getTimezoneOffset(),
71
+ };
72
+ };
73
+ // Generate time information based on type
74
+ if (type === 'random') {
75
+ const startDate = start ? new Date(start).getTime() : new Date('1900-01-01').getTime();
76
+ const endDate = end ? new Date(end).getTime() : new Date('2100-12-31').getTime();
77
+ const randomDate = new Date(startDate + Math.random() * (endDate - startDate));
78
+ const tz = timezone || validTimezones[Math.floor(Math.random() * validTimezones.length)];
79
+ const formats = getTimeFormats(randomDate, tz);
80
+ return format ? { date: formats[format] } : formats;
81
+ }
82
+ // Live time information
83
+ const now = new Date();
84
+ const tz = timezone || 'UTC';
85
+ const formats = getTimeFormats(now, tz);
86
+ return format ? { date: formats[format] } : formats;
87
+ }
88
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/modules/v3/time.js"],"names":[],"mappings":"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"}