tiny-essentials 1.0.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 (302) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/.github/workflows/node.js.yml +31 -0
  3. package/LICENSE +674 -0
  4. package/README.md +67 -0
  5. package/dist/TinyEssentials.min.js +1 -0
  6. package/dist/_virtual/_commonjsHelpers.cjs +7 -0
  7. package/dist/_virtual/common.cjs +5 -0
  8. package/dist/_virtual/index.cjs +9 -0
  9. package/dist/_virtual/index2.cjs +5 -0
  10. package/dist/_virtual/trace.cjs +5 -0
  11. package/dist/legacy/crypto/decrypt.cjs +57 -0
  12. package/dist/legacy/crypto/decrypt.d.mts +18 -0
  13. package/dist/legacy/crypto/decrypt.mjs +47 -0
  14. package/dist/legacy/crypto/default.cjs +23 -0
  15. package/dist/legacy/crypto/default.d.mts +35 -0
  16. package/dist/legacy/crypto/default.mjs +19 -0
  17. package/dist/legacy/crypto/encrypt.cjs +54 -0
  18. package/dist/legacy/crypto/encrypt.d.mts +19 -0
  19. package/dist/legacy/crypto/encrypt.mjs +46 -0
  20. package/dist/legacy/crypto/index.cjs +11 -0
  21. package/dist/legacy/crypto/index.d.mts +4 -0
  22. package/dist/legacy/crypto/index.mjs +6 -0
  23. package/dist/legacy/firebase/cookieSession.cjs +121 -0
  24. package/dist/legacy/firebase/cookieSession.d.mts +56 -0
  25. package/dist/legacy/firebase/cookieSession.mjs +114 -0
  26. package/dist/legacy/firebase/database/index.cjs +11 -0
  27. package/dist/legacy/firebase/database/index.d.mts +7 -0
  28. package/dist/legacy/firebase/database/index.mjs +7 -0
  29. package/dist/legacy/firebase/database/presence.cjs +131 -0
  30. package/dist/legacy/firebase/database/presence.d.mts +9 -0
  31. package/dist/legacy/firebase/database/presence.mjs +111 -0
  32. package/dist/legacy/firebase/database/saveAsync.cjs +147 -0
  33. package/dist/legacy/firebase/database/saveAsync.d.mts +54 -0
  34. package/dist/legacy/firebase/database/saveAsync.mjs +147 -0
  35. package/dist/legacy/firebase/databaseEscape.cjs +42 -0
  36. package/dist/legacy/firebase/databaseEscape.d.mts +11 -0
  37. package/dist/legacy/firebase/databaseEscape.mjs +37 -0
  38. package/dist/legacy/firebase/databaseLogger.cjs +258 -0
  39. package/dist/legacy/firebase/databaseLogger.d.mts +7 -0
  40. package/dist/legacy/firebase/databaseLogger.mjs +234 -0
  41. package/dist/legacy/firebase/discord/api/addGuildMember.cjs +71 -0
  42. package/dist/legacy/firebase/discord/api/addGuildMember.d.mts +38 -0
  43. package/dist/legacy/firebase/discord/api/addGuildMember.mjs +64 -0
  44. package/dist/legacy/firebase/discord/api/getGuildWidget.cjs +47 -0
  45. package/dist/legacy/firebase/discord/api/getGuildWidget.d.mts +17 -0
  46. package/dist/legacy/firebase/discord/api/getGuildWidget.mjs +43 -0
  47. package/dist/legacy/firebase/discord/api/getToken.cjs +67 -0
  48. package/dist/legacy/firebase/discord/api/getToken.d.mts +35 -0
  49. package/dist/legacy/firebase/discord/api/getToken.mjs +63 -0
  50. package/dist/legacy/firebase/discord/api/getUser.cjs +58 -0
  51. package/dist/legacy/firebase/discord/api/getUser.d.mts +27 -0
  52. package/dist/legacy/firebase/discord/api/getUser.mjs +54 -0
  53. package/dist/legacy/firebase/discord/api/getUserConnections.cjs +57 -0
  54. package/dist/legacy/firebase/discord/api/getUserConnections.d.mts +26 -0
  55. package/dist/legacy/firebase/discord/api/getUserConnections.mjs +53 -0
  56. package/dist/legacy/firebase/discord/api/getUserGuilds.cjs +56 -0
  57. package/dist/legacy/firebase/discord/api/getUserGuilds.d.mts +25 -0
  58. package/dist/legacy/firebase/discord/api/getUserGuilds.mjs +52 -0
  59. package/dist/legacy/firebase/discord/api/index.cjs +24 -0
  60. package/dist/legacy/firebase/discord/api/index.d.mts +19 -0
  61. package/dist/legacy/firebase/discord/api/index.mjs +20 -0
  62. package/dist/legacy/firebase/discord/api/refreshToken.cjs +77 -0
  63. package/dist/legacy/firebase/discord/api/refreshToken.d.mts +45 -0
  64. package/dist/legacy/firebase/discord/api/refreshToken.mjs +73 -0
  65. package/dist/legacy/firebase/discord/api/revokeToken.cjs +61 -0
  66. package/dist/legacy/firebase/discord/api/revokeToken.d.mts +29 -0
  67. package/dist/legacy/firebase/discord/api/revokeToken.mjs +58 -0
  68. package/dist/legacy/firebase/discord/config.cjs +21 -0
  69. package/dist/legacy/firebase/discord/config.d.mts +27 -0
  70. package/dist/legacy/firebase/discord/config.mjs +17 -0
  71. package/dist/legacy/firebase/discord/firebase_redirect/index.cjs +11 -0
  72. package/dist/legacy/firebase/discord/firebase_redirect/index.d.mts +7 -0
  73. package/dist/legacy/firebase/discord/firebase_redirect/index.mjs +7 -0
  74. package/dist/legacy/firebase/discord/firebase_redirect/login.cjs +110 -0
  75. package/dist/legacy/firebase/discord/firebase_redirect/login.d.mts +4 -0
  76. package/dist/legacy/firebase/discord/firebase_redirect/login.mjs +107 -0
  77. package/dist/legacy/firebase/discord/firebase_redirect/logout.cjs +100 -0
  78. package/dist/legacy/firebase/discord/firebase_redirect/logout.d.mts +4 -0
  79. package/dist/legacy/firebase/discord/firebase_redirect/logout.mjs +97 -0
  80. package/dist/legacy/firebase/discord/get/authURLGenerator.cjs +76 -0
  81. package/dist/legacy/firebase/discord/get/authURLGenerator.d.mts +23 -0
  82. package/dist/legacy/firebase/discord/get/authURLGenerator.mjs +67 -0
  83. package/dist/legacy/firebase/discord/get/cookie-session.cjs +32 -0
  84. package/dist/legacy/firebase/discord/get/cookie-session.d.mts +20 -0
  85. package/dist/legacy/firebase/discord/get/cookie-session.mjs +28 -0
  86. package/dist/legacy/firebase/discord/get/credentials.cjs +24 -0
  87. package/dist/legacy/firebase/discord/get/credentials.d.mts +19 -0
  88. package/dist/legacy/firebase/discord/get/credentials.mjs +20 -0
  89. package/dist/legacy/firebase/discord/get/errorValidator.cjs +60 -0
  90. package/dist/legacy/firebase/discord/get/errorValidator.d.mts +28 -0
  91. package/dist/legacy/firebase/discord/get/errorValidator.mjs +55 -0
  92. package/dist/legacy/firebase/discord/get/index.cjs +17 -0
  93. package/dist/legacy/firebase/discord/get/index.d.mts +13 -0
  94. package/dist/legacy/firebase/discord/get/index.mjs +13 -0
  95. package/dist/legacy/firebase/discord/get/randomAvatar.cjs +37 -0
  96. package/dist/legacy/firebase/discord/get/randomAvatar.d.mts +22 -0
  97. package/dist/legacy/firebase/discord/get/randomAvatar.mjs +30 -0
  98. package/dist/legacy/firebase/discord/http/index.cjs +15 -0
  99. package/dist/legacy/firebase/discord/http/index.d.mts +11 -0
  100. package/dist/legacy/firebase/discord/http/index.mjs +11 -0
  101. package/dist/legacy/firebase/discord/http/login.cjs +127 -0
  102. package/dist/legacy/firebase/discord/http/login.d.mts +21 -0
  103. package/dist/legacy/firebase/discord/http/login.mjs +123 -0
  104. package/dist/legacy/firebase/discord/http/logout.cjs +155 -0
  105. package/dist/legacy/firebase/discord/http/logout.d.mts +22 -0
  106. package/dist/legacy/firebase/discord/http/logout.mjs +143 -0
  107. package/dist/legacy/firebase/discord/http/redirect.cjs +188 -0
  108. package/dist/legacy/firebase/discord/http/redirect.d.mts +24 -0
  109. package/dist/legacy/firebase/discord/http/redirect.mjs +178 -0
  110. package/dist/legacy/firebase/discord/http/refreshToken.cjs +133 -0
  111. package/dist/legacy/firebase/discord/http/refreshToken.d.mts +24 -0
  112. package/dist/legacy/firebase/discord/http/refreshToken.mjs +121 -0
  113. package/dist/legacy/firebase/discord/index.cjs +19 -0
  114. package/dist/legacy/firebase/discord/index.d.mts +15 -0
  115. package/dist/legacy/firebase/discord/index.mjs +15 -0
  116. package/dist/legacy/firebase/discord/template/cookie-session.cjs +1430 -0
  117. package/dist/legacy/firebase/discord/template/cookie-session.d.mts +22 -0
  118. package/dist/legacy/firebase/discord/template/cookie-session.mjs +1159 -0
  119. package/dist/legacy/firebase/domainRedirect.cjs +35 -0
  120. package/dist/legacy/firebase/domainRedirect.d.mts +12 -0
  121. package/dist/legacy/firebase/domainRedirect.mjs +27 -0
  122. package/dist/legacy/firebase/escape.cjs +75 -0
  123. package/dist/legacy/firebase/escape.d.mts +17 -0
  124. package/dist/legacy/firebase/escape.mjs +58 -0
  125. package/dist/legacy/firebase/getDBAsync.cjs +33 -0
  126. package/dist/legacy/firebase/getDBAsync.d.mts +10 -0
  127. package/dist/legacy/firebase/getDBAsync.mjs +26 -0
  128. package/dist/legacy/firebase/getDBData.cjs +21 -0
  129. package/dist/legacy/firebase/getDBData.d.mts +1 -0
  130. package/dist/legacy/firebase/getDBData.mjs +17 -0
  131. package/dist/legacy/firebase/getDBValue.cjs +17 -0
  132. package/dist/legacy/firebase/getDBValue.d.mts +9 -0
  133. package/dist/legacy/firebase/getDBValue.mjs +14 -0
  134. package/dist/legacy/firebase/index.cjs +261 -0
  135. package/dist/legacy/firebase/index.d.mts +51 -0
  136. package/dist/legacy/firebase/index.mjs +234 -0
  137. package/dist/legacy/firebase/isEmulator.cjs +14 -0
  138. package/dist/legacy/firebase/isEmulator.d.mts +8 -0
  139. package/dist/legacy/firebase/isEmulator.mjs +10 -0
  140. package/dist/legacy/firebase/logger.cjs +137 -0
  141. package/dist/legacy/firebase/logger.d.mts +7 -0
  142. package/dist/legacy/firebase/logger.mjs +125 -0
  143. package/dist/legacy/firebase/mySQL.cjs +26 -0
  144. package/dist/legacy/firebase/mySQL.d.mts +10 -0
  145. package/dist/legacy/firebase/mySQL.mjs +22 -0
  146. package/dist/legacy/firebase/mysqlConnector/create.cjs +119 -0
  147. package/dist/legacy/firebase/mysqlConnector/create.d.mts +36 -0
  148. package/dist/legacy/firebase/mysqlConnector/create.mjs +109 -0
  149. package/dist/legacy/firebase/mysqlConnector/index.cjs +23 -0
  150. package/dist/legacy/firebase/mysqlConnector/index.d.mts +11 -0
  151. package/dist/legacy/firebase/mysqlConnector/index.mjs +16 -0
  152. package/dist/legacy/firebase/mysqlConnector/nextPrev.cjs +75 -0
  153. package/dist/legacy/firebase/mysqlConnector/nextPrev.d.mts +31 -0
  154. package/dist/legacy/firebase/mysqlConnector/nextPrev.mjs +63 -0
  155. package/dist/legacy/firebase/mysqlConnector/pagination.cjs +91 -0
  156. package/dist/legacy/firebase/mysqlConnector/pagination.d.mts +33 -0
  157. package/dist/legacy/firebase/mysqlConnector/pagination.mjs +87 -0
  158. package/dist/legacy/firebase/mysqlConnector/sameUser.cjs +28 -0
  159. package/dist/legacy/firebase/mysqlConnector/sameUser.d.mts +12 -0
  160. package/dist/legacy/firebase/mysqlConnector/sameUser.mjs +23 -0
  161. package/dist/legacy/firebase/transactionDBAsync.cjs +33 -0
  162. package/dist/legacy/firebase/transactionDBAsync.d.mts +11 -0
  163. package/dist/legacy/firebase/transactionDBAsync.mjs +27 -0
  164. package/dist/legacy/get/countObj.cjs +24 -0
  165. package/dist/legacy/get/countObj.d.mts +11 -0
  166. package/dist/legacy/get/countObj.mjs +21 -0
  167. package/dist/legacy/get/decimalColor.cjs +60 -0
  168. package/dist/legacy/get/decimalColor.d.mts +12 -0
  169. package/dist/legacy/get/decimalColor.mjs +54 -0
  170. package/dist/legacy/get/objType.cjs +43 -0
  171. package/dist/legacy/get/objType.d.mts +19 -0
  172. package/dist/legacy/get/objType.mjs +40 -0
  173. package/dist/legacy/get/pagination.cjs +100 -0
  174. package/dist/legacy/get/pagination.d.mts +25 -0
  175. package/dist/legacy/get/pagination.mjs +91 -0
  176. package/dist/legacy/get/queryUrlByName.cjs +31 -0
  177. package/dist/legacy/get/queryUrlByName.d.mts +20 -0
  178. package/dist/legacy/get/queryUrlByName.mjs +28 -0
  179. package/dist/legacy/get/queryUrlJSON.cjs +54 -0
  180. package/dist/legacy/get/queryUrlJSON.d.mts +23 -0
  181. package/dist/legacy/get/queryUrlJSON.mjs +57 -0
  182. package/dist/legacy/get/super_string_filter.cjs +97 -0
  183. package/dist/legacy/get/super_string_filter.d.mts +25 -0
  184. package/dist/legacy/get/super_string_filter.mjs +83 -0
  185. package/dist/legacy/get/versionCheck.cjs +49 -0
  186. package/dist/legacy/get/versionCheck.d.mts +17 -0
  187. package/dist/legacy/get/versionCheck.mjs +38 -0
  188. package/dist/legacy/http/HTTP-1.0.cjs +151 -0
  189. package/dist/legacy/http/HTTP-1.0.d.mts +8 -0
  190. package/dist/legacy/http/HTTP-1.0.mjs +136 -0
  191. package/dist/legacy/http/auth.cjs +70 -0
  192. package/dist/legacy/http/auth.d.mts +41 -0
  193. package/dist/legacy/http/auth.mjs +63 -0
  194. package/dist/legacy/http/check_domain.cjs +84 -0
  195. package/dist/legacy/http/check_domain.d.mts +10 -0
  196. package/dist/legacy/http/check_domain.mjs +82 -0
  197. package/dist/legacy/http/csrfTokenAnalyze.cjs +46 -0
  198. package/dist/legacy/http/csrfTokenAnalyze.d.mts +21 -0
  199. package/dist/legacy/http/csrfTokenAnalyze.mjs +40 -0
  200. package/dist/legacy/http/domainValidator.cjs +98 -0
  201. package/dist/legacy/http/domainValidator.d.mts +30 -0
  202. package/dist/legacy/http/domainValidator.mjs +82 -0
  203. package/dist/legacy/http/errorsCallback.cjs +55 -0
  204. package/dist/legacy/http/errorsCallback.d.mts +29 -0
  205. package/dist/legacy/http/errorsCallback.mjs +48 -0
  206. package/dist/legacy/http/fetch/json.cjs +48 -0
  207. package/dist/legacy/http/fetch/json.d.mts +22 -0
  208. package/dist/legacy/http/fetch/json.mjs +41 -0
  209. package/dist/legacy/http/fetch/text.cjs +47 -0
  210. package/dist/legacy/http/fetch/text.d.mts +21 -0
  211. package/dist/legacy/http/fetch/text.mjs +40 -0
  212. package/dist/legacy/http/fileCache.cjs +79 -0
  213. package/dist/legacy/http/fileCache.d.mts +35 -0
  214. package/dist/legacy/http/fileCache.mjs +70 -0
  215. package/dist/legacy/http/getDomainURL.cjs +59 -0
  216. package/dist/legacy/http/getDomainURL.d.mts +18 -0
  217. package/dist/legacy/http/getDomainURL.mjs +54 -0
  218. package/dist/legacy/http/userIP.cjs +59 -0
  219. package/dist/legacy/http/userIP.d.mts +21 -0
  220. package/dist/legacy/http/userIP.mjs +48 -0
  221. package/dist/legacy/index.cjs +122 -0
  222. package/dist/legacy/index.d.mts +89 -0
  223. package/dist/legacy/index.mjs +92 -0
  224. package/dist/legacy/libs/arraySortPositions.cjs +30 -0
  225. package/dist/legacy/libs/arraySortPositions.d.mts +16 -0
  226. package/dist/legacy/libs/arraySortPositions.mjs +27 -0
  227. package/dist/legacy/libs/capitalize.cjs +21 -0
  228. package/dist/legacy/libs/capitalize.d.mts +13 -0
  229. package/dist/legacy/libs/capitalize.mjs +17 -0
  230. package/dist/legacy/libs/convertBytes.cjs +64 -0
  231. package/dist/legacy/libs/convertBytes.d.mts +17 -0
  232. package/dist/legacy/libs/convertBytes.mjs +55 -0
  233. package/dist/legacy/libs/custom_module_loader.cjs +82 -0
  234. package/dist/legacy/libs/custom_module_loader.d.mts +5 -0
  235. package/dist/legacy/libs/custom_module_loader.mjs +79 -0
  236. package/dist/legacy/libs/dice.cjs +35 -0
  237. package/dist/legacy/libs/dice.d.mts +5 -0
  238. package/dist/legacy/libs/dice.mjs +31 -0
  239. package/dist/legacy/libs/markdown.cjs +85 -0
  240. package/dist/legacy/libs/markdown.d.mts +75 -0
  241. package/dist/legacy/libs/markdown.mjs +78 -0
  242. package/dist/legacy/libs/percentage.cjs +22 -0
  243. package/dist/legacy/libs/percentage.d.mts +4 -0
  244. package/dist/legacy/libs/percentage.mjs +19 -0
  245. package/dist/legacy/libs/regex/getLetter.cjs +22 -0
  246. package/dist/legacy/libs/regex/getLetter.d.mts +12 -0
  247. package/dist/legacy/libs/regex/getLetter.mjs +19 -0
  248. package/dist/legacy/libs/replaceAsync.cjs +32 -0
  249. package/dist/legacy/libs/replaceAsync.d.mts +15 -0
  250. package/dist/legacy/libs/replaceAsync.mjs +25 -0
  251. package/dist/legacy/libs/rule3.cjs +58 -0
  252. package/dist/legacy/libs/rule3.d.mts +5 -0
  253. package/dist/legacy/libs/rule3.mjs +54 -0
  254. package/dist/legacy/libs/userLevel.cjs +134 -0
  255. package/dist/legacy/libs/userLevel.d.mts +69 -0
  256. package/dist/legacy/libs/userLevel.mjs +123 -0
  257. package/dist/legacy/momentjs/getAge.cjs +28 -0
  258. package/dist/legacy/momentjs/getAge.d.mts +8 -0
  259. package/dist/legacy/momentjs/getAge.mjs +22 -0
  260. package/dist/legacy/momentjs/index.cjs +9 -0
  261. package/dist/legacy/momentjs/index.d.mts +3 -0
  262. package/dist/legacy/momentjs/index.mjs +3 -0
  263. package/dist/legacy/momentjs/timeDuration.cjs +29 -0
  264. package/dist/legacy/momentjs/timeDuration.d.mts +9 -0
  265. package/dist/legacy/momentjs/timeDuration.mjs +23 -0
  266. package/dist/legacy/socket.io/antiFlood/index.cjs +9 -0
  267. package/dist/legacy/socket.io/antiFlood/index.d.mts +3 -0
  268. package/dist/legacy/socket.io/antiFlood/index.mjs +3 -0
  269. package/dist/legacy/socket.io/antiFlood/install.cjs +32 -0
  270. package/dist/legacy/socket.io/antiFlood/install.d.mts +14 -0
  271. package/dist/legacy/socket.io/antiFlood/install.mjs +27 -0
  272. package/dist/legacy/socket.io/antiFlood/verify.cjs +87 -0
  273. package/dist/legacy/socket.io/antiFlood/verify.d.mts +15 -0
  274. package/dist/legacy/socket.io/antiFlood/verify.mjs +73 -0
  275. package/dist/legacy/socket.io/cookie-session.cjs +25 -0
  276. package/dist/legacy/socket.io/cookie-session.d.mts +9 -0
  277. package/dist/legacy/socket.io/cookie-session.mjs +20 -0
  278. package/dist/legacy/socket.io/discord.cjs +61 -0
  279. package/dist/legacy/socket.io/discord.d.mts +10 -0
  280. package/dist/legacy/socket.io/discord.mjs +52 -0
  281. package/dist/legacy/socket.io/index.cjs +13 -0
  282. package/dist/legacy/socket.io/index.d.mts +9 -0
  283. package/dist/legacy/socket.io/index.mjs +9 -0
  284. package/dist/v1/basics/array.cjs +31 -0
  285. package/dist/v1/basics/array.d.mts +10 -0
  286. package/dist/v1/basics/array.mjs +22 -0
  287. package/dist/v1/basics/clock.cjs +187 -0
  288. package/dist/v1/basics/clock.d.mts +37 -0
  289. package/dist/v1/basics/clock.mjs +152 -0
  290. package/dist/v1/basics/objFilter.cjs +55 -0
  291. package/dist/v1/basics/objFilter.d.mts +27 -0
  292. package/dist/v1/basics/objFilter.mjs +52 -0
  293. package/dist/v1/basics/simpleMath.cjs +88 -0
  294. package/dist/v1/basics/simpleMath.d.mts +54 -0
  295. package/dist/v1/basics/simpleMath.mjs +75 -0
  296. package/dist/v1/basics/text.cjs +34 -0
  297. package/dist/v1/basics/text.d.mts +20 -0
  298. package/dist/v1/basics/text.mjs +25 -0
  299. package/dist/v1/index.cjs +26 -0
  300. package/dist/v1/index.d.mts +15 -0
  301. package/dist/v1/index.mjs +8 -0
  302. package/package.json +72 -0
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ var _ = require('lodash');
4
+ var _default = require('../../../crypto/default.cjs');
5
+ var objType = require('../../../get/objType.cjs');
6
+ var decrypt = require('../../../crypto/decrypt.cjs');
7
+ var getToken = require('../api/getToken.cjs');
8
+ var getUser = require('../api/getUser.cjs');
9
+
10
+ /**
11
+ * Handles the redirection logic for the OAuth flow, including state validation, token retrieval, and user session management.
12
+ * This function is used for handling Discord OAuth redirects and session creation or restoration.
13
+ *
14
+ * @param {Object} req - The request object from the client, which contains query parameters such as `state`, `code`, and `csrfToken`.
15
+ * @param {Object} cfg - The configuration object containing settings like `crypto`, `auth`, and `discordScope`.
16
+ * @param {boolean} existSession - Indicates if the user already has an active session.
17
+ *
18
+ * @returns {Promise<Object>} - A promise that resolves with an object containing the redirection URL and session information.
19
+ * If a new session is created, it also includes user data and the token request.
20
+ *
21
+ * @throws {Object} - Throws an error with a `code` and `message` if any validation fails (e.g., missing token, invalid state).
22
+ *
23
+ * @example
24
+ * // Example usage of redirect function
25
+ * redirect(req, cfg, true)
26
+ * .then((result) => {
27
+ * console.log('Redirection successful', result);
28
+ * })
29
+ * .catch((err) => {
30
+ * console.error('Error during redirect', err);
31
+ * });
32
+ */
33
+ async function redirect(req, cfg, existSession) {
34
+ return new Promise(function (resolve, reject) {
35
+ // Detect Config
36
+ if (objType(cfg, 'object')) {
37
+ // Create Settings
38
+ const tinyCrypto = _.defaultsDeep({}, cfg.crypto, _default);
39
+
40
+ // Detect Config
41
+ if (objType(tinyCrypto, 'object')) {
42
+ // Create Settings
43
+ const tinyCfg = _.defaultsDeep({}, cfg.auth, {
44
+ redirect: 'http://localhost/redirect',
45
+ discordScope: [],
46
+ client_id: '',
47
+ client_secret: '',
48
+ first_get_user: true,
49
+ });
50
+
51
+ // Check Type
52
+ if (req.query.state.type === 'login_command') {
53
+ tinyCfg.discordScope = ['applications.commands', 'applications.commands.update'];
54
+ }
55
+
56
+ // Detect Query
57
+ if (objType(req.query, 'object')) {
58
+ // Get State
59
+ if (typeof req.query.state === 'string') {
60
+ // Crypto
61
+ req.query.state = decrypt.decrypt(tinyCrypto, req.query.state);
62
+
63
+ // Convert
64
+ try {
65
+ req.query.state = JSON.parse(req.query.state);
66
+ } catch (err) {
67
+ req.query.state = {};
68
+ }
69
+ } else {
70
+ req.query.state = {};
71
+ }
72
+
73
+ // Detect State
74
+ if (objType(req.query.state, 'object')) {
75
+ // Check Session
76
+ if (
77
+ typeof tinyCfg.csrfToken !== 'string' ||
78
+ tinyCfg.csrfToken.length < 1 ||
79
+ (typeof req.query.state.csrfToken === 'string' &&
80
+ req.query.state.csrfToken === tinyCfg.csrfToken)
81
+ ) {
82
+ // Prepare Resolve Data
83
+ const resolveData = { newSession: false, state: req.query.state };
84
+
85
+ // Final Redirect
86
+ resolveData.redirect = '/';
87
+ if (typeof req.query.state.redirect === 'string') {
88
+ resolveData.redirect += req.query.state.redirect;
89
+ }
90
+
91
+ // Exist Session
92
+ if (!existSession || req.query.state.type === 'webhook') {
93
+ if (
94
+ (typeof req.query.code === 'string' && req.query.code.length > 0) ||
95
+ (typeof req.query.code === 'number' && !isNaN(req.query.code))
96
+ ) {
97
+ // Discord Token
98
+ getToken({
99
+ client_id: tinyCfg.client_id,
100
+ client_secret: tinyCfg.client_secret,
101
+ code: req.query.code,
102
+ redirect_uri: tinyCfg.redirect,
103
+ scope: tinyCfg.discordScope.join(' '),
104
+ })
105
+ // Success
106
+ .then((json) => {
107
+ // Valid Json Data
108
+ if (objType(json, 'object')) {
109
+ // Check Token
110
+ if (
111
+ typeof json.access_token === 'string' ||
112
+ typeof json.access_token === 'number'
113
+ ) {
114
+ // Token
115
+ resolveData.tokenRequest = json;
116
+
117
+ // Login Type
118
+ if (req.query.state.type === 'login') {
119
+ // Check New Session
120
+ resolveData.newSession = true;
121
+
122
+ // Get User Data
123
+ if (tinyCfg.first_get_user) {
124
+ // Get User
125
+ getUser(json.access_token)
126
+ // Get User
127
+ .then((dsUser) => {
128
+ // Validate Data
129
+ if (objType(dsUser, 'object')) {
130
+ resolveData.user = dsUser;
131
+ resolve(resolveData);
132
+ }
133
+
134
+ // Nope
135
+ else reject({ code: 500, message: 'Invalid JSON User Data!' });
136
+ })
137
+ // Fail
138
+ .catch(reject);
139
+ }
140
+
141
+ // Nope
142
+ else {
143
+ // Return Result
144
+ resolve(resolveData);
145
+ }
146
+ }
147
+
148
+ // Webhook Type
149
+ else if (req.query.state.type === 'webhook') {
150
+ // Guild ID
151
+ if (typeof req.query.guild_id === 'string')
152
+ resolveData.guild_id = req.query.guild_id;
153
+
154
+ // Return Result
155
+ resolve(resolveData);
156
+ }
157
+
158
+ // Unknown
159
+ else reject({ code: 400, message: 'Invalid State Type!' });
160
+ }
161
+ // Nope
162
+ else reject({ code: 500, message: 'Invalid User Token Data!' });
163
+ }
164
+ // Nope
165
+ else reject({ code: 500, message: 'Invalid JSON Token Data!' });
166
+ })
167
+
168
+ // Fail
169
+ .catch(reject);
170
+ } else reject({ code: 401, message: 'Invalid Discord Code!' });
171
+ } else resolve({ newSession: false });
172
+ } else reject({ code: 401, message: 'Incorrect csrfToken!' });
173
+ }
174
+ // Nope
175
+ else reject({ code: 401, message: 'Invalid State Query!' });
176
+ }
177
+ // Nope
178
+ else reject({ code: 401, message: 'Invalid Query URL!' });
179
+ }
180
+ // Nope
181
+ else reject({ code: 500, message: 'Invalid Crypto Values!' });
182
+ }
183
+ // Nope
184
+ else reject({ code: 500, message: 'Invalid Config Values!' });
185
+ });
186
+ }
187
+
188
+ module.exports = redirect;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Handles the redirection logic for the OAuth flow, including state validation, token retrieval, and user session management.
3
+ * This function is used for handling Discord OAuth redirects and session creation or restoration.
4
+ *
5
+ * @param {Object} req - The request object from the client, which contains query parameters such as `state`, `code`, and `csrfToken`.
6
+ * @param {Object} cfg - The configuration object containing settings like `crypto`, `auth`, and `discordScope`.
7
+ * @param {boolean} existSession - Indicates if the user already has an active session.
8
+ *
9
+ * @returns {Promise<Object>} - A promise that resolves with an object containing the redirection URL and session information.
10
+ * If a new session is created, it also includes user data and the token request.
11
+ *
12
+ * @throws {Object} - Throws an error with a `code` and `message` if any validation fails (e.g., missing token, invalid state).
13
+ *
14
+ * @example
15
+ * // Example usage of redirect function
16
+ * redirect(req, cfg, true)
17
+ * .then((result) => {
18
+ * console.log('Redirection successful', result);
19
+ * })
20
+ * .catch((err) => {
21
+ * console.error('Error during redirect', err);
22
+ * });
23
+ */
24
+ export default function redirect(req: Object, cfg: Object, existSession: boolean): Promise<Object>;
@@ -0,0 +1,178 @@
1
+ import _ from 'lodash';
2
+ import defaultCrypto from '../../../crypto/default.mjs';
3
+ import objType from '../../../get/objType.mjs';
4
+ import { decrypt } from '../../../crypto/decrypt.mjs';
5
+ import getToken from '../api/getToken.mjs';
6
+ import getUser from '../api/getUser.mjs';
7
+ /**
8
+ * Handles the redirection logic for the OAuth flow, including state validation, token retrieval, and user session management.
9
+ * This function is used for handling Discord OAuth redirects and session creation or restoration.
10
+ *
11
+ * @param {Object} req - The request object from the client, which contains query parameters such as `state`, `code`, and `csrfToken`.
12
+ * @param {Object} cfg - The configuration object containing settings like `crypto`, `auth`, and `discordScope`.
13
+ * @param {boolean} existSession - Indicates if the user already has an active session.
14
+ *
15
+ * @returns {Promise<Object>} - A promise that resolves with an object containing the redirection URL and session information.
16
+ * If a new session is created, it also includes user data and the token request.
17
+ *
18
+ * @throws {Object} - Throws an error with a `code` and `message` if any validation fails (e.g., missing token, invalid state).
19
+ *
20
+ * @example
21
+ * // Example usage of redirect function
22
+ * redirect(req, cfg, true)
23
+ * .then((result) => {
24
+ * console.log('Redirection successful', result);
25
+ * })
26
+ * .catch((err) => {
27
+ * console.error('Error during redirect', err);
28
+ * });
29
+ */
30
+ export default async function redirect(req, cfg, existSession) {
31
+ return new Promise(function (resolve, reject) {
32
+ // Detect Config
33
+ if (objType(cfg, 'object')) {
34
+ // Create Settings
35
+ const tinyCrypto = _.defaultsDeep({}, cfg.crypto, defaultCrypto);
36
+ // Detect Config
37
+ if (objType(tinyCrypto, 'object')) {
38
+ // Create Settings
39
+ const tinyCfg = _.defaultsDeep({}, cfg.auth, {
40
+ redirect: 'http://localhost/redirect',
41
+ discordScope: [],
42
+ client_id: '',
43
+ client_secret: '',
44
+ first_get_user: true,
45
+ });
46
+ // Check Type
47
+ if (req.query.state.type === 'login_command') {
48
+ tinyCfg.discordScope = ['applications.commands', 'applications.commands.update'];
49
+ }
50
+ // Detect Query
51
+ if (objType(req.query, 'object')) {
52
+ // Get State
53
+ if (typeof req.query.state === 'string') {
54
+ // Crypto
55
+ req.query.state = decrypt(tinyCrypto, req.query.state);
56
+ // Convert
57
+ try {
58
+ req.query.state = JSON.parse(req.query.state);
59
+ }
60
+ catch (err) {
61
+ req.query.state = {};
62
+ }
63
+ }
64
+ else {
65
+ req.query.state = {};
66
+ }
67
+ // Detect State
68
+ if (objType(req.query.state, 'object')) {
69
+ // Check Session
70
+ if (typeof tinyCfg.csrfToken !== 'string' ||
71
+ tinyCfg.csrfToken.length < 1 ||
72
+ (typeof req.query.state.csrfToken === 'string' &&
73
+ req.query.state.csrfToken === tinyCfg.csrfToken)) {
74
+ // Prepare Resolve Data
75
+ const resolveData = { newSession: false, state: req.query.state };
76
+ // Final Redirect
77
+ resolveData.redirect = '/';
78
+ if (typeof req.query.state.redirect === 'string') {
79
+ resolveData.redirect += req.query.state.redirect;
80
+ }
81
+ // Exist Session
82
+ if (!existSession || req.query.state.type === 'webhook') {
83
+ if ((typeof req.query.code === 'string' && req.query.code.length > 0) ||
84
+ (typeof req.query.code === 'number' && !isNaN(req.query.code))) {
85
+ // Discord Token
86
+ getToken({
87
+ client_id: tinyCfg.client_id,
88
+ client_secret: tinyCfg.client_secret,
89
+ code: req.query.code,
90
+ redirect_uri: tinyCfg.redirect,
91
+ scope: tinyCfg.discordScope.join(' '),
92
+ })
93
+ // Success
94
+ .then((json) => {
95
+ // Valid Json Data
96
+ if (objType(json, 'object')) {
97
+ // Check Token
98
+ if (typeof json.access_token === 'string' ||
99
+ typeof json.access_token === 'number') {
100
+ // Token
101
+ resolveData.tokenRequest = json;
102
+ // Login Type
103
+ if (req.query.state.type === 'login') {
104
+ // Check New Session
105
+ resolveData.newSession = true;
106
+ // Get User Data
107
+ if (tinyCfg.first_get_user) {
108
+ // Get User
109
+ getUser(json.access_token)
110
+ // Get User
111
+ .then((dsUser) => {
112
+ // Validate Data
113
+ if (objType(dsUser, 'object')) {
114
+ resolveData.user = dsUser;
115
+ resolve(resolveData);
116
+ }
117
+ // Nope
118
+ else
119
+ reject({ code: 500, message: 'Invalid JSON User Data!' });
120
+ })
121
+ // Fail
122
+ .catch(reject);
123
+ }
124
+ // Nope
125
+ else {
126
+ // Return Result
127
+ resolve(resolveData);
128
+ }
129
+ }
130
+ // Webhook Type
131
+ else if (req.query.state.type === 'webhook') {
132
+ // Guild ID
133
+ if (typeof req.query.guild_id === 'string')
134
+ resolveData.guild_id = req.query.guild_id;
135
+ // Return Result
136
+ resolve(resolveData);
137
+ }
138
+ // Unknown
139
+ else
140
+ reject({ code: 400, message: 'Invalid State Type!' });
141
+ }
142
+ // Nope
143
+ else
144
+ reject({ code: 500, message: 'Invalid User Token Data!' });
145
+ }
146
+ // Nope
147
+ else
148
+ reject({ code: 500, message: 'Invalid JSON Token Data!' });
149
+ })
150
+ // Fail
151
+ .catch(reject);
152
+ }
153
+ else
154
+ reject({ code: 401, message: 'Invalid Discord Code!' });
155
+ }
156
+ else
157
+ resolve({ newSession: false });
158
+ }
159
+ else
160
+ reject({ code: 401, message: 'Incorrect csrfToken!' });
161
+ }
162
+ // Nope
163
+ else
164
+ reject({ code: 401, message: 'Invalid State Query!' });
165
+ }
166
+ // Nope
167
+ else
168
+ reject({ code: 401, message: 'Invalid Query URL!' });
169
+ }
170
+ // Nope
171
+ else
172
+ reject({ code: 500, message: 'Invalid Crypto Values!' });
173
+ }
174
+ // Nope
175
+ else
176
+ reject({ code: 500, message: 'Invalid Config Values!' });
177
+ });
178
+ }
@@ -0,0 +1,133 @@
1
+ 'use strict';
2
+
3
+ var _ = require('lodash');
4
+ var objType = require('../../../get/objType.cjs');
5
+ var refreshToken$1 = require('../api/refreshToken.cjs');
6
+
7
+ /**
8
+ * Refreshes the Discord token using the provided refresh token.
9
+ *
10
+ * @async
11
+ * @function refreshToken
12
+ * @param {Object} req - The request object containing query parameters and csrfToken.
13
+ * @param {Object} cfg - The configuration object containing auth and state configurations.
14
+ * @param {boolean} existSession - A flag indicating if the user session exists.
15
+ *
16
+ * @returns {Promise<Object>} Resolves to an object containing the status of the refresh and the new token data, or rejects with an error object.
17
+ *
18
+ * @throws {Object} Rejects with an error object containing the following properties:
19
+ * - `code` {number} The error code (e.g., 401 for invalid CSRF token, 500 for server errors).
20
+ * - `message` {string} The error message describing the issue.
21
+ *
22
+ * @example
23
+ * const result = await refreshToken(req, cfg, existSession);
24
+ * if (result.refreshed) {
25
+ * console.log('Token refreshed:', result.tokenRequest);
26
+ * } else {
27
+ * console.log('Token refresh failed');
28
+ * }
29
+ */
30
+ async function refreshToken(req, cfg, existSession) {
31
+ return new Promise(function (resolve, reject) {
32
+ // Detect Config
33
+ if (objType(cfg, 'object')) {
34
+ // Create Settings
35
+ const tinyCfg = _.defaultsDeep({}, cfg.auth, {
36
+ redirect: 'http://localhost/redirect',
37
+ discordScope: [],
38
+ client_id: '',
39
+ client_secret: '',
40
+ });
41
+
42
+ // Check Session
43
+ if (
44
+ typeof tinyCfg.csrfToken !== 'string' ||
45
+ tinyCfg.csrfToken.length < 1 ||
46
+ (typeof req.csrfToken.now.value === 'string' &&
47
+ req.csrfToken.now.value === tinyCfg.csrfToken)
48
+ ) {
49
+ // Prepare more settings
50
+ const tinyQuery = _.defaultsDeep({}, cfg.auth, {
51
+ redirect: 'redirect',
52
+ });
53
+
54
+ const tinyState = _.defaultsDeep({}, cfg.state, {
55
+ redirect: '',
56
+ });
57
+
58
+ // Result
59
+ const result = { refreshed: false };
60
+
61
+ // Prepare Final Redirect
62
+ result.redirect = '/';
63
+
64
+ // Redirect
65
+ if (typeof tinyState.redirect === 'string' && tinyState.redirect.length > 0) {
66
+ if (tinyState.redirect.startsWith('/')) result.redirect = tinyState.redirect.substring(1);
67
+ else result.redirect = tinyState.redirect;
68
+ }
69
+
70
+ // Get Query
71
+ else if (
72
+ objType(tinyQuery, 'object') &&
73
+ objType(req.query, 'object') &&
74
+ typeof tinyQuery.redirect === 'string' &&
75
+ typeof req.query[tinyQuery.redirect] === 'string'
76
+ ) {
77
+ if (req.query[tinyQuery.redirect].startsWith('/'))
78
+ result.redirect = req.query[tinyQuery.redirect].substring(1);
79
+ else result.redirect = req.query[tinyQuery.redirect];
80
+ }
81
+
82
+ // Exist Session
83
+ if (existSession) {
84
+ if (
85
+ (typeof cfg.refresh_token === 'string' && cfg.refresh_token.length > 0) ||
86
+ (typeof cfg.refresh_token === 'number' && !isNaN(cfg.refresh_token))
87
+ ) {
88
+ // Discord Token
89
+ refreshToken$1({
90
+ client_id: tinyCfg.client_id,
91
+ client_secret: tinyCfg.client_secret,
92
+ refresh_token: cfg.refresh_token,
93
+ redirect_uri: tinyCfg.redirect,
94
+ scope: tinyCfg.discordScope.join(' '),
95
+ })
96
+ // Success
97
+ .then((json) => {
98
+ // Valid Json Data
99
+ if (objType(json, 'object')) {
100
+ // Check Token
101
+ if (
102
+ typeof json.access_token === 'string' ||
103
+ typeof json.access_token === 'number'
104
+ ) {
105
+ // Token
106
+ result.refreshed = true;
107
+ result.tokenRequest = json;
108
+
109
+ // Return Result
110
+ resolve(result);
111
+ }
112
+ // Nope
113
+ else reject({ code: 500, message: 'Invalid User Token Data!' });
114
+ }
115
+ // Nope
116
+ else reject({ code: 500, message: 'Invalid JSON Token Data!' });
117
+ })
118
+ // Fail
119
+ .catch(reject);
120
+ }
121
+
122
+ // Nope
123
+ else reject({ code: 401, message: 'Invalid Refresh Token Data!' });
124
+ } else resolve(result);
125
+ } else reject({ code: 401, message: 'Incorrect csrfToken!' });
126
+ }
127
+
128
+ // Nope
129
+ else reject({ code: 500, message: 'Invalid Config Values!' });
130
+ });
131
+ }
132
+
133
+ module.exports = refreshToken;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Refreshes the Discord token using the provided refresh token.
3
+ *
4
+ * @async
5
+ * @function refreshToken
6
+ * @param {Object} req - The request object containing query parameters and csrfToken.
7
+ * @param {Object} cfg - The configuration object containing auth and state configurations.
8
+ * @param {boolean} existSession - A flag indicating if the user session exists.
9
+ *
10
+ * @returns {Promise<Object>} Resolves to an object containing the status of the refresh and the new token data, or rejects with an error object.
11
+ *
12
+ * @throws {Object} Rejects with an error object containing the following properties:
13
+ * - `code` {number} The error code (e.g., 401 for invalid CSRF token, 500 for server errors).
14
+ * - `message` {string} The error message describing the issue.
15
+ *
16
+ * @example
17
+ * const result = await refreshToken(req, cfg, existSession);
18
+ * if (result.refreshed) {
19
+ * console.log('Token refreshed:', result.tokenRequest);
20
+ * } else {
21
+ * console.log('Token refresh failed');
22
+ * }
23
+ */
24
+ export default function refreshToken(req: Object, cfg: Object, existSession: boolean): Promise<Object>;
@@ -0,0 +1,121 @@
1
+ import _ from 'lodash';
2
+ import objType from '../../../get/objType.mjs';
3
+ import refreshTokenApi from '../api/refreshToken.mjs';
4
+ /**
5
+ * Refreshes the Discord token using the provided refresh token.
6
+ *
7
+ * @async
8
+ * @function refreshToken
9
+ * @param {Object} req - The request object containing query parameters and csrfToken.
10
+ * @param {Object} cfg - The configuration object containing auth and state configurations.
11
+ * @param {boolean} existSession - A flag indicating if the user session exists.
12
+ *
13
+ * @returns {Promise<Object>} Resolves to an object containing the status of the refresh and the new token data, or rejects with an error object.
14
+ *
15
+ * @throws {Object} Rejects with an error object containing the following properties:
16
+ * - `code` {number} The error code (e.g., 401 for invalid CSRF token, 500 for server errors).
17
+ * - `message` {string} The error message describing the issue.
18
+ *
19
+ * @example
20
+ * const result = await refreshToken(req, cfg, existSession);
21
+ * if (result.refreshed) {
22
+ * console.log('Token refreshed:', result.tokenRequest);
23
+ * } else {
24
+ * console.log('Token refresh failed');
25
+ * }
26
+ */
27
+ export default async function refreshToken(req, cfg, existSession) {
28
+ return new Promise(function (resolve, reject) {
29
+ // Detect Config
30
+ if (objType(cfg, 'object')) {
31
+ // Create Settings
32
+ const tinyCfg = _.defaultsDeep({}, cfg.auth, {
33
+ redirect: 'http://localhost/redirect',
34
+ discordScope: [],
35
+ client_id: '',
36
+ client_secret: '',
37
+ });
38
+ // Check Session
39
+ if (typeof tinyCfg.csrfToken !== 'string' ||
40
+ tinyCfg.csrfToken.length < 1 ||
41
+ (typeof req.csrfToken.now.value === 'string' &&
42
+ req.csrfToken.now.value === tinyCfg.csrfToken)) {
43
+ // Prepare more settings
44
+ const tinyQuery = _.defaultsDeep({}, cfg.auth, {
45
+ redirect: 'redirect',
46
+ });
47
+ const tinyState = _.defaultsDeep({}, cfg.state, {
48
+ redirect: '',
49
+ });
50
+ // Result
51
+ const result = { refreshed: false };
52
+ // Prepare Final Redirect
53
+ result.redirect = '/';
54
+ // Redirect
55
+ if (typeof tinyState.redirect === 'string' && tinyState.redirect.length > 0) {
56
+ if (tinyState.redirect.startsWith('/'))
57
+ result.redirect = tinyState.redirect.substring(1);
58
+ else
59
+ result.redirect = tinyState.redirect;
60
+ }
61
+ // Get Query
62
+ else if (objType(tinyQuery, 'object') &&
63
+ objType(req.query, 'object') &&
64
+ typeof tinyQuery.redirect === 'string' &&
65
+ typeof req.query[tinyQuery.redirect] === 'string') {
66
+ if (req.query[tinyQuery.redirect].startsWith('/'))
67
+ result.redirect = req.query[tinyQuery.redirect].substring(1);
68
+ else
69
+ result.redirect = req.query[tinyQuery.redirect];
70
+ }
71
+ // Exist Session
72
+ if (existSession) {
73
+ if ((typeof cfg.refresh_token === 'string' && cfg.refresh_token.length > 0) ||
74
+ (typeof cfg.refresh_token === 'number' && !isNaN(cfg.refresh_token))) {
75
+ // Discord Token
76
+ refreshTokenApi({
77
+ client_id: tinyCfg.client_id,
78
+ client_secret: tinyCfg.client_secret,
79
+ refresh_token: cfg.refresh_token,
80
+ redirect_uri: tinyCfg.redirect,
81
+ scope: tinyCfg.discordScope.join(' '),
82
+ })
83
+ // Success
84
+ .then((json) => {
85
+ // Valid Json Data
86
+ if (objType(json, 'object')) {
87
+ // Check Token
88
+ if (typeof json.access_token === 'string' ||
89
+ typeof json.access_token === 'number') {
90
+ // Token
91
+ result.refreshed = true;
92
+ result.tokenRequest = json;
93
+ // Return Result
94
+ resolve(result);
95
+ }
96
+ // Nope
97
+ else
98
+ reject({ code: 500, message: 'Invalid User Token Data!' });
99
+ }
100
+ // Nope
101
+ else
102
+ reject({ code: 500, message: 'Invalid JSON Token Data!' });
103
+ })
104
+ // Fail
105
+ .catch(reject);
106
+ }
107
+ // Nope
108
+ else
109
+ reject({ code: 401, message: 'Invalid Refresh Token Data!' });
110
+ }
111
+ else
112
+ resolve(result);
113
+ }
114
+ else
115
+ reject({ code: 401, message: 'Incorrect csrfToken!' });
116
+ }
117
+ // Nope
118
+ else
119
+ reject({ code: 500, message: 'Invalid Config Values!' });
120
+ });
121
+ }