@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,164 @@
1
+ import cluster from 'cluster';
2
+ import timestamps from '../../../../lib/timestamps.js';
3
+
4
+ const queues ={
5
+ add_job: function (job_to_add = {}) {
6
+ const db = this.db?.collection(`queue_${this.queue.name}`);
7
+ return db.insertOne({
8
+ ...job_to_add,
9
+ attempts: 0,
10
+ });
11
+ },
12
+ count_jobs: function (status = '') {
13
+ const db = this.db?.collection(`queue_${this.queue.name}`);
14
+ return db.countDocuments({ status, locked_by: this.machine_id });
15
+ },
16
+ delete_job: function (job_id = '') {
17
+ const db = this.db?.collection(`queue_${this.queue.name}`);
18
+ return db.deleteOne({ _id: job_id });
19
+ },
20
+ delete_incomplete_jobs_for_machine: function () {
21
+ const db = this.db?.collection(`queue_${this.queue.name}`);
22
+ return db.deleteMany({ status: { $in: ['incomplete', 'running'] }, locked_by: this.machine_id });
23
+ },
24
+ get_jobs: function (query = {}) {
25
+ const db = this.db?.collection(`queue_${this.queue.name}`);
26
+ return db.find({
27
+ ...query,
28
+ environment: process.env.NODE_ENV,
29
+ }).toArray();
30
+ },
31
+ get_next_job_to_run: async function () {
32
+ const db = this.db?.collection(`queue_${this.queue.name}`);
33
+
34
+ const next_job = await db.findOneAndUpdate({
35
+ $or: [
36
+ {
37
+ status: 'pending',
38
+ environment: process.env.NODE_ENV,
39
+ // NOTE: Do this to avoid accidentally running jobs intended for the future too early.
40
+ next_run_at: { $lte: timestamps.get_current_time() },
41
+ locked_by: { $exists: false }
42
+ },
43
+ {
44
+ status: 'pending',
45
+ environment: process.env.NODE_ENV,
46
+ // NOTE: Do this to avoid accidentally running jobs intended for the future too early.
47
+ next_run_at: { $lte: timestamps.get_current_time() },
48
+ locked_by: null,
49
+ }
50
+ ]
51
+ }, {
52
+ $set: {
53
+ status: 'running',
54
+ started_at: timestamps.get_current_time(),
55
+ locked_by: this.machine_id,
56
+ },
57
+ }, {
58
+ sort: {
59
+ next_run_at: 1,
60
+ },
61
+ });
62
+
63
+ return next_job;
64
+ },
65
+ initialize_database: async function () {
66
+ // NOTE: Add this check to avoid clustered apps from creating a race condition
67
+ // when initializing indexes below (they step on each other's toes and cause
68
+ // errors to be thrown). Only a primary or 1st worker should run this.
69
+
70
+ if (cluster.isPrimary || (cluster.isWorker && cluster.worker.id === 1)) {
71
+ try {
72
+ await this.db.createCollection(`queue_${this.queue.name}`);
73
+ } catch {
74
+ // NOTE: Drop the error. We anticipate it after the first run.
75
+ }
76
+
77
+ const db = this.db?.collection(`queue_${this.queue.name}`);
78
+
79
+ const indexes = await db?.indexes();
80
+
81
+ await db.createIndex({ status: 1 });
82
+ await db.createIndex({ status: 1, next_run_at: 1 });
83
+ await db.createIndex({ status: 1, environment: 1, next_run_at: 1, locked_by: 1 });
84
+
85
+ if (this.queue.options?.cleanup?.completedAfterSeconds || this.queue.options?.cleanup?.completed_after_seconds) {
86
+ if (indexes?.find((index) => index?.name === 'completed_at_1')) {
87
+ await db.dropIndex({ completed_at: 1 });
88
+ }
89
+
90
+ await db.createIndex({ completed_at: 1 }, { expireAfterSeconds: this?.queue?.options?.cleanup?.completedAfterSeconds || this.queue.options?.cleanup?.completed_after_seconds });
91
+ }
92
+
93
+ if (this.queue.options?.cleanup?.failedAfterSeconds || this.queue.options?.cleanup?.failed_after_seconds) {
94
+ if (indexes?.find((index) => index?.name === 'failed_at_1')) {
95
+ await db.dropIndex({ failed_at: 1 });
96
+ }
97
+
98
+ await db.createIndex({ failed_at: 1 }, { expireAfterSeconds: this?.queue?.options?.cleanup?.failedAfterSeconds || this.queue.options?.cleanup?.failed_after_seconds });
99
+ }
100
+ }
101
+ },
102
+ log_attempt: function (job_id = '') {
103
+ const db = this.db?.collection(`queue_${this.queue.name}`);
104
+ return db.updateOne({ _id: job_id }, {
105
+ $inc: {
106
+ attempts: 1,
107
+ },
108
+ });
109
+ },
110
+ requeue_job: function (job_id = '', next_run_at = null) {
111
+ const db = this.db?.collection(`queue_${this.queue.name}`);
112
+ return db.updateOne({ _id: job_id }, {
113
+ $set: {
114
+ status: 'pending',
115
+ next_run_at,
116
+ },
117
+ $unset: {
118
+ locked_by: '',
119
+ }
120
+ });
121
+ },
122
+ set_job_completed: function (job_id = '') {
123
+ const db = this.db?.collection(`queue_${this.queue.name}`);
124
+ return db.updateOne({ _id: job_id }, {
125
+ $set: {
126
+ status: 'completed',
127
+ // NOTE: Format this way for ttl indexes.
128
+ completed_at: timestamps.get_current_time({ mongodb_ttl: true }),
129
+ },
130
+ });
131
+ },
132
+ set_job_failed: function (job_id = '', error = '') {
133
+ const db = this.db?.collection(`queue_${this.queue.name}`);
134
+ return db.updateOne({ _id: job_id }, {
135
+ $set: {
136
+ status: 'failed',
137
+ // NOTE: Format this way for ttl indexes.
138
+ failed_at: timestamps.get_current_time({ mongodb_ttl: true }),
139
+ error,
140
+ },
141
+ });
142
+ },
143
+ set_jobs_for_machine_pending: function () {
144
+ const db = this.db?.collection(`queue_${this.queue.name}`);
145
+
146
+ // NOTE: Do NOT change the next_run_at as we want priority to remain intact. Oldest jobs
147
+ // should still be FIFO.
148
+ return db.updateMany({
149
+ status: { $in: ['pending', 'running'] },
150
+ locked_by: this.machine_id
151
+ }, {
152
+ $set: {
153
+ status: 'pending',
154
+ },
155
+ // NOTE: Unpin job from the machine that originally had it and toss it back in the queue
156
+ // for any machine to pick it up.
157
+ $unset: {
158
+ locked_by: '',
159
+ }
160
+ });
161
+ },
162
+ };
163
+
164
+ export default queues;
@@ -0,0 +1,22 @@
1
+ import generate_id from "../../../../lib/generate_id.js";
2
+
3
+ const sessions = {
4
+ create_session: async () => {
5
+ const session_id = generate_id(16);
6
+
7
+ await process.databases._sessions?.collection('sessions').insertOne({
8
+ _id: session_id,
9
+ csrf: generate_id(32),
10
+ created_at: new Date(new Date().toISOString()),
11
+ });
12
+
13
+ return session_id;
14
+ },
15
+ get_session: async (input = {}) => {
16
+ return process.databases._sessions?.collection('sessions').findOne({
17
+ _id: input?.session_id,
18
+ });
19
+ },
20
+ };
21
+
22
+ export default sessions;
@@ -0,0 +1,379 @@
1
+ import generate_id from "../../../../lib/generate_id.js";
2
+ import camel_pascal_to_snake from "../../../../lib/camel_pascal_to_snake.js";
3
+
4
+ const accounts = {
5
+ add_password_reset_token: async (input = {}) => {
6
+ const [user] = await process.databases._users?.query(
7
+ `SELECT user_id FROM users WHERE email_address = $1;`,
8
+ [input?.email_address]
9
+ );
10
+
11
+ await process.databases._users?.query(
12
+ `INSERT INTO users_password_reset_tokens(user_id, token, requested_at) VALUES ($1, $2, $3);`,
13
+ [user?.user_id, input?.token, new Date().toISOString()],
14
+ );
15
+ },
16
+ add_role: async (input = {}) => {
17
+ const [existing_role] = await process.databases._users?.query(
18
+ `SELECT * FROM roles WHERE role = $1;`,
19
+ [input?.role]
20
+ );
21
+
22
+ if (!existing_role && input?.role) {
23
+ await process.databases._users?.query(
24
+ `INSERT INTO roles(role) VALUES ($1);`,
25
+ [input?.role],
26
+ );
27
+
28
+ return {
29
+ _id: input?.user_id,
30
+ action: "add",
31
+ role: input?.role,
32
+ ok: true,
33
+ error: null,
34
+ };
35
+ }
36
+
37
+ return {
38
+ action: "add",
39
+ role: input?.role,
40
+ ok: false,
41
+ error: input?.role
42
+ ? `Role already exists: ${input?.role}.`
43
+ : `Must pass a name for role to add.`,
44
+ };
45
+ },
46
+ add_session: async (input = {}) => {
47
+ await process.databases._users?.query(
48
+ `INSERT INTO users_sessions(user_id, token, token_expires_at) VALUES ($1, $2, $3);`,
49
+ [input?.user_id, input?.session?.token, input?.session?.token_expires_at]
50
+ );
51
+ },
52
+ create_email_verification_token: async (input = {}) => {
53
+ const token = generate_id(16);
54
+
55
+ await process.databases._users?.query(
56
+ `INSERT INTO users_verify_email_tokens(user_id, token) VALUES ($1, $2);`,
57
+ [input?.user_id, token]
58
+ );
59
+
60
+ return token;
61
+ },
62
+ create_user: async (input = {}) => {
63
+ const user_id = generate_id(16);
64
+
65
+ const keys = ['user_id', ...(Object.keys(input || {}) || [])]?.map((input_key) => {
66
+ return camel_pascal_to_snake(input_key);
67
+ })?.join(',');
68
+
69
+ const values = [user_id, ...(Object.values(input) || [])];
70
+
71
+ await process.databases._users?.query(
72
+ `INSERT INTO users(${keys}) VALUES (${values?.map((_, index) => `$${index + 1}`)});`,
73
+ values,
74
+ );
75
+
76
+ return user_id;
77
+ },
78
+ delete_old_sessions: async (input = {}) => {
79
+ await process.databases._users?.query(
80
+ `DELETE FROM users_sessions WHERE user_id = $1 AND token_expires_at::timestamp < NOW()`,
81
+ [input?.user_id]
82
+ );
83
+ },
84
+ delete_user: async (input = {}) => {
85
+ await process.databases._users?.query(
86
+ `DELETE FROM users WHERE user_id = $1`,
87
+ [input?.user_id]
88
+ );
89
+ },
90
+ existing_user: async (input = {}) => {
91
+ let existing_user_with_email_address;
92
+ let existing_user_with_username;
93
+
94
+ if (input?.email_address) {
95
+ const [existing_user] = await process.databases._users?.query(
96
+ `SELECT * FROM users WHERE email_address = $1;`,
97
+ [input?.email_address]
98
+ );
99
+
100
+ existing_user_with_email_address = existing_user;
101
+ }
102
+
103
+ if (input?.username) {
104
+ const [existing_user] = await process.databases._users?.query(
105
+ `SELECT * FROM users WHERE username = $1;`,
106
+ [input?.username]
107
+ );
108
+
109
+ existing_user_with_username = existing_user;
110
+ }
111
+
112
+ return existing_user_with_email_address || existing_user_with_username ? {
113
+ existing_email_address: existing_user_with_email_address?.email_address,
114
+ existing_username: existing_user_with_username?.username,
115
+ } : null;
116
+ },
117
+ get_existing_session: async (input = {}) => {
118
+ const user_sessions = await process.databases._users?.query(
119
+ `SELECT * FROM users_sessions WHERE user_id = $1;`,
120
+ [input.user_id]
121
+ );
122
+
123
+ if (user_sessions?.length > 0) {
124
+ const sessions_by_last_to_expire = user_sessions.sort((a, b) => {
125
+ return a.token_expires_at > b.token_expires_at ? -1 : 1;
126
+ });
127
+
128
+ return sessions_by_last_to_expire.shift();
129
+ }
130
+
131
+ return null;
132
+ },
133
+ get_password_reset_token: async (input = {}) => {
134
+ const [password_reset_token] = await process.databases._users?.query(
135
+ `SELECT * FROM users_password_reset_tokens WHERE user_id = $1`,
136
+ [input?.user_id],
137
+ );
138
+
139
+ if (password_reset_token) {
140
+ return password_reset_token?.token || null;
141
+ }
142
+
143
+ return null;
144
+ },
145
+ grant_role: async (input = {}) => {
146
+ const user = await process.databases._users?.query(
147
+ `SELECT * FROM users WHERE user_id = $1;`,
148
+ [input?.user_id]
149
+ );
150
+
151
+ if (user) {
152
+ await process.databases._users?.query(
153
+ `INSERT INTO users_roles(user_id, role) VALUES ($1, $2) ON CONFLICT DO NOTHING;`,
154
+ [input?.user_id, input?.role]
155
+ );
156
+
157
+ const [existing_role] = await process.databases._users?.query(
158
+ `SELECT * FROM roles WHERE role = $1;`,
159
+ [input?.role]
160
+ );
161
+
162
+ if (!existing_role) {
163
+ await process.databases._users?.query(
164
+ `INSERT INTO roles(role) VALUES ($1) ON CONFLICT DO NOTHING;`,
165
+ [input?.role]
166
+ );
167
+ }
168
+
169
+ return {
170
+ _id: input?.user_id,
171
+ action: "grant",
172
+ role: input?.role,
173
+ ok: true,
174
+ error: null,
175
+ };
176
+ }
177
+
178
+ return {
179
+ _id: input?.user_id,
180
+ action: "grant",
181
+ role: input?.role,
182
+ ok: false,
183
+ error: `User not found with the _id ${input?.user_id}.`,
184
+ };
185
+ },
186
+ list_roles: async () => {
187
+ const roles = await process.databases._users?.query(
188
+ `SELECT * FROM roles;`
189
+ );
190
+
191
+ return (roles || []).map(({ role }) => role);
192
+ },
193
+ mark_email_verified_at: async (input = {}) => {
194
+ await process.databases._users?.query(
195
+ `UPDATE users SET email_verified = true, email_verified_at = $1 WHERE user_id = $2;`,
196
+ [new Date().toISOString(), input?.user_id]
197
+ );
198
+
199
+ await process.databases._users?.query(
200
+ `DELETE FROM users_verify_email_tokens WHERE token = $1`,
201
+ [input?.token]
202
+ );
203
+ },
204
+ remove_reset_token: async (input = {}) => {
205
+ await process.databases._users?.query(
206
+ `DELETE FROM users_password_reset_tokens WHERE user_id = $1 AND token = $2;`,
207
+ [input?.user_id, input?.token],
208
+ );
209
+
210
+ const [user] = await process.databases._users?.query(
211
+ `SELECT * FROM users WHERE user_id = $1;`,
212
+ [input?.user_id]
213
+ );
214
+
215
+ return user;
216
+ },
217
+ remove_role: async (input = {}) => {
218
+ const [existing_role] = await process.databases._users?.query(
219
+ `SELECT * FROM roles WHERE role = $1;`,
220
+ [input?.role]
221
+ );
222
+
223
+ if (existing_role) {
224
+ await process.databases._users?.query(
225
+ `DELETE FROM users_roles WHERE role = $1;`,
226
+ [input?.role]
227
+ );
228
+
229
+ await process.databases._users?.query(
230
+ `DELETE FROM roles WHERE role = $1;`,
231
+ [input?.role]
232
+ );
233
+
234
+ return {
235
+ _id: input?.user_id,
236
+ action: "remove",
237
+ role: input?.role,
238
+ ok: true,
239
+ error: null,
240
+ };
241
+ }
242
+
243
+ return {
244
+ action: "add",
245
+ role: input?.role,
246
+ ok: false,
247
+ error: `Could not find an existing role with the name ${input?.role}.`,
248
+ };
249
+ },
250
+ reset_user_sessions: async (input = {}) => {
251
+ await process.databases._users?.query(
252
+ `DELETE FROM users_sessions WHERE user_id = $1;`,
253
+ [input.user_id]
254
+ );
255
+ },
256
+ revoke_role: async (input = {}) => {
257
+ const user = await process.databases._users?.query(
258
+ `SELECT * FROM users WHERE user_id = $1;`,
259
+ [input?.user_id]
260
+ );
261
+
262
+ if (user) {
263
+ await process.databases._users?.query(
264
+ `DELETE FROM users_roles WHERE user_id = $1 AND role = $2;`,
265
+ [input?.user_id, input?.role]
266
+ );
267
+
268
+ return {
269
+ _id: input?.user_id,
270
+ action: "revoke",
271
+ role: input?.role,
272
+ ok: true,
273
+ error: null,
274
+ };
275
+ }
276
+
277
+ return {
278
+ _id: input?.user_id,
279
+ action: "revoke",
280
+ role: input?.role,
281
+ ok: false,
282
+ error: `User not found with the _id ${input?.user_id}.`,
283
+ };
284
+ },
285
+ set_new_password: async (input = {}) => {
286
+ await process.databases._users?.query(
287
+ `UPDATE users SET password = $1 WHERE user_id = $2;`,
288
+ [input?.hashed_password, input?.user_id],
289
+ );
290
+ },
291
+ user: async (input = {}) => {
292
+ if (input?.email_address) {
293
+ const [user] = await process.databases._users?.query(
294
+ `SELECT * FROM users WHERE email_address = $1;`,
295
+ [input?.email_address]
296
+ );
297
+
298
+ return user;
299
+ }
300
+
301
+ if (input?.username) {
302
+ const [user] = await process.databases._users?.query(
303
+ `SELECT * FROM users WHERE username = $1;`,
304
+ [input?.username]
305
+ );
306
+
307
+ return user;
308
+ }
309
+
310
+ if (input?._id) {
311
+ const [user] = await process.databases._users?.query(
312
+ `SELECT * FROM users WHERE user_id = $1;`,
313
+ [input?._id]
314
+ );
315
+
316
+ return user;
317
+ }
318
+
319
+ return null;
320
+ },
321
+ user_has_role: async (input = {}) => {
322
+ const user = await process.databases._users?.query(
323
+ `SELECT * FROM users WHERE user_id = $1;`,
324
+ [input?.user_id]
325
+ );
326
+
327
+ if (user) {
328
+ const [existing_role] = await process.databases._users?.query(
329
+ `SELECT * FROM users_roles WHERE user_id = $1 AND role = $2;`,
330
+ [input?.user_id, input?.role]
331
+ );
332
+
333
+ return !!existing_role;
334
+ }
335
+
336
+ return false;
337
+ },
338
+ user_with_login_token: async (input = {}) => {
339
+ const [existing_user] = await process.databases._users?.query(
340
+ `SELECT user_id FROM users_sessions WHERE token = $1;`,
341
+ [input.token]
342
+ );
343
+
344
+ const [user] = await process.databases._users?.query(
345
+ `SELECT * FROM users WHERE user_id = $1;`,
346
+ [existing_user?.user_id],
347
+ );
348
+
349
+ return user;
350
+ },
351
+ user_with_reset_token: async (input = {}) => {
352
+ const [existing_user] = await process.databases._users?.query(
353
+ `SELECT user_id FROM users_password_reset_tokens WHERE token = $1;`,
354
+ [input["passwordResetTokens.token"]],
355
+ );
356
+
357
+ const [user] = await process.databases._users?.query(
358
+ `SELECT * FROM users WHERE user_id = $1;`,
359
+ [existing_user?.user_id]
360
+ );
361
+
362
+ return user;
363
+ },
364
+ user_with_verify_email_token: async (input = {}) => {
365
+ const [existing_user] = await process.databases._users?.query(
366
+ `SELECT user_id FROM users_verify_email_tokens WHERE token = $1;`,
367
+ [input.token],
368
+ );
369
+
370
+ const [user] = await process.databases._users?.query(
371
+ `SELECT * FROM users WHERE user_id = $1;`,
372
+ [existing_user?.user_id],
373
+ );
374
+
375
+ return user;
376
+ },
377
+ };
378
+
379
+ export default accounts;