@joystick.js/node-canary 0.0.0-canary.47 → 0.0.0-canary.471

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 (439) hide show
  1. package/.build/getFilesToBuild.js +26 -0
  2. package/.build/getPlatformSafeFilePath.js +6 -0
  3. package/.build/getPlatformSafePath.js +6 -0
  4. package/.build/index.js +88 -0
  5. package/.build/isWindows.js +3 -0
  6. package/dist/action/class.js +1 -82
  7. package/dist/action/index.js +1 -8
  8. package/dist/app/accounts/default_user_output_fields.js +1 -0
  9. package/dist/app/accounts/delete_user.js +1 -0
  10. package/dist/app/accounts/generate_account_session.js +1 -0
  11. package/dist/app/accounts/generate_password_reset_token.js +1 -0
  12. package/dist/app/accounts/get_browser_safe_user.js +1 -0
  13. package/dist/app/accounts/has_login_token_expired.js +1 -0
  14. package/dist/app/accounts/index.js +1 -29
  15. package/dist/app/accounts/login.js +1 -59
  16. package/dist/app/accounts/recover_password.js +1 -0
  17. package/dist/app/accounts/reset_password.js +1 -0
  18. package/dist/app/accounts/roles/add.js +1 -7
  19. package/dist/app/accounts/roles/grant.js +1 -7
  20. package/dist/app/accounts/roles/index.js +1 -17
  21. package/dist/app/accounts/roles/list.js +1 -7
  22. package/dist/app/accounts/roles/remove.js +1 -7
  23. package/dist/app/accounts/roles/revoke.js +1 -7
  24. package/dist/app/accounts/roles/user_has_role.js +1 -0
  25. package/dist/app/accounts/send_email_verification.js +1 -0
  26. package/dist/app/accounts/set_account_cookie.js +1 -0
  27. package/dist/app/accounts/set_password.js +1 -0
  28. package/dist/app/accounts/signup.js +1 -97
  29. package/dist/app/accounts/unset_account_cookie.js +1 -0
  30. package/dist/app/accounts/verify_email.js +1 -0
  31. package/dist/app/api/accounts/authenticated.js +1 -0
  32. package/dist/app/api/accounts/login.js +1 -0
  33. package/dist/app/api/accounts/logout.js +1 -0
  34. package/dist/app/api/accounts/recover_password.js +1 -0
  35. package/dist/app/api/accounts/reset_password.js +1 -0
  36. package/dist/app/api/accounts/signup.js +1 -0
  37. package/dist/app/api/accounts/user.js +1 -0
  38. package/dist/app/api/accounts/verify_email.js +1 -0
  39. package/dist/app/api/format_api_error.js +1 -0
  40. package/dist/app/api/get.js +2 -0
  41. package/dist/app/api/get_api_context.js +1 -0
  42. package/dist/app/api/get_api_for_data_functions.js +1 -0
  43. package/dist/app/api/get_api_url_component.js +1 -0
  44. package/dist/app/api/get_output.js +1 -0
  45. package/dist/app/api/get_value_from_object.js +1 -0
  46. package/dist/app/api/handle_api_error.js +1 -0
  47. package/dist/app/api/input_validators.js +1 -0
  48. package/dist/app/api/is_array_path.js +1 -0
  49. package/dist/app/api/push/health.js +2 -0
  50. package/dist/app/api/register_getters.js +1 -0
  51. package/dist/app/api/register_setters.js +1 -0
  52. package/dist/app/api/sanitize_api_response.js +1 -0
  53. package/dist/app/api/set.js +2 -0
  54. package/dist/app/api/test/accounts/delete.js +1 -0
  55. package/dist/app/api/test/accounts/signup.js +1 -0
  56. package/dist/app/api/test/bootstrap.js +1 -0
  57. package/dist/app/api/test/process.js +1 -0
  58. package/dist/app/api/test/queues.js +1 -0
  59. package/dist/app/api/validate_input.js +1 -0
  60. package/dist/app/api/validate_session.js +1 -0
  61. package/dist/app/api/validate_type.js +1 -0
  62. package/dist/app/browser/hmr_client.js +1 -0
  63. package/dist/app/browser/process_polyfill.js +1 -0
  64. package/dist/app/cron_jobs/register.js +1 -0
  65. package/dist/app/databases/database_type_map.js +1 -0
  66. package/dist/app/databases/get_target_database_connection.js +1 -0
  67. package/dist/app/databases/mongodb/available_query_parameters.js +1 -0
  68. package/dist/app/databases/mongodb/build_connection_string.js +1 -0
  69. package/dist/app/databases/mongodb/build_query_parameters.js +1 -0
  70. package/dist/app/databases/mongodb/connect.js +6 -0
  71. package/dist/app/databases/mongodb/create_indexes.js +1 -0
  72. package/dist/app/databases/postgresql/accounts/create_accounts_metadata_table_columns.js +1 -0
  73. package/dist/app/databases/postgresql/connect.js +30 -0
  74. package/dist/app/databases/postgresql/create_indexes.js +1 -0
  75. package/dist/app/databases/postgresql/create_tables.js +1 -0
  76. package/dist/app/databases/postgresql/handle_cleanup_queues.js +5 -0
  77. package/dist/app/databases/postgresql/handle_cleanup_sessions.js +1 -0
  78. package/dist/app/databases/queries/accounts.js +1 -0
  79. package/dist/app/databases/queries/map.js +1 -0
  80. package/dist/app/databases/queries/mongodb/accounts.js +1 -0
  81. package/dist/app/databases/queries/mongodb/queues.js +1 -0
  82. package/dist/app/databases/queries/mongodb/sessions.js +1 -0
  83. package/dist/app/databases/queries/postgresql/accounts.js +1 -0
  84. package/dist/app/databases/queries/postgresql/queues.js +123 -0
  85. package/dist/app/databases/queries/postgresql/sessions.js +14 -0
  86. package/dist/app/databases/queries/sessions.js +1 -0
  87. package/dist/app/databases/register_database.js +1 -0
  88. package/dist/app/databases/sql.js +1 -0
  89. package/dist/app/email/send.js +1 -0
  90. package/dist/app/email/validate_smtp_settings.js +1 -0
  91. package/dist/app/fixture/index.js +1 -0
  92. package/dist/app/generate_machine_id.js +1 -0
  93. package/dist/app/generate_process_id.js +1 -0
  94. package/dist/app/get_ssl_certificates.js +1 -0
  95. package/dist/app/handle_process_errors.js +1 -0
  96. package/dist/app/index.js +1 -656
  97. package/dist/app/middleware/account.js +1 -0
  98. package/dist/app/middleware/body_parser.js +1 -0
  99. package/dist/app/middleware/build_error.js +1 -0
  100. package/dist/app/middleware/built_in.js +1 -0
  101. package/dist/app/middleware/context.js +1 -0
  102. package/dist/app/middleware/cors.js +1 -22
  103. package/dist/app/middleware/csp.js +1 -48
  104. package/dist/app/middleware/generate_insecure_page.js +65 -0
  105. package/dist/app/middleware/generate_joystick_error_page.js +147 -0
  106. package/dist/app/middleware/hmr_client.js +1 -0
  107. package/dist/app/middleware/insecure.js +1 -11
  108. package/dist/app/middleware/process_browser_polyfill.js +1 -0
  109. package/dist/app/middleware/render/get_url.js +1 -0
  110. package/dist/app/middleware/render/index.js +1 -0
  111. package/dist/app/middleware/request_methods.js +1 -0
  112. package/dist/app/middleware/session.js +1 -24
  113. package/dist/app/push_logs.js +1 -0
  114. package/dist/app/queues/index.js +1 -119
  115. package/dist/app/register_app_options.js +1 -0
  116. package/dist/app/routes/register_route_from_function.js +1 -0
  117. package/dist/app/routes/register_route_from_object.js +1 -0
  118. package/dist/app/routes/supported_http_methods.js +1 -0
  119. package/dist/app/settings/load.js +1 -0
  120. package/dist/app/ssr/index.js +33 -0
  121. package/dist/app/ssr/set_base_attributes_in_html.js +1 -0
  122. package/dist/app/ssr/set_head_tags_in_html.js +1 -0
  123. package/dist/app/start_express.js +1 -0
  124. package/dist/app/start_node_as_cluster.js +1 -0
  125. package/dist/app/uploaders/local_upload_progress_middleware.js +1 -0
  126. package/dist/app/uploaders/register.js +1 -0
  127. package/dist/app/uploaders/run_upload.js +1 -0
  128. package/dist/app/uploaders/validate_options.js +1 -0
  129. package/dist/app/uploaders/validate_uploads.js +1 -0
  130. package/dist/app/websockets/emit_event.js +1 -0
  131. package/dist/app/websockets/index.js +1 -0
  132. package/dist/app/websockets/register.js +1 -0
  133. package/dist/index.js +4 -76
  134. package/dist/lib/camel_pascal_to_snake.js +1 -0
  135. package/dist/lib/constants.js +1 -13
  136. package/dist/lib/dynamic_import.js +1 -0
  137. package/dist/lib/escape_html.js +1 -0
  138. package/dist/lib/escape_key_value_pair.js +1 -0
  139. package/dist/lib/float_to_decimal_place.js +1 -0
  140. package/dist/lib/generate_id.js +1 -0
  141. package/dist/lib/get_browser_safe_request.js +1 -0
  142. package/dist/lib/get_joystick_build_path.js +1 -0
  143. package/dist/lib/get_origin.js +1 -0
  144. package/dist/lib/get_platform_safe_path.js +1 -0
  145. package/dist/lib/get_sanitized_context.js +1 -0
  146. package/dist/lib/get_translations.js +1 -0
  147. package/dist/lib/hash_string.js +1 -0
  148. package/dist/lib/is_valid_json.js +1 -0
  149. package/dist/lib/log.js +13 -49
  150. package/dist/lib/node_path_polyfills.js +1 -0
  151. package/dist/lib/parse_json.js +1 -0
  152. package/dist/lib/path_exists.js +1 -0
  153. package/dist/lib/rainbow_road.js +1 -0
  154. package/dist/lib/serialize_query_parameters.js +1 -0
  155. package/dist/lib/set_cookie.js +1 -0
  156. package/dist/lib/string_to_slug.js +1 -0
  157. package/dist/lib/timestamps.js +1 -0
  158. package/dist/lib/types.js +1 -0
  159. package/dist/lib/unset_cookie.js +1 -0
  160. package/dist/lib/wait.js +1 -0
  161. package/dist/test/track_function_call.js +1 -0
  162. package/increment_version.js +3 -0
  163. package/package.json +27 -44
  164. package/src/action/class.js +137 -0
  165. package/src/action/index.js +8 -0
  166. package/src/app/accounts/default_user_output_fields.js +10 -0
  167. package/src/app/accounts/delete_user.js +18 -0
  168. package/src/app/accounts/generate_account_session.js +11 -0
  169. package/src/app/accounts/generate_password_reset_token.js +16 -0
  170. package/src/app/accounts/get_browser_safe_user.js +29 -0
  171. package/src/app/accounts/has_login_token_expired.js +9 -0
  172. package/src/app/accounts/index.js +38 -0
  173. package/src/app/accounts/login.js +82 -0
  174. package/src/app/accounts/recover_password.js +58 -0
  175. package/src/app/accounts/reset_password.js +69 -0
  176. package/src/app/accounts/roles/add.js +7 -0
  177. package/src/app/accounts/roles/grant.js +7 -0
  178. package/src/app/accounts/roles/index.js +18 -0
  179. package/src/app/accounts/roles/list.js +7 -0
  180. package/src/app/accounts/roles/remove.js +7 -0
  181. package/src/app/accounts/roles/revoke.js +7 -0
  182. package/src/app/accounts/roles/user_has_role.js +7 -0
  183. package/src/app/accounts/send_email_verification.js +48 -0
  184. package/src/app/accounts/set_account_cookie.js +12 -0
  185. package/src/app/accounts/set_password.js +46 -0
  186. package/src/app/accounts/signup.js +158 -0
  187. package/src/app/accounts/unset_account_cookie.js +12 -0
  188. package/src/app/accounts/verify_email.js +32 -0
  189. package/src/app/api/accounts/authenticated.js +17 -0
  190. package/src/app/api/accounts/login.js +36 -0
  191. package/src/app/api/accounts/logout.js +20 -0
  192. package/src/app/api/accounts/recover_password.js +16 -0
  193. package/src/app/api/accounts/reset_password.js +24 -0
  194. package/src/app/api/accounts/signup.js +49 -0
  195. package/src/app/api/accounts/user.js +21 -0
  196. package/src/app/api/accounts/verify_email.js +11 -0
  197. package/src/app/api/format_api_error.js +10 -0
  198. package/src/app/api/get.js +119 -0
  199. package/src/app/api/get_api_context.js +27 -0
  200. package/src/app/api/get_api_for_data_functions.js +37 -0
  201. package/src/app/api/get_api_url_component.js +5 -0
  202. package/src/app/api/get_output.js +116 -0
  203. package/src/app/api/get_value_from_object.js +8 -0
  204. package/src/app/api/handle_api_error.js +28 -0
  205. package/src/app/api/input_validators.js +227 -0
  206. package/src/app/api/is_array_path.js +6 -0
  207. package/src/app/api/push/health.js +17 -0
  208. package/src/app/api/register_getters.js +57 -0
  209. package/src/app/api/register_setters.js +55 -0
  210. package/src/app/api/sanitize_api_response.js +35 -0
  211. package/src/app/api/set.js +119 -0
  212. package/src/app/api/test/accounts/delete.js +8 -0
  213. package/src/app/api/test/accounts/signup.js +50 -0
  214. package/src/app/api/test/bootstrap.js +39 -0
  215. package/src/app/api/test/process.js +7 -0
  216. package/src/app/api/test/queues.js +25 -0
  217. package/src/app/api/validate_input.js +130 -0
  218. package/src/app/api/validate_session.js +20 -0
  219. package/src/app/api/validate_type.js +24 -0
  220. package/src/app/browser/hmr_client.js +196 -0
  221. package/src/app/browser/process_polyfill.js +11 -0
  222. package/src/app/cron_jobs/register.js +29 -0
  223. package/src/app/databases/database_type_map.js +6 -0
  224. package/src/app/databases/get_target_database_connection.js +25 -0
  225. package/{dist/app/databases/mongodb/availableQueryParameters.js → src/app/databases/mongodb/available_query_parameters.js} +3 -4
  226. package/src/app/databases/mongodb/build_connection_string.js +30 -0
  227. package/src/app/databases/mongodb/build_query_parameters.js +17 -0
  228. package/src/app/databases/mongodb/connect.js +42 -0
  229. package/src/app/databases/mongodb/create_indexes.js +35 -0
  230. package/src/app/databases/postgresql/accounts/create_accounts_metadata_table_columns.js +18 -0
  231. package/src/app/databases/postgresql/connect.js +128 -0
  232. package/src/app/databases/postgresql/create_indexes.js +58 -0
  233. package/src/app/databases/postgresql/create_tables.js +70 -0
  234. package/src/app/databases/postgresql/handle_cleanup_queues.js +36 -0
  235. package/src/app/databases/postgresql/handle_cleanup_sessions.js +5 -0
  236. package/src/app/databases/queries/accounts.js +17 -0
  237. package/src/app/databases/queries/map.js +21 -0
  238. package/src/app/databases/queries/mongodb/accounts.js +360 -0
  239. package/src/app/databases/queries/mongodb/queues.js +164 -0
  240. package/src/app/databases/queries/mongodb/sessions.js +22 -0
  241. package/src/app/databases/queries/postgresql/accounts.js +379 -0
  242. package/src/app/databases/queries/postgresql/queues.js +294 -0
  243. package/src/app/databases/queries/postgresql/sessions.js +37 -0
  244. package/src/app/databases/queries/sessions.js +17 -0
  245. package/src/app/databases/register_database.js +30 -0
  246. package/src/app/databases/sql.js +63 -0
  247. package/src/app/email/send.js +108 -0
  248. package/src/app/email/validate_smtp_settings.js +53 -0
  249. package/src/app/fixture/index.js +50 -0
  250. package/src/app/generate_machine_id.js +26 -0
  251. package/src/app/generate_process_id.js +30 -0
  252. package/src/app/get_ssl_certificates.js +23 -0
  253. package/src/app/handle_process_errors.js +101 -0
  254. package/src/app/index.js +253 -0
  255. package/src/app/middleware/account.js +28 -0
  256. package/src/app/middleware/body_parser.js +18 -0
  257. package/src/app/middleware/build_error.js +18 -0
  258. package/src/app/middleware/built_in.js +76 -0
  259. package/src/app/middleware/context.js +34 -0
  260. package/src/app/middleware/cors.js +23 -0
  261. package/src/app/middleware/csp.js +54 -0
  262. package/src/app/middleware/generate_insecure_page.js +71 -0
  263. package/{dist/lib/generateErrorPage.js → src/app/middleware/generate_joystick_error_page.js} +25 -21
  264. package/src/app/middleware/hmr_client.js +12 -0
  265. package/src/app/middleware/insecure.js +22 -0
  266. package/src/app/middleware/process_browser_polyfill.js +12 -0
  267. package/src/app/middleware/render/get_url.js +15 -0
  268. package/src/app/middleware/render/index.js +93 -0
  269. package/src/app/middleware/request_methods.js +21 -0
  270. package/src/app/middleware/session.js +31 -0
  271. package/src/app/push_logs.js +44 -0
  272. package/src/app/queues/index.js +268 -0
  273. package/src/app/register_app_options.js +7 -0
  274. package/src/app/routes/register_route_from_function.js +10 -0
  275. package/src/app/routes/register_route_from_object.js +34 -0
  276. package/src/app/routes/supported_http_methods.js +9 -0
  277. package/src/app/settings/load.js +33 -0
  278. package/src/app/ssr/index.js +133 -0
  279. package/src/app/ssr/set_base_attributes_in_html.js +43 -0
  280. package/src/app/ssr/set_head_tags_in_html.js +104 -0
  281. package/src/app/start_express.js +50 -0
  282. package/src/app/start_node_as_cluster.js +30 -0
  283. package/src/app/uploaders/local_upload_progress_middleware.js +24 -0
  284. package/src/app/uploaders/register.js +169 -0
  285. package/src/app/uploaders/run_upload.js +136 -0
  286. package/src/app/uploaders/validate_options.js +74 -0
  287. package/src/app/uploaders/validate_uploads.js +127 -0
  288. package/src/app/websockets/emit_event.js +14 -0
  289. package/src/app/websockets/index.js +16 -0
  290. package/src/app/websockets/register.js +175 -0
  291. package/src/index.js +81 -0
  292. package/{dist/lib/camelPascalToSnake.js → src/lib/camel_pascal_to_snake.js} +3 -4
  293. package/src/lib/constants.js +21 -0
  294. package/src/lib/dynamic_import.js +8 -0
  295. package/src/lib/escape_html.js +9 -0
  296. package/src/lib/escape_key_value_pair.js +15 -0
  297. package/src/lib/float_to_decimal_place.js +5 -0
  298. package/src/lib/generate_id.js +15 -0
  299. package/src/lib/get_browser_safe_request.js +17 -0
  300. package/src/lib/get_joystick_build_path.js +22 -0
  301. package/src/lib/get_origin.js +7 -0
  302. package/src/lib/get_platform_safe_path.js +8 -0
  303. package/src/lib/get_sanitized_context.js +51 -0
  304. package/src/lib/get_translations.js +109 -0
  305. package/src/lib/hash_string.js +7 -0
  306. package/src/lib/is_valid_json.js +10 -0
  307. package/src/lib/log.js +42 -0
  308. package/src/lib/node_path_polyfills.js +23 -0
  309. package/src/lib/parse_json.js +9 -0
  310. package/src/lib/path_exists.js +12 -0
  311. package/src/lib/rainbow_road.js +7 -0
  312. package/src/lib/serialize_query_parameters.js +7 -0
  313. package/src/lib/set_cookie.js +16 -0
  314. package/src/lib/string_to_slug.js +14 -0
  315. package/src/lib/timestamps.js +48 -0
  316. package/src/lib/types.js +59 -0
  317. package/src/lib/unset_cookie.js +11 -0
  318. package/src/lib/wait.js +9 -0
  319. package/src/test/track_function_call.js +16 -0
  320. package/README.md +0 -8
  321. package/_package.json +0 -63
  322. package/canary.js +0 -12
  323. package/dist/api/get.js +0 -29
  324. package/dist/api/getOrigin.js +0 -6
  325. package/dist/api/index.js +0 -9
  326. package/dist/api/set.js +0 -29
  327. package/dist/app/accounts/defaultUserOutputFields.js +0 -9
  328. package/dist/app/accounts/generateResetToken.js +0 -28
  329. package/dist/app/accounts/generateSession.js +0 -15
  330. package/dist/app/accounts/getBrowserSafeUser.js +0 -24
  331. package/dist/app/accounts/hasLoginTokenExpired.js +0 -17
  332. package/dist/app/accounts/hashString.js +0 -7
  333. package/dist/app/accounts/recoverPassword.js +0 -30
  334. package/dist/app/accounts/resetPassword.js +0 -73
  335. package/dist/app/accounts/roles/userHasRole.js +0 -7
  336. package/dist/app/accounts/runUserQuery.js +0 -15
  337. package/dist/app/accounts/sendEmailVerification.js +0 -65
  338. package/dist/app/accounts/setAuthenticationCookie.js +0 -11
  339. package/dist/app/accounts/setPassword.js +0 -45
  340. package/dist/app/accounts/unsetAuthenticationCookie.js +0 -11
  341. package/dist/app/accounts/verifyEmail.js +0 -46
  342. package/dist/app/databases/getTargetDatabase.js +0 -10
  343. package/dist/app/databases/getTargetDatabaseConnection.js +0 -19
  344. package/dist/app/databases/getTargetDatabaseProvider.js +0 -10
  345. package/dist/app/databases/mongodb/buildConnectionString.js +0 -22
  346. package/dist/app/databases/mongodb/buildQueryParameters.js +0 -14
  347. package/dist/app/databases/mongodb/index.js +0 -40
  348. package/dist/app/databases/mongodb/queries/accounts.js +0 -266
  349. package/dist/app/databases/mongodb/queries/queues.js +0 -111
  350. package/dist/app/databases/postgresql/addColumnToTable.js +0 -6
  351. package/dist/app/databases/postgresql/createAccountsIndexes.js +0 -21
  352. package/dist/app/databases/postgresql/createAccountsTables.js +0 -39
  353. package/dist/app/databases/postgresql/createDatabase.js +0 -0
  354. package/dist/app/databases/postgresql/index.js +0 -55
  355. package/dist/app/databases/postgresql/queries/accounts.js +0 -186
  356. package/dist/app/databases/postgresql/queries/queues.js +0 -211
  357. package/dist/app/databases/queryMap.js +0 -17
  358. package/dist/app/databases/typesMap.js +0 -7
  359. package/dist/app/getAPIContext.js +0 -25
  360. package/dist/app/getAPIURLComponent.js +0 -6
  361. package/dist/app/getBrowserSafeRequest.js +0 -14
  362. package/dist/app/getOutput.js +0 -74
  363. package/dist/app/handleProcessErrors.js +0 -73
  364. package/dist/app/initExpress.js +0 -41
  365. package/dist/app/middleware/bodyParser.js +0 -16
  366. package/dist/app/middleware/hmr/client.js +0 -113
  367. package/dist/app/middleware/index.js +0 -89
  368. package/dist/app/middleware/render.js +0 -213
  369. package/dist/app/middleware/requestMethods.js +0 -19
  370. package/dist/app/registerGetters.js +0 -45
  371. package/dist/app/registerSetters.js +0 -45
  372. package/dist/app/runGetter.js +0 -103
  373. package/dist/app/runSetter.js +0 -103
  374. package/dist/app/runUploader.js +0 -143
  375. package/dist/app/sanitizeAPIResponse.js +0 -27
  376. package/dist/app/utils/process.js +0 -193
  377. package/dist/app/validateSession.js +0 -19
  378. package/dist/app/validateUploaderOptions.js +0 -53
  379. package/dist/app/validateUploads.js +0 -102
  380. package/dist/email/render.js +0 -50
  381. package/dist/email/send.js +0 -55
  382. package/dist/email/templates/base.css +0 -194
  383. package/dist/email/templates/base.html +0 -28
  384. package/dist/email/templates/reset-password.js +0 -13
  385. package/dist/email/validateSMTPSettings.js +0 -27
  386. package/dist/lib/escapeHTML.js +0 -9
  387. package/dist/lib/escapeKeyValuePair.js +0 -13
  388. package/dist/lib/formatAPIError.js +0 -12
  389. package/dist/lib/formatErrorString.js +0 -8
  390. package/dist/lib/generateCookie.js +0 -14
  391. package/dist/lib/generateId.js +0 -13
  392. package/dist/lib/generateMachineId.js +0 -15
  393. package/dist/lib/getBuildPath.js +0 -10
  394. package/dist/lib/getErrorObject.js +0 -9
  395. package/dist/lib/getPlatformSafeFilePath.js +0 -8
  396. package/dist/lib/getPlatformSafePath.js +0 -8
  397. package/dist/lib/getSSLCertificates.js +0 -19
  398. package/dist/lib/isValidHTTPMethod.js +0 -7
  399. package/dist/lib/isValidJSONString.js +0 -11
  400. package/dist/lib/nodeUrlPolyfills.js +0 -14
  401. package/dist/lib/objectToSQLKeysString.js +0 -18
  402. package/dist/lib/objectToSQLValuesString.js +0 -16
  403. package/dist/lib/obscenedb/debounce.js +0 -12
  404. package/dist/lib/obscenedb/index.js +0 -61
  405. package/dist/lib/parseDatabasesFromEnvironment.js +0 -9
  406. package/dist/lib/rainbowRoad.js +0 -7
  407. package/dist/lib/readDirectory.js +0 -24
  408. package/dist/lib/replaceBackslashesWithForwardSlashes.js +0 -8
  409. package/dist/lib/replaceFileProtocol.js +0 -8
  410. package/dist/lib/replaceForwardSlashesWithBackslashes.js +0 -8
  411. package/dist/lib/serializeQueryParameters.js +0 -8
  412. package/dist/lib/serverAvailable.js +0 -0
  413. package/dist/lib/setCookie.js +0 -16
  414. package/dist/lib/supportedHTTPMethods.js +0 -4
  415. package/dist/lib/unsetCookie.js +0 -13
  416. package/dist/push/logs/index.js +0 -55
  417. package/dist/settings/index.js +0 -5
  418. package/dist/settings/load.js +0 -30
  419. package/dist/ssr/compileCSS.js +0 -85
  420. package/dist/ssr/findComponentInTree.js +0 -29
  421. package/dist/ssr/formatCSS.js +0 -6
  422. package/dist/ssr/getCSSFromTree.js +0 -33
  423. package/dist/ssr/index.js +0 -441
  424. package/dist/ssr/replaceWhenTags.js +0 -37
  425. package/dist/ssr/setHeadTagsInHTML.js +0 -84
  426. package/dist/validation/index.js +0 -10
  427. package/dist/validation/index.test.js +0 -463
  428. package/dist/validation/inputWithSchema/index.js +0 -105
  429. package/dist/validation/lib/constants.js +0 -162
  430. package/dist/validation/lib/getValueFromObject.js +0 -12
  431. package/dist/validation/lib/getValueFromObject.test.js +0 -7
  432. package/dist/validation/lib/isArrayPath.js +0 -6
  433. package/dist/validation/lib/throwError.js +0 -6
  434. package/dist/validation/lib/typeValidators.js +0 -38
  435. package/dist/validation/lib/validateType.js +0 -33
  436. package/dist/validation/schema/index.js +0 -44
  437. package/dist/websockets/emitWebsocketEvent.js +0 -12
  438. package/dist/websockets/index.js +0 -12
  439. package/notes +0 -1
@@ -0,0 +1,82 @@
1
+ /* eslint-disable consistent-return */
2
+
3
+ import bcrypt from "bcrypt";
4
+ import accounts_query from "../databases/queries/accounts.js";
5
+ import generate_account_session from "./generate_account_session.js";
6
+ import get_output from "../api/get_output.js";
7
+ import types from "../../lib/types.js";
8
+
9
+ const add_session_to_user = (user_id = null, session = null) => {
10
+ return accounts_query("add_session", { user_id, session });
11
+ };
12
+
13
+ const get_existing_session = (user_id = null) => {
14
+ return accounts_query("get_existing_session", { user_id });
15
+ };
16
+
17
+ const delete_old_sessions = (user_id = null) => {
18
+ return accounts_query("delete_old_sessions", { user_id });
19
+ };
20
+
21
+ const check_if_valid_password = (password_from_login = null, password_hash_from_user = null) => {
22
+ return bcrypt.compareSync(password_from_login, password_hash_from_user);
23
+ };
24
+
25
+ const login = async (login_options = {}) => {
26
+ const user = await accounts_query("user", {
27
+ email_address: login_options.email_address || login_options.emailAddress,
28
+ username: login_options.username,
29
+ });
30
+
31
+ if (!user) {
32
+ throw new Error(
33
+ `A user with the ${
34
+ login_options.email_address || login_options.emailAddress ? "email address" : "username"
35
+ } ${login_options.email_address || login_options.emailAddress || login_options.username} could not be found.`
36
+ );
37
+ }
38
+
39
+ const is_valid_password = check_if_valid_password(
40
+ login_options.password,
41
+ user.password
42
+ );
43
+
44
+ if (!is_valid_password) {
45
+ throw new Error('Incorrect password.');
46
+ }
47
+
48
+ const user_id = user?._id || user?.user_id;
49
+
50
+ await delete_old_sessions(user_id);
51
+
52
+ let session = await get_existing_session(user_id);
53
+
54
+ if (!session) {
55
+ session = generate_account_session();
56
+ await add_session_to_user(user_id, session);
57
+ }
58
+
59
+ const { password, sessions, ...rest_of_user } = user;
60
+
61
+ if (
62
+ types.is_function(process.joystick?.app_options?.accounts?.events?.onLogin) ||
63
+ types.is_function(process.joystick?.app_options?.accounts?.events?.on_login)
64
+ ) {
65
+ (process.joystick?.app_options?.accounts?.events?.onLogin || process.joystick?.app_options?.accounts?.events?.on_login)({
66
+ ...session,
67
+ user,
68
+ });
69
+ }
70
+
71
+ return {
72
+ ...session,
73
+ user: get_output(
74
+ {
75
+ ...rest_of_user,
76
+ },
77
+ login_options?.output
78
+ ),
79
+ };
80
+ };
81
+
82
+ export default login;
@@ -0,0 +1,58 @@
1
+ import accounts_query from "../databases/queries/accounts.js";
2
+ import generate_password_reset_token from "./generate_password_reset_token.js";
3
+ import load_settings from "../settings/load.js";
4
+ import send_email from "../email/send.js";
5
+ import types from "../../lib/types.js";
6
+
7
+ const settings = load_settings();
8
+
9
+ const get_existing_reset_token = (user_id = '') => {
10
+ return accounts_query('get_password_reset_token', { user_id });
11
+ };
12
+
13
+ const get_user = (email_address = '') => {
14
+ return accounts_query('user', { email_address });
15
+ };
16
+
17
+ const recover_password = async (recover_password_options = {}) => {
18
+ const user = await get_user(recover_password_options?.email_address || recover_password_options?.emailAddress);
19
+
20
+ if (!user) {
21
+ throw new Error(`A user with the email address ${recover_password_options?.email_address || recover_password_options?.emailAddress} could not be found.`);
22
+ }
23
+
24
+ const existing_reset_token = await get_existing_reset_token(user?._id || user?.user_id);
25
+ const reset_token = existing_reset_token || await generate_password_reset_token(recover_password_options.email_address || recover_password_options.emailAddress);
26
+
27
+ const domain = process.env.ROOT_URL || `http://localhost:${process.env.PORT}`;
28
+ const url = `${domain}/reset-password/${reset_token}`;
29
+
30
+ if (process.env.NODE_ENV === "development") {
31
+ console.log(`Reset Password URL: ${url}`);
32
+ }
33
+
34
+ if (
35
+ types.is_function(process.joystick?.app_options?.accounts?.events?.onRecoverPassword) ||
36
+ types.is_function(process.joystick?.app_options?.accounts?.events?.on_recover_password)
37
+ ) {
38
+ (
39
+ process.joystick?.app_options?.accounts?.events?.onRecoverPassword ||
40
+ process.joystick?.app_options?.accounts?.events?.on_recover_password
41
+ )(recover_password_options?.email_address || recover_password_options?.emailAddress);
42
+ }
43
+
44
+ await send_email({
45
+ to: recover_password_options.email_address || recover_password_options?.emailAddress,
46
+ from: settings?.config?.email?.from,
47
+ subject: "Reset Your Password",
48
+ template: "reset_password",
49
+ props: {
50
+ email_address: recover_password_options.email_address || recover_password_options?.emailAddress,
51
+ url,
52
+ },
53
+ });
54
+
55
+ return reset_token;
56
+ };
57
+
58
+ export default recover_password;
@@ -0,0 +1,69 @@
1
+ import accounts_query from "../databases/queries/accounts.js";
2
+ import generate_account_session from "./generate_account_session.js";
3
+ import get_output from "../api/get_output.js";
4
+ import hash_string from "../../lib/hash_string.js";
5
+ import types from "../../lib/types.js";
6
+
7
+ const remove_token_from_user = (user_id = null, token = null) => {
8
+ return accounts_query("remove_reset_token", { user_id, token });
9
+ };
10
+
11
+ const add_session_to_user = (user_id = null, session = null) => {
12
+ return accounts_query("add_session", { user_id, session });
13
+ };
14
+
15
+ const set_new_password_on_user = async (user_id = "", password = "") => {
16
+ const hashed_password = hash_string(password);
17
+ await accounts_query("set_new_password", { user_id, hashed_password });
18
+ return hashed_password;
19
+ };
20
+
21
+ const reset_user_sessions = (user_id = '') => {
22
+ return accounts_query("reset_user_sessions", { user_id });
23
+ };
24
+
25
+ const get_user_with_token = (token = "") => {
26
+ return accounts_query("user_with_reset_token", {
27
+ "passwordResetTokens.token": token,
28
+ });
29
+ };
30
+
31
+ const reset_password = async (reset_password_options = {}) => {
32
+ const user = await get_user_with_token(reset_password_options.token);
33
+
34
+ if (!user) {
35
+ throw new Error('Invalid password reset token.');
36
+ }
37
+
38
+ await reset_user_sessions(user?._id || user?.user_id);
39
+
40
+ await set_new_password_on_user(
41
+ user?._id || user?.user_id,
42
+ reset_password_options.password
43
+ );
44
+
45
+ const updated_user = await remove_token_from_user(
46
+ user?._id || user?.user_id,
47
+ reset_password_options.token
48
+ );
49
+
50
+ const session = generate_account_session();
51
+ await add_session_to_user(updated_user?._id || updated_user?.user_id, session);
52
+
53
+ if (
54
+ types.is_function(process.joystick?.app_options?.accounts?.events?.onResetPassword) ||
55
+ types.is_function(process.joystick?.app_options?.accounts?.events?.on_reset_password)
56
+ ) {
57
+ (process.joystick?.app_options?.accounts?.events?.onResetPassword || process.joystick?.app_options?.accounts?.events?.on_reset_password)({
58
+ user: updated_user,
59
+ ...session,
60
+ });
61
+ }
62
+
63
+ return {
64
+ user: get_output(updated_user, reset_password_options?.output),
65
+ ...session,
66
+ };
67
+ };
68
+
69
+ export default reset_password;
@@ -0,0 +1,7 @@
1
+ import accounts_query from "../../databases/queries/accounts.js";
2
+
3
+ const add = (role = '') => {
4
+ return accounts_query("add_role", { role });
5
+ };
6
+
7
+ export default add;
@@ -0,0 +1,7 @@
1
+ import accounts_query from "../../databases/queries/accounts.js";
2
+
3
+ const grant = (user_id = '', role = '') => {
4
+ return accounts_query("grant_role", { user_id, role });
5
+ };
6
+
7
+ export default grant;
@@ -0,0 +1,18 @@
1
+ import add from './add.js';
2
+ import remove from './remove.js';
3
+ import list from './list.js';
4
+ import grant from './grant.js';
5
+ import revoke from './revoke.js';
6
+ import user_has_role from './user_has_role.js';
7
+
8
+ const roles = {
9
+ add,
10
+ remove,
11
+ list,
12
+ grant,
13
+ revoke,
14
+ userHasRole: user_has_role,
15
+ user_has_role,
16
+ };
17
+
18
+ export default roles;
@@ -0,0 +1,7 @@
1
+ import accounts_query from '../../databases/queries/accounts.js';
2
+
3
+ const list = () => {
4
+ return accounts_query("list_roles");
5
+ };
6
+
7
+ export default list;
@@ -0,0 +1,7 @@
1
+ import accounts_query from '../../databases/queries/accounts.js';
2
+
3
+ const remove = (role = '') => {
4
+ return accounts_query("remove_role", { role });
5
+ }
6
+
7
+ export default remove;
@@ -0,0 +1,7 @@
1
+ import accounts_query from '../../databases/queries/accounts.js';
2
+
3
+ const revoke = (user_id = '', role = '') => {
4
+ return accounts_query("revoke_role", { user_id, role });
5
+ };
6
+
7
+ export default revoke;
@@ -0,0 +1,7 @@
1
+ import accounts_query from '../../databases/queries/accounts.js';
2
+
3
+ const user_has_role = (user_id = '', role = '') => {
4
+ return accounts_query("user_has_role", { user_id, role });
5
+ };
6
+
7
+ export default user_has_role;
@@ -0,0 +1,48 @@
1
+ import accounts_query from "../databases/queries/accounts.js";
2
+ import load_settings from "../settings/load.js";
3
+ import send_email from "../email/send.js";
4
+
5
+ const send_verification_email = (email_address = "", token = "") => {
6
+ const settings = load_settings();
7
+
8
+ return send_email({
9
+ to: email_address,
10
+ from: settings?.config?.email?.from,
11
+ subject:
12
+ settings?.config?.email?.verify?.subject || "Verify your email address",
13
+ template: settings?.config?.email?.verify?.template || "verify_email",
14
+ props: {
15
+ // NOTE: Keep camelCase for backwards compatibility.
16
+ emailAddress: email_address,
17
+ email_address,
18
+ url:
19
+ process.env.NODE_ENV === "development"
20
+ ? `http://localhost:${process.env.PORT}/api/_accounts/verify_email?token=${token}`
21
+ : `${process.env.ROOT_URL}/api/_accounts/verify_email?token=${token}`,
22
+ },
23
+ });
24
+ };
25
+
26
+ const get_email_verification_token = (user_id = "") => {
27
+ return accounts_query("create_email_verification_token", {
28
+ user_id,
29
+ });
30
+ };
31
+
32
+ const get_user = (user_id = "") => {
33
+ return accounts_query("user", { _id: user_id });
34
+ };
35
+
36
+ const send_email_verification = async (user_id = '') => {
37
+ const user = await get_user(user_id);
38
+
39
+ if (!user?.emailVerified && !user?.emailVerifiedAt) {
40
+ const token = await get_email_verification_token(user?._id || user?.user_id);
41
+ await send_verification_email(user?.emailAddress, token);
42
+ }
43
+
44
+ return true;
45
+ };
46
+
47
+ export default send_email_verification;
48
+
@@ -0,0 +1,12 @@
1
+ import set_cookie from "../../lib/set_cookie.js";
2
+
3
+ const set_account_cookie = (res = null, authentication = null) => {
4
+ if (!res || !authentication) return null;
5
+
6
+ set_cookie(res, 'joystick_login_token', authentication.token, authentication.token_expires_at);
7
+ set_cookie(res, 'joystick_login_token_expires_at', authentication.token_expires_at, authentication.token_expires_at);
8
+
9
+ return res;
10
+ };
11
+
12
+ export default set_account_cookie;
@@ -0,0 +1,46 @@
1
+ import accounts_query from "../databases/queries/accounts.js";
2
+ import hash_string from "../../lib/hash_string.js";
3
+ import types from "../../lib/types.js";
4
+
5
+ const reset_user_sessions = (user_id = null) => {
6
+ return accounts_query("reset_user_sessions", { user_id });
7
+ };
8
+
9
+ const set_new_password_on_user = async (user_id = "", password = "") => {
10
+ const hashed_password = hash_string(password);
11
+ await accounts_query("set_new_password", { user_id, hashed_password });
12
+ return hashed_password;
13
+ };
14
+
15
+ const get_user = (user_id = "") => {
16
+ return accounts_query("user", { _id: user_id });
17
+ };
18
+
19
+ const set_password = async (set_password_options = {}) => {
20
+ if (!set_password_options?.user_id || !set_password_options?.password) {
21
+ throw new Error('Must provider a user_id and password to set.');
22
+ }
23
+
24
+ const user = await get_user(set_password_options?.user_id);
25
+
26
+ if (!user) {
27
+ throw new Error("Invalid user_id.");
28
+ }
29
+
30
+ await set_new_password_on_user(user?._id || user?.user_id, set_password_options?.password);
31
+ await reset_user_sessions(user?._id || user?.user_id);
32
+
33
+ if (
34
+ types.is_function(process.joystick?.app_options?.accounts?.events?.onSetPassword) ||
35
+ types.is_function(process.joystick?.app_options?.accounts?.events?.on_set_password)
36
+ ) {
37
+ (
38
+ process.joystick?.app_options?.accounts?.events?.onSetPassword ||
39
+ process.joystick?.app_options?.accounts?.events?.on_set_password
40
+ )(set_password_options?.user_id);
41
+ }
42
+
43
+ return true;
44
+ };
45
+
46
+ export default set_password;
@@ -0,0 +1,158 @@
1
+ import accounts_query from "../databases/queries/accounts.js";
2
+ import camel_pascal_to_snake from "../../lib/camel_pascal_to_snake.js";
3
+ import create_accounts_metadata_table_columns from "../databases/postgresql/accounts/create_accounts_metadata_table_columns.js";
4
+ import database_type_map from "../databases/database_type_map.js";
5
+ import generate_account_session from "./generate_account_session.js";
6
+ import get_output from "../api/get_output.js";
7
+ import get_target_database_connection from "../databases/get_target_database_connection.js";
8
+ import hash_string from "../../lib/hash_string.js";
9
+ import roles from "./roles/index.js";
10
+ import types from "../../lib/types.js";
11
+
12
+ const add_session_to_user = (user_id = null, session = null) => {
13
+ return accounts_query("add_session", { user_id, session });
14
+ };
15
+
16
+ const get_user_by_user_id = (user_id = "") => {
17
+ return accounts_query("user", { _id: user_id });
18
+ };
19
+
20
+ const insert_user_in_database = async (user = {}) => {
21
+ return accounts_query("create_user", user);
22
+ };
23
+
24
+ const sqlize_metadata = (metadata = {}) => {
25
+ return Object.entries(metadata || {}).reduce((sqlized = {}, [key, value]) => {
26
+ sqlized[camel_pascal_to_snake(key)] = value;
27
+ return sqlized;
28
+ }, {});
29
+ };
30
+
31
+ const get_user_to_create = async (options = {}) => {
32
+ const users_database = get_target_database_connection('users');
33
+ const users_database_type = database_type_map[users_database?.provider];
34
+
35
+ let user = {
36
+ password: hash_string(options.password),
37
+ };
38
+
39
+ if (options?.email_address || options?.emailAddress) {
40
+ user.emailAddress = options?.email_address || options.emailAddress;
41
+ }
42
+
43
+ if (options?.username) {
44
+ user.username = options?.username;
45
+ }
46
+
47
+ if (
48
+ options?.metadata &&
49
+ types.is_object(options.metadata) &&
50
+ users_database_type === 'sql'
51
+ ) {
52
+ const sqlized_metadata = sqlize_metadata(options.metadata);
53
+ await create_accounts_metadata_table_columns(users_database, sqlized_metadata);
54
+
55
+ const metadata = { ...(options?.metadata || {}) };
56
+
57
+ if (metadata?.roles) {
58
+ // NOTE: We don't need roles information here so trash it.
59
+ delete metadata.roles;
60
+ }
61
+
62
+ user = {
63
+ ...(sqlize_metadata(metadata)),
64
+ ...user,
65
+ }
66
+ }
67
+
68
+ if (options?.metadata && types.is_object(options.metadata) && users_database_type === 'nosql') {
69
+ let metadata = { ...(options?.metadata || {}) };
70
+
71
+ if (metadata?.roles) {
72
+ // NOTE: We don't need roles information here so trash it.
73
+ delete metadata.roles;
74
+ }
75
+
76
+ // NOTE: Put metadata first to avoid overrides of account fields (e.g., passing
77
+ // metadata.password or metadata.email_address).
78
+ user = {
79
+ ...(metadata || {}),
80
+ ...user,
81
+ };
82
+ }
83
+
84
+ return user;
85
+ };
86
+
87
+ const get_existing_user = (email_address = "", username = "") => {
88
+ return accounts_query("existing_user", { email_address, username });
89
+ };
90
+
91
+ const signup = async (signup_options = {}) => {
92
+ if (!signup_options.email_address && !signup_options.emailAddress) {
93
+ throw new Error("Email address is required.");
94
+ }
95
+
96
+ if (!signup_options.password) {
97
+ throw new Error("Password is required.");
98
+ }
99
+
100
+ const existing_user = await get_existing_user(
101
+ signup_options.email_address || signup_options.emailAddress,
102
+ signup_options?.username
103
+ );
104
+
105
+ if (existing_user && process.env.NODE_ENV !== 'test') {
106
+ throw new Error(
107
+ `A user with the ${existing_user.existing_username ? "username" : "email address"} ${
108
+ existing_user.existing_username || existing_user.existing_email_address
109
+ } already exists.`
110
+ );
111
+ }
112
+
113
+ let user_to_create;
114
+ // NOTE: _id on nosql databases and user_id on sql databases.
115
+ let user_id = existing_user?._id || existing_user?.user_id;
116
+
117
+ if (!existing_user) {
118
+ user_to_create = await get_user_to_create(signup_options);
119
+ user_id = await insert_user_in_database(user_to_create);
120
+ }
121
+
122
+ const user = await get_user_by_user_id(user_id);
123
+ const session = generate_account_session();
124
+
125
+ if (user_id) {
126
+ await add_session_to_user(user_id, session);
127
+ }
128
+
129
+ // NOTE: Add roles to user ONLY if we're in a test environment. Do this to avoid
130
+ // client-side attacks assigning unauthorized privileges.
131
+ if (signup_options?.metadata?.roles?.length > 0 && process.env.NODE_ENV === 'test') {
132
+ for (let i = 0; i < signup_options?.metadata?.roles?.length; i += 1) {
133
+ const role = signup_options?.metadata?.roles[i];
134
+ roles.grant(user?.user_id, role);
135
+ }
136
+ }
137
+
138
+ if (
139
+ types.is_function(process.joystick?.app_options?.accounts?.events?.onSignup) ||
140
+ types.is_function(process.joystick?.app_options?.accounts?.events?.on_signup)
141
+ ) {
142
+ (process.joystick?.app_options?.accounts?.events?.onSignup || process.joystick?.app_options?.accounts?.events?.on_signup)({
143
+ ...session,
144
+ user_id,
145
+ userId: user_id,
146
+ user,
147
+ });
148
+ }
149
+
150
+ return {
151
+ ...session,
152
+ userId: user_id,
153
+ user_id,
154
+ user: get_output(user, signup_options?.output),
155
+ };
156
+ };
157
+
158
+ export default signup;
@@ -0,0 +1,12 @@
1
+ import unset_cookie from "../../lib/unset_cookie.js";
2
+
3
+ const unset_account_cookie = (res = null) => {
4
+ if (!res) return null;
5
+
6
+ unset_cookie('joystick_login_token', res);
7
+ unset_cookie('joystick_login_token_expires_at', res);
8
+
9
+ return res;
10
+ };
11
+
12
+ export default unset_account_cookie;
@@ -0,0 +1,32 @@
1
+ /* eslint-disable consistent-return */
2
+
3
+ import accounts_query from "../databases/queries/accounts.js";
4
+
5
+ const mark_email_verified_at = (user_id = "", token = "") => {
6
+ return accounts_query("mark_email_verified_at", { user_id, token });
7
+ };
8
+
9
+ const get_user_from_token = (verify_email_token = "") => {
10
+ return accounts_query("user_with_verify_email_token", {
11
+ token: verify_email_token,
12
+ });
13
+ };
14
+
15
+ const verify_email = async (verify_email_options = {}) => {
16
+ const user = await get_user_from_token(verify_email_options?.token);
17
+
18
+ if (!user) {
19
+ throw new Error(`A user with this token could not be found.`);
20
+ }
21
+
22
+ await mark_email_verified_at(user?._id || user?.user_id, verify_email_options?.token);
23
+
24
+ if (typeof process.joystick?.app_options?.accounts?.events?.onVerifyEmail === 'function') {
25
+ process.joystick?.app_options?.accounts?.events?.onVerifyEmail(user?.emailAddress || user?.email_address);
26
+ }
27
+
28
+ return true;
29
+ };
30
+
31
+ export default verify_email;
32
+
@@ -0,0 +1,17 @@
1
+ import has_login_token_expired from "../../accounts/has_login_token_expired.js";
2
+
3
+ const authenticated = (req = {}, res = {}) => {
4
+ const login_token_has_expired = has_login_token_expired(
5
+ res,
6
+ req?.cookies?.joystick_login_token,
7
+ req?.cookies?.joystick_login_token_expires_at
8
+ );
9
+
10
+ const status = !login_token_has_expired ? 200 : 401;
11
+
12
+ return res
13
+ .status(status)
14
+ .send(JSON.stringify({ status, authenticated: !login_token_has_expired }));
15
+ };
16
+
17
+ export default authenticated;
@@ -0,0 +1,36 @@
1
+ import accounts from "../../accounts/index.js";
2
+ import default_user_output_fields from "../../accounts/default_user_output_fields.js";
3
+ import handle_api_error from '../handle_api_error.js';
4
+
5
+ const login = async (req = {}, res = {}) => {
6
+ try {
7
+ const login = await accounts.login({
8
+ email_address: req?.body?.emailAddress || req?.body?.email_address,
9
+ username: req?.body?.username,
10
+ password: req?.body?.password,
11
+ output: req?.body?.output || default_user_output_fields,
12
+ });
13
+
14
+ if (process.env.NODE_ENV !== 'test') {
15
+ accounts._set_account_cookie(res, {
16
+ token: login?.token,
17
+ token_expires_at: login?.token_expires_at || login?.tokenExpiresAt,
18
+ });
19
+ }
20
+
21
+ const response = {
22
+ ...(login?.user || {}),
23
+ };
24
+
25
+ if (process.env.NODE_ENV === 'test') {
26
+ response.joystick_token = login?.token;
27
+ response.joystick_login_token_expires_at = login?.token_expires_at;
28
+ }
29
+
30
+ res.status(200).send(JSON.stringify(response));
31
+ } catch(error) {
32
+ handle_api_error('accounts.login', error, res);
33
+ }
34
+ };
35
+
36
+ export default login;
@@ -0,0 +1,20 @@
1
+ import accounts from "../../accounts/index.js";
2
+ import types from "../../../lib/types.js";
3
+
4
+ const logout = (req = {}, res = {}) => {
5
+ accounts._unset_account_cookie(res);
6
+
7
+ if (
8
+ types.is_function(process?.joystick?.app_options?.accounts?.events?.onLogout) ||
9
+ types.is_function(process?.joystick?.app_options?.accounts?.events?.on_logout)
10
+ ) {
11
+ (
12
+ process?.joystick?.app_options?.accounts?.events?.onLogout ||
13
+ process?.joystick?.app_options?.accounts?.events?.on_logout
14
+ )(req?.context?.user);
15
+ }
16
+
17
+ res.status(200).send(JSON.stringify({}));
18
+ };
19
+
20
+ export default logout;