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,1430 @@
1
+ 'use strict';
2
+
3
+ var hash = require('object-hash');
4
+ var moment = require('moment-timezone');
5
+ var _ = require('lodash');
6
+ var clone = require('clone');
7
+ var _default = require('../../../crypto/default.cjs');
8
+ var objType = require('../../../get/objType.cjs');
9
+ var config = require('../config.cjs');
10
+ var logger = require('../../logger.cjs');
11
+ var getUser = require('../api/getUser.cjs');
12
+ var userIP = require('../../../http/userIP.cjs');
13
+ var getDomainURL = require('../../../http/getDomainURL.cjs');
14
+ var login = require('../firebase_redirect/login.cjs');
15
+ var logout = require('../firebase_redirect/logout.cjs');
16
+ var addGuildMember = require('../api/addGuildMember.cjs');
17
+ var getGuildWidget = require('../api/getGuildWidget.cjs');
18
+ var getUserConnections = require('../api/getUserConnections.cjs');
19
+ var index = require('../index.cjs');
20
+ var getUserGuilds = require('../api/getUserGuilds.cjs');
21
+ var cookieSession$1 = require('../get/cookie-session.cjs');
22
+ var cookieSession$2 = require('../../cookieSession.cjs');
23
+ var revokeToken = require('../api/revokeToken.cjs');
24
+
25
+ /**
26
+ * Middleware function to handle Discord and Firebase sessions, including login, logout,
27
+ * and redirection functionalities.
28
+ *
29
+ * @param {Object} app - The Express.js app object.
30
+ * @param {Object} cfg - The configuration object for the middleware, including Firebase settings.
31
+ * @throws {Error} Throws an error if the configuration object is invalid.
32
+ */
33
+ function cookieSession(app, cfg) {
34
+ // Config
35
+ if (objType(cfg, 'object')) {
36
+ // Validator Session Discord and Firebase
37
+ const sessionFirebaseDiscordValidator = function (req) {
38
+ return (
39
+ req.firebase_session.uid ===
40
+ `${discordSession.varsTemplate.uid}${tinyAuth.client_id}_${req.discord_session.user.id}`
41
+ );
42
+ };
43
+
44
+ // Prepare Base
45
+ app.use((req, res, next) => {
46
+ // Add Discord Session
47
+ if (!req.discord_session) req.discord_session = {};
48
+
49
+ // Complete
50
+ next();
51
+ });
52
+
53
+ // Logger
54
+ const logger$1 = logger;
55
+
56
+ // Get Discord User
57
+ const getDiscordUser = getUser;
58
+
59
+ // Get User IP
60
+ const getUserIP = userIP;
61
+
62
+ // Discord session
63
+ const discordSession = {};
64
+
65
+ // Firebase Auth
66
+ discordSession.firebaseAuth = {};
67
+
68
+ // Redirect
69
+ discordSession.firebaseAuth.redirect = {
70
+ template: function (type, req, res, redirect_url, csrfToken, firebase_auth) {
71
+ // Get Domain
72
+ const tinyDomain = getDomainURL(req, cfg.port);
73
+
74
+ // Fix URL
75
+ if (typeof redirect_url !== 'string') redirect_url = '';
76
+ else if (redirect_url.startsWith('/')) redirect_url = redirect_url.substring(1);
77
+
78
+ // New URL
79
+ redirect_url = `${tinyURLPath[type]}?redirect=${encodeURIComponent(redirect_url)}`;
80
+ if (typeof csrfToken === 'string') redirect_url += `&key=${csrfToken}`;
81
+
82
+ if (typeof firebase_auth === 'string') redirect_url += `&token=${firebase_auth}`;
83
+
84
+ // Complete
85
+ res.redirect(tinyDomain + redirect_url);
86
+ },
87
+
88
+ // Login
89
+ login: function (req, res, redirect_url, csrfToken) {
90
+ return discordSession.firebaseAuth.redirect.template(
91
+ 'firebaseLogin',
92
+ req,
93
+ res,
94
+ redirect_url,
95
+ csrfToken,
96
+ );
97
+ },
98
+
99
+ // Logout
100
+ logout: function (req, res, redirect_url, csrfToken, firebase_auth) {
101
+ return discordSession.firebaseAuth.redirect.template(
102
+ 'firebaseLogout',
103
+ req,
104
+ res,
105
+ redirect_url,
106
+ csrfToken,
107
+ firebase_auth,
108
+ );
109
+ },
110
+ };
111
+
112
+ // Variables
113
+ discordSession.varsTemplate = {
114
+ uid: 'discord_user_id_',
115
+ avatarURL: 'https://cdn.discordapp.com/avatars/',
116
+ };
117
+
118
+ // Get Firebase UID
119
+ discordSession.uidGenerator = function (userID) {
120
+ return `${discordSession.varsTemplate.uid}${tinyAuth.client_id}_${encodeURIComponent(userID)}`;
121
+ };
122
+
123
+ // Session Set
124
+ discordSession.set = function (req, tokenRequest, extra_text = '') {
125
+ // Session Items
126
+ req.session[sessionVars.access_token + extra_text] = tokenRequest.access_token;
127
+ req.session[sessionVars.refresh_token + extra_text] = tokenRequest.refresh_token;
128
+ req.session[sessionVars.token_type + extra_text] = tokenRequest.token_type;
129
+ req.session[sessionVars.scope + extra_text] = tokenRequest.scope;
130
+
131
+ // Expire In
132
+ req.session[sessionVars.token_expires_in + extra_text] = moment
133
+ .tz('Universal')
134
+ .add(tokenRequest.expires_in, 'second')
135
+ .format();
136
+ };
137
+
138
+ discordSession.get = function (req) {
139
+ return {
140
+ access_token: req.session[sessionVars.access_token],
141
+ refresh_token: req.session[sessionVars.refresh_token],
142
+ token_type: req.session[sessionVars.token_type],
143
+ scope: req.session[sessionVars.scope],
144
+ token_expires_in: req.session[sessionVars.token_expires_in],
145
+ };
146
+ };
147
+
148
+ // Prepare Firebase Items
149
+ const prepare_fire_auth_discord = function (req, user) {
150
+ // Discord Session
151
+ const dsSession = discordSession.get(req);
152
+ const preparedsSession = {};
153
+
154
+ // Scope
155
+ if (typeof dsSession.scope === 'string') preparedsSession.scope = dsSession.scope.split(' ');
156
+ else preparedsSession.scope = dsSession.scope;
157
+
158
+ // User IP
159
+ if (tinyCfg.ipVerification) {
160
+ const requestIpAddress = getUserIP(req, { isFirebase: true });
161
+ preparedsSession.user_ip = requestIpAddress.value;
162
+ preparedsSession.user_ip_type = requestIpAddress.type;
163
+ }
164
+
165
+ // Discord
166
+ preparedsSession.discord = user;
167
+
168
+ // Complete
169
+ return preparedsSession;
170
+ };
171
+
172
+ // Firebase Discord Auth
173
+ discordSession.firebase = {};
174
+
175
+ discordSession.firebase.createAccountData = function (access_token, userData, oldData) {
176
+ // Prepare New User Data
177
+ const newUserData = {};
178
+ const existOLD = objType(oldData, 'object');
179
+
180
+ // Password
181
+ if (typeof access_token === 'string' && access_token.length > 0)
182
+ newUserData.password = access_token;
183
+
184
+ // Main Data
185
+ const newUsername = userData.username + '#' + userData.discriminator;
186
+ const newAvatar = `${discordSession.varsTemplate.avatarURL}${userData.id}/${userData.avatar}`;
187
+
188
+ // Basic Profile
189
+ if (!existOLD || newUsername !== oldData.displayNama) newUserData.displayName = newUsername;
190
+
191
+ if (!existOLD || newAvatar !== oldData.photoURL) newUserData.photoURL = newAvatar;
192
+
193
+ // Insert User Email
194
+ if (typeof userData.email === 'string') {
195
+ if (!existOLD || userData.email !== oldData.email) {
196
+ newUserData.email = userData.email;
197
+ newUserData.emailVerified = userData.verified;
198
+ }
199
+ }
200
+
201
+ // Complete
202
+ return newUserData;
203
+ };
204
+
205
+ discordSession.firebase.updateUser = function (access_token, user, oldUser) {
206
+ return new Promise(function (resolve, reject) {
207
+ // Prepare MD5
208
+ const validator = {};
209
+
210
+ validator.user = hash(user);
211
+ if (objType(oldUser, 'object')) validator.oldUser = hash(oldUser);
212
+ else validator.oldUser = '';
213
+
214
+ // Validate
215
+ if (validator.user !== validator.oldUser) {
216
+ // Get UID
217
+ const uid = discordSession.uidGenerator(user.id);
218
+ const firebaseAccount = discordSession.firebase.createAccountData(
219
+ access_token,
220
+ user,
221
+ oldUser,
222
+ );
223
+
224
+ // Update User
225
+ cfg.firebase.auth
226
+ .updateUser(uid, firebaseAccount)
227
+ .then((userRecord) =>
228
+ resolve({
229
+ updated: true,
230
+ uid: uid,
231
+ newData: firebaseAccount,
232
+ userRecord: userRecord,
233
+ }),
234
+ )
235
+ .catch(reject);
236
+ }
237
+
238
+ // Nope
239
+ else resolve({ updated: false });
240
+ });
241
+ };
242
+
243
+ // Set User
244
+ discordSession.firebase.set = function (req, user) {
245
+ return new Promise(function (resolve, reject) {
246
+ // UID
247
+ const uid = discordSession.uidGenerator(user.id);
248
+ const claims = prepare_fire_auth_discord(req, user);
249
+
250
+ // Prepare Auth
251
+ cfg.firebase.auth
252
+ .createCustomToken(uid, claims)
253
+
254
+ // Complete
255
+ .then((customToken) => {
256
+ req.session[sessionVars.firebase_auth_token] = customToken;
257
+ resolve(customToken);
258
+ })
259
+
260
+ // Error
261
+ .catch((err) => {
262
+ reject({ code: 500, message: err.message });
263
+ });
264
+ });
265
+ };
266
+
267
+ // Get User
268
+ discordSession.firebase.get = function (req, res) {
269
+ return new Promise(function (resolve, reject) {
270
+ // Prepare Auth
271
+ cfg.firebase.auth
272
+ .verifySessionCookie(req.session[sessionVars.firebase_token])
273
+
274
+ // Complete
275
+ .then((decodedToken) => {
276
+ // Validator
277
+ if (tinyCfg.ipVerification) {
278
+ // Get Request IP
279
+ const requestIpAddress = getUserIP(req, { isFirebase: true });
280
+
281
+ // Convert
282
+ if (typeof decodedToken.user_ip === 'string')
283
+ decodedToken.user_ip = [decodedToken.user_ip];
284
+
285
+ if (typeof requestIpAddress.value === 'string')
286
+ requestIpAddress.value = [requestIpAddress.value];
287
+
288
+ // Verification
289
+ if (
290
+ hash(decodedToken.user_ip) === hash(requestIpAddress.value) &&
291
+ decodedToken.user_ip_type === requestIpAddress.type
292
+ ) {
293
+ req.firebase_session = decodedToken;
294
+ resolve();
295
+ }
296
+
297
+ // Nope
298
+ else reject({ code: 406, message: 'Invalid User IP Session!' });
299
+ }
300
+
301
+ // Nope
302
+ else {
303
+ req.firebase_session = decodedToken;
304
+ resolve();
305
+ }
306
+ })
307
+
308
+ // Error
309
+ .catch((err) => {
310
+ reject({ code: 500, message: err.message });
311
+ });
312
+ });
313
+ };
314
+
315
+ // Firebase Redirect
316
+ const firebase_redirect = { login, logout };
317
+ for (const page in firebase_redirect)
318
+ for (const item in firebase_redirect[page])
319
+ firebase_redirect[page][item] = firebase_redirect[page][item].toString();
320
+
321
+ // Create Settings
322
+ const tinyCfg = _.defaultsDeep({}, cfg.cfg, {
323
+ // IP Verification
324
+ ipVerification: false,
325
+
326
+ // Need Verification
327
+ needEmailVerified: true,
328
+
329
+ // Error Callback
330
+ errorCallback: function (err, req, res) {
331
+ if (res) {
332
+ return res.json(err);
333
+ } else {
334
+ logger$1.error(err);
335
+ }
336
+ },
337
+
338
+ // Redirect
339
+ redirect: {
340
+ /* Login */
341
+ login: function (data, req, res) {
342
+ return res.json(data);
343
+ },
344
+
345
+ /* Logout */
346
+ logout: function (data, req, res) {
347
+ return res.json(data);
348
+ },
349
+
350
+ webhook: function (data, req, res) {
351
+ return res.json(data);
352
+ },
353
+ },
354
+ });
355
+
356
+ // Auth Config
357
+ const tinyAuth = _.defaultsDeep({}, cfg.auth, {
358
+ redirect: '',
359
+ client_id: '',
360
+ client_secret: '',
361
+ bot_token: '',
362
+ first_get_user: true,
363
+ discordScope: ['identify', 'email'],
364
+ });
365
+
366
+ // Auth Commands Config
367
+ const tinyCommandAuth = _.defaultsDeep({}, cfg.comamndAuth, {
368
+ redirect: tinyAuth.redirect,
369
+ client_id: tinyAuth.client_id,
370
+ client_secret: tinyAuth.client_secret,
371
+ bot_token: tinyAuth.bot_token,
372
+ first_get_user: tinyAuth.first_get_user,
373
+ discordScope: ['applications.commands'],
374
+ });
375
+
376
+ // Bot Auth
377
+ const botAuth = _.defaultsDeep({}, cfg.bot, {
378
+ discordScope: ['bot', 'applications.commands'],
379
+ permissions: 0,
380
+ });
381
+
382
+ // Final Result
383
+ const final_functions = {
384
+ // Auth
385
+ auth: tinyAuth,
386
+ commandAuth: tinyCommandAuth,
387
+
388
+ // API
389
+ addGuildMember: function (data) {
390
+ return addGuildMember(tinyAuth.bot_token, data);
391
+ },
392
+
393
+ getGuildWidget: function (guildID) {
394
+ return getGuildWidget(guildID);
395
+ },
396
+
397
+ // UID Generator
398
+ uidGenerator: function (userID) {
399
+ return discordSession.uidGenerator(userID);
400
+ },
401
+
402
+ // Session Validator
403
+ sessionValidator: function (data = {}) {
404
+ return (req, res, next) => {
405
+ // Validator Progress
406
+ const validatorItems = {
407
+ values: ['getUserConnections', 'getUser', 'getUserGuilds'],
408
+ count: 0,
409
+ callback: function () {
410
+ // The Item
411
+ const item = validatorItems.values[validatorItems.count];
412
+ if (typeof item === 'string') {
413
+ // Read Item
414
+ if (data[item]) {
415
+ final_functions.sessionPlugins[item](req, res, () => {
416
+ validatorItems.count++;
417
+ return validatorItems.callback();
418
+ });
419
+ } else {
420
+ validatorItems.count++;
421
+ validatorItems.callback();
422
+ }
423
+ }
424
+
425
+ // Next
426
+ else
427
+ final_functions.sessionPlugins.validator(req, res, () => {
428
+ next();
429
+ });
430
+ },
431
+ };
432
+
433
+ // Complete
434
+ return validatorItems.callback();
435
+ };
436
+ },
437
+
438
+ // Session Plugins
439
+ sessionPlugins: {
440
+ // Session Validator
441
+ validator: function (req, res, next) {
442
+ // Empty CSRF Token
443
+ if (!req.csrfToken) req.csrfToken = { new: {}, now: {} };
444
+
445
+ // Preparing Clocks
446
+ if (!req.utc_clock) req.utc_clock = { now: moment.tz('Universal') };
447
+
448
+ // Add Auth
449
+ req.discord_session.auth = {
450
+ app: tinyAuth,
451
+ command: tinyCommandAuth,
452
+ bot: botAuth,
453
+ };
454
+
455
+ // Exist Discord Session
456
+ const existDiscordSession =
457
+ typeof req.session[sessionVars.token_expires_in] === 'string' &&
458
+ typeof req.session[sessionVars.access_token] === 'string' &&
459
+ typeof req.session[sessionVars.refresh_token] === 'string';
460
+
461
+ // Exist Session
462
+ if (
463
+ existDiscordSession &&
464
+ !req.url.startsWith(tinyURLPath.firebaseLogin + '?') &&
465
+ req.url !== tinyURLPath.firebaseLogin &&
466
+ !req.url.startsWith(tinyURLPath.firebaseLogout + '?') &&
467
+ req.url !== tinyURLPath.firebaseLogout
468
+ ) {
469
+ // Exist Firebase
470
+ if (cfg.firebase) {
471
+ // Finish the Session
472
+ const finishTinySession = function (err) {
473
+ // Firebase Auth
474
+ const firebase_auth = req.session[sessionVars.firebase_token];
475
+
476
+ // Logout
477
+ auto_logout(req, err)
478
+ .then((result) => {
479
+ logout_firebase(res, req, result.redirect, firebase_auth);
480
+ })
481
+ .catch((err) => {
482
+ tinyCfg.errorCallback(err, req, res);
483
+ });
484
+ };
485
+
486
+ discordSession.firebase
487
+ .get(req, res)
488
+ .then(() => {
489
+ // Discord and Firebase same session
490
+ if (!req.discord_session.user || sessionFirebaseDiscordValidator(req))
491
+ checkDiscordSession(req, res, next);
492
+ // Nope
493
+ else finishTinySession();
494
+ })
495
+ .catch(finishTinySession);
496
+ }
497
+
498
+ // Nope
499
+ else checkDiscordSession(req, res, next);
500
+ } else next();
501
+ },
502
+
503
+ // Get User Module
504
+ getUser: function (req, res, next) {
505
+ // Get User Discord Data
506
+ const access_token = req.session[sessionVars.access_token];
507
+ if (typeof access_token === 'string') {
508
+ getDiscordUser(access_token)
509
+ .then((user) => {
510
+ // Set Discord Data
511
+ req.discord_session.user = user;
512
+
513
+ // Complete
514
+ next();
515
+ })
516
+ .catch((err) => {
517
+ if (!req.discord_session.errors) {
518
+ req.discord_session.errors = {};
519
+ }
520
+ req.discord_session.errors.user = err;
521
+ delete req.discord_session.user;
522
+ prepare_final_session(req, res, err);
523
+ });
524
+ } else next();
525
+ },
526
+
527
+ // Get User Module
528
+ getUserConnections: function (req, res, next) {
529
+ // Get User Discord Data
530
+ if (typeof req.session[sessionVars.access_token] === 'string') {
531
+ getUserConnections(req.session[sessionVars.access_token])
532
+ .then((connections) => {
533
+ // Set Discord Data
534
+ req.discord_session.connections = connections;
535
+
536
+ // Complete
537
+ next();
538
+ })
539
+ .catch((err) => {
540
+ if (!req.discord_session.errors) {
541
+ req.discord_session.errors = {};
542
+ }
543
+ req.discord_session.errors.connections = err;
544
+ delete req.discord_session.connections;
545
+ prepare_final_session(req, res, err);
546
+ });
547
+ } else next();
548
+ },
549
+
550
+ // Get User Module
551
+ getUserGuilds: function (req, res, next) {
552
+ // Get User Discord Data
553
+ if (typeof req.session[sessionVars.access_token] === 'string') {
554
+ getUserGuilds(req.session[sessionVars.access_token])
555
+ .then((guilds) => {
556
+ // Set Discord Data
557
+ req.discord_session.guilds = guilds;
558
+
559
+ // Complete
560
+ next();
561
+ })
562
+ .catch((err) => {
563
+ if (!req.discord_session.errors) {
564
+ req.discord_session.errors = {};
565
+ }
566
+ req.discord_session.errors.guilds = err;
567
+ delete req.discord_session.guilds;
568
+ prepare_final_session(req, res, err);
569
+ });
570
+ } else next();
571
+ },
572
+ },
573
+ };
574
+
575
+ // Test Modules Prepare
576
+ const getSessionFromCookie = cookieSession$1;
577
+
578
+ // Need Identify
579
+ if (tinyAuth.discordScope.indexOf('identify') < 0) tinyAuth.discordScope.push('identify');
580
+
581
+ if (tinyAuth.discordScope.indexOf('email') < 0) tinyAuth.discordScope.push('email');
582
+
583
+ // Firebase Mode
584
+ if (objType(cfg.firebase, 'object')) {
585
+ // Fix First Get User Value
586
+ tinyAuth.first_get_user = true;
587
+
588
+ // Fix Auth Value
589
+ if (!cfg.firebase.auth) cfg.firebase.auth = cfg.firebase.root.auth();
590
+ }
591
+
592
+ // Session Vars
593
+ const sessionVars = _.defaultsDeep({}, cfg.vars, {
594
+ access_token: 'access_token',
595
+ refresh_token: 'refresh_token',
596
+ token_type: 'token_type',
597
+ csrfToken: 'csrfToken',
598
+ scope: 'scope',
599
+ token_expires_in: 'token_expires_in',
600
+ firebase_token: 'firebase_token',
601
+ firebase_auth_token: 'firebase_auth_token',
602
+ });
603
+
604
+ // Crypto Values
605
+ const tinyCrypto = _.defaultsDeep({}, cfg.crypto, _default);
606
+
607
+ // Crypto Values
608
+ const tinyURLPath = _.defaultsDeep({}, cfg.url, {
609
+ commandLogin: '/commandLogin',
610
+ botLogin: '/botLogin',
611
+ login: '/login',
612
+ logout: '/logout',
613
+ redirect: '/redirect',
614
+ firebaseLogin: '/firebase/login',
615
+ firebaseLogout: '/firebase/logout',
616
+ });
617
+
618
+ // Logout Firebase
619
+ const logout_firebase = (res, req, redirect, firebase_auth) => {
620
+ // Firebase Logout
621
+ if (cfg.firebase)
622
+ return discordSession.firebaseAuth.redirect.logout(
623
+ req,
624
+ res,
625
+ redirect,
626
+ req.csrfToken.now.value,
627
+ firebase_auth,
628
+ );
629
+ // Normal
630
+ else {
631
+ // Get Domain
632
+ const tinyDomain = getDomainURL(req, cfg.port);
633
+ return res.redirect(tinyDomain + redirect);
634
+ }
635
+ };
636
+
637
+ // Logout Result
638
+ const logout_result = (req, user) => {
639
+ return new Promise(function (resolve) {
640
+ // Firebase Logout
641
+ if (cfg.firebase) {
642
+ // Exist User
643
+ if (user) {
644
+ // Revoke Refresh
645
+ cfg.firebase.auth
646
+ .revokeRefreshTokens(discordSession.uidGenerator(user.id))
647
+ .then(() => {
648
+ req.session = null;
649
+ resolve(user);
650
+ })
651
+ .catch((err) => {
652
+ req.session = null;
653
+ resolve(user);
654
+ });
655
+ }
656
+
657
+ // Nope
658
+ else {
659
+ req.session = null;
660
+ resolve();
661
+ }
662
+ }
663
+
664
+ // Nope
665
+ else {
666
+ req.session = null;
667
+ resolve(user);
668
+ }
669
+ });
670
+ };
671
+
672
+ // Remove Values
673
+ const removeCommandSession = function (req, callback) {
674
+ // Session Items
675
+ delete req.session[sessionVars.access_token + '_command'];
676
+ delete req.session[sessionVars.refresh_token + '_command'];
677
+ delete req.session[sessionVars.token_type + '_command'];
678
+ delete req.session[sessionVars.scope + '_command'];
679
+
680
+ // Expire In
681
+ delete req.session[sessionVars.token_expires_in + '_command'];
682
+
683
+ // Complete
684
+ return callback();
685
+ };
686
+
687
+ // Logout Action
688
+ const logout_action = function (req, csrfToken, redirect) {
689
+ return new Promise(function (resolve) {
690
+ // State
691
+ const state = { csrfToken: req.csrfToken.now.value };
692
+
693
+ // Redirect
694
+ if (redirect) state.redirect = redirect;
695
+
696
+ // Result
697
+ const finalResult = function () {
698
+ index
699
+ .logout(
700
+ req,
701
+ req.session[sessionVars.access_token],
702
+ {
703
+ // CSRF Token
704
+ csrfToken: csrfToken,
705
+
706
+ // Query
707
+ query: {
708
+ csrfToken: 'csrfToken',
709
+ redirect: 'redirect',
710
+ },
711
+
712
+ // State
713
+ state: state,
714
+
715
+ // Auth
716
+ auth: tinyAuth,
717
+ },
718
+ (getSessionFromCookie(req, sessionVars.access_token),
719
+ req.session[sessionVars.access_token]),
720
+ )
721
+ .then(resolve)
722
+ .catch(resolve);
723
+ };
724
+
725
+ // Normal
726
+ if (typeof req.session[sessionVars.access_token + '_command'] !== 'string') finalResult();
727
+ // Remove Command Token
728
+ else {
729
+ // Prepare Auth
730
+ const commandAuth = clone(tinyAuth);
731
+ commandAuth.discordScope = ['applications.commands', 'applications.commands.update'];
732
+
733
+ index
734
+ .logout(
735
+ req,
736
+ req.session[sessionVars.access_token],
737
+ {
738
+ // CSRF Token
739
+ csrfToken: csrfToken,
740
+
741
+ // Query
742
+ query: {
743
+ csrfToken: 'csrfToken',
744
+ redirect: 'redirect',
745
+ },
746
+
747
+ // State
748
+ state: state,
749
+
750
+ // Auth
751
+ auth: commandAuth,
752
+ },
753
+ (getSessionFromCookie(req, sessionVars.access_token),
754
+ req.session[sessionVars.access_token]),
755
+ )
756
+ .then((result) => {
757
+ removeCommandSession(req, finalResult);
758
+ })
759
+ .catch((err) => {
760
+ removeCommandSession(req, finalResult);
761
+ });
762
+ }
763
+ });
764
+ };
765
+
766
+ // Auto Logout
767
+ const auto_logout = function (req, err) {
768
+ return new Promise(function (resolve, reject) {
769
+ // Print Error
770
+ if (err) tinyCfg.errorCallback(err);
771
+
772
+ // Result
773
+ logout_action(req, req.csrfToken.now.value, req.url).then((result) => {
774
+ // Discord Logout Complete
775
+ logout_result(req, result.user).then(resolve);
776
+ });
777
+ });
778
+ };
779
+
780
+ // Prepare Final Session
781
+ const prepare_final_session = function (req, res, err) {
782
+ // Firebase Auth
783
+ const firebase_auth = req.session[sessionVars.firebase_token];
784
+ if (err) tinyCfg.errorCallback(err);
785
+
786
+ // Logout
787
+ auto_logout(req)
788
+ .then((result) => {
789
+ logout_firebase(res, req, result.redirect, firebase_auth);
790
+ })
791
+ .catch((err) => {
792
+ tinyCfg.errorCallback(err, req, res);
793
+ });
794
+ };
795
+
796
+ // Check Discord Session
797
+ const checkDiscordSession = function (req, res, next) {
798
+ // Rest Checker
799
+ const restChecker = function () {
800
+ // Add to Req
801
+ if (
802
+ typeof req.session[sessionVars.access_token + '_command'] === 'string' ||
803
+ typeof req.session[sessionVars.access_token + '_command'] === 'number'
804
+ ) {
805
+ // Add Access Command
806
+ req.discord_session.commands = {};
807
+ req.discord_session.commands.access_token =
808
+ req.session[sessionVars.access_token + '_command'];
809
+
810
+ // Other Values
811
+ if (
812
+ typeof req.session[sessionVars.token_type + '_command'] === 'string' ||
813
+ typeof req.session[sessionVars.token_type + '_command'] === 'number'
814
+ ) {
815
+ req.discord_session.commands.token_type =
816
+ req.session[sessionVars.token_type + '_command'];
817
+ }
818
+
819
+ if (
820
+ typeof req.session[sessionVars.scope + '_command'] === 'string' ||
821
+ typeof req.session[sessionVars.scope + '_command'] === 'number'
822
+ )
823
+ req.discord_session.commands.scope = req.session[sessionVars.scope + '_command'];
824
+ }
825
+
826
+ // Need Refresh
827
+ if (req.utc_clock.ds_token_time_left < 1440) {
828
+ // Not Expired
829
+ if (req.utc_clock.ds_token_time_left > 0) {
830
+ index
831
+ .refreshToken(
832
+ req,
833
+ {
834
+ // Auth
835
+ auth: tinyAuth,
836
+
837
+ // Refresh Token
838
+ refresh_token: req.session[sessionVars.refresh_token],
839
+ },
840
+ getSessionFromCookie(req, sessionVars.access_token),
841
+ )
842
+ .then((result) => {
843
+ // Complete
844
+ if (result.refreshed) {
845
+ // Set Cookie Session
846
+ discordSession.set(req, result.tokenRequest);
847
+
848
+ // Exist Firebase
849
+ if (cfg.firebase) {
850
+ // Set New Firebase Session Data
851
+ const access_token = req.session[sessionVars.access_token];
852
+ getDiscordUser(access_token)
853
+ .then((user) => {
854
+ // Set Custom Usre Claims
855
+ cfg.firebase.auth
856
+ .setCustomUserClaims(
857
+ discordSession.uidGenerator(user.id),
858
+ prepare_fire_auth_discord(req, user),
859
+ )
860
+ .then(() => {
861
+ // Update User Data
862
+ /* discordSession.firebase.updateUser(access_token, user).then(function () {
863
+ next();
864
+ }).catch(error => {
865
+ logger.error(error);
866
+ prepare_final_session(req, res, error);
867
+ }); */
868
+
869
+ next();
870
+ })
871
+ .catch((err) => {
872
+ prepare_final_session(req, res, err);
873
+ });
874
+ })
875
+ .catch((err) => {
876
+ prepare_final_session(req, res, err);
877
+ });
878
+ }
879
+
880
+ // Nope
881
+ else next();
882
+ }
883
+
884
+ // Nope
885
+ else next();
886
+ })
887
+ .catch((err) => {
888
+ prepare_final_session(req, res, err);
889
+ });
890
+ }
891
+
892
+ // Finish the Session
893
+ else prepare_final_session(req, res);
894
+ } else {
895
+ // Exist Discord Session Data and Firebase
896
+ if (cfg.firebase && req.discord_session.user && objType(req.firebase_session, 'object')) {
897
+ // Set New Firebase Session Data
898
+ req.session[sessionVars.access_token];
899
+
900
+ // Prepare OLD User
901
+ /* const oldUser = {};
902
+
903
+ // Get ID
904
+ oldUser.id = req.firebase_session.uid.substring(discordSession.varsTemplate.uid.length + tinyAuth.client_id.length + 1);
905
+
906
+ // Convert Username
907
+ oldUser.username = req.firebase_session.name.split('#');
908
+
909
+ // Get Discriminator
910
+ oldUser.discriminator = oldUser.username[oldUser.username.length - 1];
911
+
912
+ // Remove Discriminator
913
+ oldUser.username.pop();
914
+
915
+ // Insert Username
916
+ oldUser.username = oldUser.username.join('#');
917
+
918
+ // Get Avatar
919
+ oldUser.avatar = req.firebase_session.picture.substring(discordSession.varsTemplate.avatarURL.length + oldUser.id.length + 1);
920
+
921
+ // Get Email
922
+ oldUser.email = req.firebase_session.email;
923
+ oldUser.verified = req.firebase_session.email_verified; */
924
+
925
+ // Prepare New User
926
+ ({
927
+ id: req.discord_session.user.id,
928
+ username: req.discord_session.user.username,
929
+ avatar: req.discord_session.user.avatar,
930
+ discriminator: req.discord_session.user.discriminator,
931
+ email: req.discord_session.user.email,
932
+ verified: req.discord_session.user.verified,
933
+ });
934
+
935
+ // Update User Data
936
+ const make_the_update = function () {
937
+ /*
938
+ discordSession.firebase.updateUser(access_token, user, oldUser).then(function () {
939
+ next();
940
+ }).catch(error => {
941
+ logger.error(error);
942
+ prepare_final_session(req, res, error);
943
+ });
944
+ */
945
+ next();
946
+ };
947
+
948
+ // Check Need Update
949
+ let needUpdate = false;
950
+ if (
951
+ !objType(req.firebase_session.discord, 'object') ||
952
+ hash(req.firebase_session.discord) !== hash(req.discord_session.user)
953
+ )
954
+ needUpdate = true;
955
+
956
+ // User Verified
957
+ if (!needUpdate) make_the_update();
958
+ // Nope
959
+ else
960
+ cfg.firebase.auth
961
+ .setCustomUserClaims(
962
+ discordSession.uidGenerator(req.discord_session.user.id),
963
+ prepare_fire_auth_discord(req, req.discord_session.user),
964
+ )
965
+ .then(() => make_the_update())
966
+ .catch((err) => prepare_final_session(req, res, err));
967
+ }
968
+
969
+ // Nope
970
+ else next();
971
+ }
972
+ };
973
+
974
+ // Get Token Expiration
975
+ req.utc_clock.ds_token_expires_in = moment.tz(
976
+ req.session[sessionVars.token_expires_in],
977
+ 'Universal',
978
+ );
979
+
980
+ // Time Left
981
+ req.utc_clock.ds_token_time_left = req.utc_clock.ds_token_expires_in.diff(
982
+ req.utc_clock.now,
983
+ 'minutes',
984
+ );
985
+
986
+ // Command Time Left
987
+ if (!req.session[sessionVars.token_expires_in + '_command']) return restChecker();
988
+ // Nope
989
+ else {
990
+ // Get Token Expiration
991
+ req.utc_clock.ds_token_expires_in_command = moment.tz(
992
+ req.session[sessionVars.token_expires_in + '_command'],
993
+ 'Universal',
994
+ );
995
+
996
+ // Time Left
997
+ req.utc_clock.ds_token_time_left_command = req.utc_clock.ds_token_expires_in.diff(
998
+ req.utc_clock.now,
999
+ 'minutes',
1000
+ );
1001
+
1002
+ // Need Refresh
1003
+ if (req.utc_clock.ds_token_time_left_command < 1440) {
1004
+ // Prepare Auth
1005
+ const commandAuth = clone(tinyAuth);
1006
+ commandAuth.discordScope = ['applications.commands', 'applications.commands.update'];
1007
+
1008
+ // Logout
1009
+ const logoutCommand = function () {
1010
+ // Revoke Token
1011
+ revokeToken(req.session[sessionVars.access_token + '_command'], commandAuth)
1012
+ .then((data) => {
1013
+ removeCommandSession(req, restChecker);
1014
+ })
1015
+ .catch((err) => {
1016
+ removeCommandSession(req, restChecker);
1017
+ });
1018
+ };
1019
+
1020
+ // Not Expired
1021
+ if (req.utc_clock.ds_token_time_left_command > 0) {
1022
+ index
1023
+ .refreshToken(
1024
+ req,
1025
+ {
1026
+ // Auth
1027
+ auth: commandAuth,
1028
+
1029
+ // Refresh Token
1030
+ refresh_token: req.session[sessionVars.refresh_token + '_command'],
1031
+ },
1032
+ getSessionFromCookie(req, sessionVars.access_token),
1033
+ )
1034
+ .then((result) => {
1035
+ // Complete
1036
+ if (result.refreshed) discordSession.set(req, result.tokenRequest, '_command');
1037
+
1038
+ // Rest
1039
+ restChecker();
1040
+ })
1041
+ .catch(async (err) => {
1042
+ logoutCommand();
1043
+ });
1044
+ }
1045
+
1046
+ // Finish the Session
1047
+ else logoutCommand();
1048
+ } else restChecker();
1049
+ }
1050
+ };
1051
+
1052
+ // Prepare Body Parser
1053
+ let bodyParser = {};
1054
+ if (cfg.bodyParser) {
1055
+ bodyParser.json = cfg.bodyParser.json();
1056
+ bodyParser.urlencoded = cfg.bodyParser.urlencoded({ extended: true });
1057
+ }
1058
+
1059
+ // Login Firebase
1060
+ const firebaseLoginCallback = (req, res) => {
1061
+ // Remove OLD Auth Token
1062
+ req.session[sessionVars.firebase_auth_token] = null;
1063
+
1064
+ // Exist Discord
1065
+ if (req.discord_session.user) {
1066
+ // Exist Body
1067
+ if (objType(req.body, 'object') && typeof req.body.token === 'string') {
1068
+ // Exist Query
1069
+ if (
1070
+ typeof req.csrfToken.now.value !== 'string' ||
1071
+ req.csrfToken.now.value.length < 1 ||
1072
+ (typeof req.body.csrfToken === 'string' &&
1073
+ req.csrfToken.now.value === req.body.csrfToken)
1074
+ ) {
1075
+ // Prepare Module
1076
+ const newCookie = new cookieSession$2();
1077
+
1078
+ // Set Settings
1079
+ newCookie.setCookieTimeGenerator(cfg.cookieTimeGenerator);
1080
+ newCookie.setCheckAuthTime(cfg.checkAuthTime);
1081
+
1082
+ // Action
1083
+ newCookie
1084
+ .genCookieSession(cfg.firebase.auth, req.body.token)
1085
+ .then((sessionCookie) => {
1086
+ req.session[sessionVars.firebase_token] = sessionCookie;
1087
+ res.json({ success: true });
1088
+ })
1089
+ .catch((err) => {
1090
+ res.json({ success: false, error: err.message });
1091
+ });
1092
+
1093
+ /* discordSession.firebase.updateUser(req.session[sessionVars.access_token], req.discord_session.user).then(function () {
1094
+ res.json({ success: true });
1095
+ }).catch(error => {
1096
+ logger.error(error);
1097
+ res.json({ success: false, error: 'Error updating user' });
1098
+ }); */
1099
+ }
1100
+
1101
+ // Nope
1102
+ else return res.json({ success: false, error: 'Invalid csrfToken!' });
1103
+ }
1104
+
1105
+ // Nope
1106
+ else return res.json({ success: false, error: 'Invalid Data!' });
1107
+ }
1108
+
1109
+ // Nope
1110
+ else return res.json({ success: false, error: 'Invalid Discord User!' });
1111
+ };
1112
+
1113
+ if (cfg.bodyParser)
1114
+ app.post(
1115
+ tinyURLPath.firebaseLogin,
1116
+ bodyParser.json,
1117
+ bodyParser.urlencoded,
1118
+ final_functions.sessionPlugins.getUser,
1119
+ final_functions.sessionPlugins.validator,
1120
+ firebaseLoginCallback,
1121
+ );
1122
+ else
1123
+ app.post(
1124
+ tinyURLPath.firebaseLogin,
1125
+ final_functions.sessionPlugins.getUser,
1126
+ final_functions.sessionPlugins.validator,
1127
+ firebaseLoginCallback,
1128
+ );
1129
+
1130
+ app.get(tinyURLPath.firebaseLogin, final_functions.sessionPlugins.validator, (req, res) => {
1131
+ // Final Data
1132
+ const final_data = {};
1133
+
1134
+ // Exist Redirect
1135
+ if (typeof req.query.redirect === 'string') final_data.redirect = '/' + req.query.redirect;
1136
+ else final_data.redirect = '/';
1137
+
1138
+ // Auth Token
1139
+ if (typeof req.session[sessionVars.firebase_auth_token] === 'string') {
1140
+ // Insert Data
1141
+ if (typeof req.query.key === 'string' && req.query.key.length > 0) {
1142
+ final_data.key = req.query.key;
1143
+ }
1144
+ final_data.functions = firebase_redirect.login;
1145
+ final_data.token = req.session[sessionVars.firebase_auth_token];
1146
+
1147
+ // Complete
1148
+ return tinyCfg.redirect.login(final_data, req, res);
1149
+ }
1150
+
1151
+ // Nope
1152
+ else {
1153
+ // Get Domain
1154
+ const tinyDomain = getDomainURL(req, cfg.port);
1155
+ return res.redirect(tinyDomain + final_data.redirect);
1156
+ }
1157
+ });
1158
+
1159
+ // Logout Firebase
1160
+ const firebaseLogoutCallback = (req, res) => {
1161
+ req.session[sessionVars.firebase_token] = null;
1162
+ return res.json({ success: true });
1163
+ };
1164
+
1165
+ if (cfg.bodyParser)
1166
+ app.post(
1167
+ tinyURLPath.firebaseLogout,
1168
+ bodyParser.json,
1169
+ bodyParser.urlencoded,
1170
+ final_functions.sessionPlugins.validator,
1171
+ firebaseLogoutCallback,
1172
+ );
1173
+ else
1174
+ app.post(
1175
+ tinyURLPath.firebaseLogout,
1176
+ final_functions.sessionPlugins.validator,
1177
+ firebaseLogoutCallback,
1178
+ );
1179
+
1180
+ app.get(tinyURLPath.firebaseLogout, final_functions.sessionPlugins.validator, (req, res) => {
1181
+ // Final Data
1182
+ const final_data = {};
1183
+
1184
+ // Exist Redirect
1185
+ if (typeof req.query.redirect === 'string') final_data.redirect = '/' + req.query.redirect;
1186
+ else final_data.redirect = '/';
1187
+
1188
+ // Exist Token
1189
+ if (typeof req.query.firebase_auth === 'string') {
1190
+ // Insert Data
1191
+ if (typeof req.query.key === 'string' && req.query.key.length > 0) {
1192
+ final_data.key = req.query.key;
1193
+ }
1194
+ final_data.originalKey = req.csrfToken.now.value;
1195
+ final_data.functions = firebase_redirect.logout;
1196
+ final_data.token = req.query.firebase_auth;
1197
+
1198
+ // Complete
1199
+ return tinyCfg.redirect.logout(final_data, req, res);
1200
+ }
1201
+
1202
+ // Nope
1203
+ else {
1204
+ // Get Domain
1205
+ const tinyDomain = getDomainURL(req, cfg.port);
1206
+ return res.redirect(tinyDomain + final_data.redirect);
1207
+ }
1208
+ });
1209
+
1210
+ // Login
1211
+ if (typeof tinyURLPath.login === 'string') {
1212
+ app.get(tinyURLPath.login, final_functions.sessionPlugins.validator, (req, res) => {
1213
+ // Result
1214
+ index.login(
1215
+ req,
1216
+ res,
1217
+ {
1218
+ // Error
1219
+ errorCallback: tinyCfg.errorCallback,
1220
+
1221
+ // Crypto
1222
+ crypto: tinyCrypto,
1223
+
1224
+ // Auth
1225
+ auth: tinyAuth,
1226
+
1227
+ // Type
1228
+ type: 'login',
1229
+
1230
+ // Query
1231
+ query: { redirect: 'redirect' },
1232
+
1233
+ // State
1234
+ state: {
1235
+ csrfToken: req.csrfToken.now.value,
1236
+ },
1237
+
1238
+ // Port
1239
+ port: cfg.port,
1240
+ },
1241
+ getSessionFromCookie(req, sessionVars.access_token),
1242
+ );
1243
+ });
1244
+ }
1245
+
1246
+ // Command Login
1247
+ if (typeof tinyURLPath.commandLogin === 'string') {
1248
+ app.get(tinyURLPath.commandLogin, final_functions.sessionPlugins.validator, (req, res) => {
1249
+ // Prepare Auth
1250
+ const commandAuth = clone(tinyCommandAuth);
1251
+
1252
+ // Result
1253
+ index.login(
1254
+ req,
1255
+ res,
1256
+ {
1257
+ // Error
1258
+ errorCallback: tinyCfg.errorCallback,
1259
+
1260
+ // Crypto
1261
+ crypto: tinyCrypto,
1262
+
1263
+ // Auth
1264
+ auth: commandAuth,
1265
+
1266
+ // Type
1267
+ type: 'login_command',
1268
+
1269
+ // Query
1270
+ query: { redirect: 'redirect' },
1271
+
1272
+ // State
1273
+ state: {
1274
+ csrfToken: req.csrfToken.now.value,
1275
+ },
1276
+
1277
+ // Port
1278
+ port: cfg.port,
1279
+ },
1280
+ getSessionFromCookie(req, sessionVars.access_token),
1281
+ );
1282
+ });
1283
+ }
1284
+
1285
+ // Add Commands
1286
+ if (typeof tinyURLPath.botLogin === 'string') {
1287
+ app.get(tinyURLPath.botLogin, (req, res) => {
1288
+ return res.redirect(
1289
+ `${config.oauth2}?client_id=${encodeURIComponent(tinyAuth.client_id)}&scope=${encodeURIComponent(botAuth.discordScope.join(' '))}&permissions=${botAuth.permissions}`,
1290
+ );
1291
+ });
1292
+ }
1293
+
1294
+ // Logout
1295
+ app.get(tinyURLPath.logout, final_functions.sessionPlugins.validator, (req, res) => {
1296
+ // Firebase Auth
1297
+ const firebase_auth = req.session[sessionVars.firebase_token];
1298
+
1299
+ // Result
1300
+
1301
+ logout_action(req, req.query[sessionVars.csrfToken]).then((result) => {
1302
+ // Discord Logout Complete
1303
+ logout_result(req, result.user).then(() => {
1304
+ logout_firebase(res, req, result.redirect, firebase_auth);
1305
+ });
1306
+ });
1307
+ });
1308
+
1309
+ // Redirect
1310
+ app.get(tinyURLPath.redirect, final_functions.sessionPlugins.validator, (req, res) => {
1311
+ // Result
1312
+ index
1313
+ .redirect(
1314
+ req,
1315
+ {
1316
+ // Auth
1317
+ auth: tinyAuth,
1318
+
1319
+ // Crypto
1320
+ crypto: tinyCrypto,
1321
+
1322
+ // Query
1323
+ query: { redirect: 'redirect' },
1324
+
1325
+ // State
1326
+ state: {
1327
+ csrfToken: req.csrfToken.now.value,
1328
+ },
1329
+ },
1330
+ getSessionFromCookie(req, sessionVars.access_token),
1331
+ )
1332
+ .then((result) => {
1333
+ // New Session Result
1334
+ if (result.state.type === 'login' && result.newSession) {
1335
+ // Verified
1336
+ if (!tinyCfg.needEmailVerified || result.user.verified) {
1337
+ // Set Cookie Session
1338
+ discordSession.set(req, result.tokenRequest);
1339
+
1340
+ // Set Firebase Session
1341
+ if (cfg.firebase) {
1342
+ discordSession.firebase
1343
+ .set(req, result.user)
1344
+ .then(() => {
1345
+ discordSession.firebaseAuth.redirect.login(
1346
+ req,
1347
+ res,
1348
+ result.redirect,
1349
+ result.state.csrfToken,
1350
+ );
1351
+ })
1352
+ .catch((err) => {
1353
+ // Firebase Auth
1354
+ const firebase_auth = req.session[sessionVars.firebase_token];
1355
+
1356
+ // Logout
1357
+ auto_logout(req, { code: 500, message: err.message })
1358
+ .then((result) => {
1359
+ logout_firebase(res, req, result.redirect, firebase_auth);
1360
+ })
1361
+ .catch((err) => {
1362
+ tinyCfg.errorCallback(err, req, res);
1363
+ });
1364
+ });
1365
+ }
1366
+
1367
+ // Normal
1368
+ else {
1369
+ // Get Domain
1370
+ const tinyDomain = getDomainURL(req, cfg.port);
1371
+ res.redirect(tinyDomain + result.redirect);
1372
+ }
1373
+ }
1374
+
1375
+ // Nope
1376
+ else
1377
+ tinyCfg.errorCallback(
1378
+ { code: 401, message: 'This email is not a verified email!' },
1379
+ req,
1380
+ res,
1381
+ );
1382
+ }
1383
+
1384
+ // Command
1385
+ else if (result.state.type === 'login_command') {
1386
+ // Verified
1387
+ if (!tinyCfg.needEmailVerified || result.user.verified) {
1388
+ // Set Cookie Session
1389
+ discordSession.set(req, result.tokenRequest, '_command');
1390
+
1391
+ // Get Domain
1392
+ const tinyDomain = getDomainURL(req, cfg.port);
1393
+ res.redirect(tinyDomain + result.redirect);
1394
+ }
1395
+
1396
+ // Nope
1397
+ else
1398
+ tinyCfg.errorCallback(
1399
+ { code: 401, message: 'This email is not a verified email!' },
1400
+ req,
1401
+ res,
1402
+ );
1403
+ }
1404
+
1405
+ // Normal Redirect
1406
+ else {
1407
+ if (typeof tinyCfg.redirect[result.state.type] === 'function')
1408
+ tinyCfg.redirect[result.state.type](result, req, res);
1409
+ // Nope
1410
+ else {
1411
+ // Get Domain
1412
+ const tinyDomain = getDomainURL(req, cfg.port);
1413
+ res.redirect(tinyDomain + result.redirect);
1414
+ }
1415
+ }
1416
+ })
1417
+ .catch((err) => {
1418
+ tinyCfg.errorCallback(err, req, res);
1419
+ });
1420
+ });
1421
+
1422
+ // Complete
1423
+ return final_functions;
1424
+ }
1425
+
1426
+ // Nope
1427
+ else throw new Error('Invalid Config Value!');
1428
+ }
1429
+
1430
+ module.exports = cookieSession;