@joystick.js/node-canary 0.0.0-canary.42 → 0.0.0-canary.420

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 (444) 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 -654
  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 +32 -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_sanitized_context.js +1 -0
  145. package/dist/lib/get_translations.js +1 -0
  146. package/dist/lib/hash_string.js +1 -0
  147. package/dist/lib/is_valid_json.js +1 -0
  148. package/dist/lib/log.js +13 -52
  149. package/dist/lib/node_path_polyfills.js +1 -0
  150. package/dist/lib/parse_json.js +1 -0
  151. package/dist/lib/path_exists.js +1 -0
  152. package/dist/lib/rainbow_road.js +1 -0
  153. package/dist/lib/replace_backslashes_with_forward_slashes.js +1 -0
  154. package/dist/lib/replace_file_protocol.js +1 -0
  155. package/dist/lib/serialize_query_parameters.js +1 -0
  156. package/dist/lib/set_cookie.js +1 -0
  157. package/dist/lib/string_to_slug.js +1 -0
  158. package/dist/lib/timestamps.js +1 -0
  159. package/dist/lib/types.js +1 -0
  160. package/dist/lib/unset_cookie.js +1 -0
  161. package/dist/lib/wait.js +1 -0
  162. package/dist/test/track_function_call.js +1 -0
  163. package/increment_version.js +3 -0
  164. package/package.json +27 -44
  165. package/src/action/class.js +137 -0
  166. package/src/action/index.js +8 -0
  167. package/src/app/accounts/default_user_output_fields.js +10 -0
  168. package/src/app/accounts/delete_user.js +18 -0
  169. package/src/app/accounts/generate_account_session.js +11 -0
  170. package/src/app/accounts/generate_password_reset_token.js +16 -0
  171. package/src/app/accounts/get_browser_safe_user.js +29 -0
  172. package/src/app/accounts/has_login_token_expired.js +9 -0
  173. package/src/app/accounts/index.js +38 -0
  174. package/src/app/accounts/login.js +82 -0
  175. package/src/app/accounts/recover_password.js +58 -0
  176. package/src/app/accounts/reset_password.js +69 -0
  177. package/src/app/accounts/roles/add.js +7 -0
  178. package/src/app/accounts/roles/grant.js +7 -0
  179. package/src/app/accounts/roles/index.js +18 -0
  180. package/src/app/accounts/roles/list.js +7 -0
  181. package/src/app/accounts/roles/remove.js +7 -0
  182. package/src/app/accounts/roles/revoke.js +7 -0
  183. package/src/app/accounts/roles/user_has_role.js +7 -0
  184. package/src/app/accounts/send_email_verification.js +48 -0
  185. package/src/app/accounts/set_account_cookie.js +12 -0
  186. package/src/app/accounts/set_password.js +46 -0
  187. package/src/app/accounts/signup.js +158 -0
  188. package/src/app/accounts/unset_account_cookie.js +12 -0
  189. package/src/app/accounts/verify_email.js +32 -0
  190. package/src/app/api/accounts/authenticated.js +17 -0
  191. package/src/app/api/accounts/login.js +36 -0
  192. package/src/app/api/accounts/logout.js +20 -0
  193. package/src/app/api/accounts/recover_password.js +16 -0
  194. package/src/app/api/accounts/reset_password.js +24 -0
  195. package/src/app/api/accounts/signup.js +49 -0
  196. package/src/app/api/accounts/user.js +21 -0
  197. package/src/app/api/accounts/verify_email.js +11 -0
  198. package/src/app/api/format_api_error.js +10 -0
  199. package/src/app/api/get.js +119 -0
  200. package/src/app/api/get_api_context.js +27 -0
  201. package/src/app/api/get_api_for_data_functions.js +37 -0
  202. package/src/app/api/get_api_url_component.js +5 -0
  203. package/src/app/api/get_output.js +116 -0
  204. package/src/app/api/get_value_from_object.js +8 -0
  205. package/src/app/api/handle_api_error.js +28 -0
  206. package/src/app/api/input_validators.js +227 -0
  207. package/src/app/api/is_array_path.js +6 -0
  208. package/src/app/api/push/health.js +17 -0
  209. package/src/app/api/register_getters.js +57 -0
  210. package/src/app/api/register_setters.js +55 -0
  211. package/src/app/api/sanitize_api_response.js +35 -0
  212. package/src/app/api/set.js +119 -0
  213. package/src/app/api/test/accounts/delete.js +8 -0
  214. package/src/app/api/test/accounts/signup.js +50 -0
  215. package/src/app/api/test/bootstrap.js +36 -0
  216. package/src/app/api/test/process.js +7 -0
  217. package/src/app/api/test/queues.js +25 -0
  218. package/src/app/api/validate_input.js +132 -0
  219. package/src/app/api/validate_session.js +20 -0
  220. package/src/app/api/validate_type.js +24 -0
  221. package/src/app/browser/hmr_client.js +196 -0
  222. package/src/app/browser/process_polyfill.js +11 -0
  223. package/src/app/cron_jobs/register.js +29 -0
  224. package/src/app/databases/database_type_map.js +6 -0
  225. package/src/app/databases/get_target_database_connection.js +25 -0
  226. package/{dist/app/databases/mongodb/availableQueryParameters.js → src/app/databases/mongodb/available_query_parameters.js} +3 -4
  227. package/src/app/databases/mongodb/build_connection_string.js +30 -0
  228. package/src/app/databases/mongodb/build_query_parameters.js +17 -0
  229. package/src/app/databases/mongodb/connect.js +42 -0
  230. package/src/app/databases/mongodb/create_indexes.js +35 -0
  231. package/src/app/databases/postgresql/accounts/create_accounts_metadata_table_columns.js +18 -0
  232. package/src/app/databases/postgresql/connect.js +128 -0
  233. package/src/app/databases/postgresql/create_indexes.js +58 -0
  234. package/src/app/databases/postgresql/create_tables.js +70 -0
  235. package/src/app/databases/postgresql/handle_cleanup_queues.js +36 -0
  236. package/src/app/databases/postgresql/handle_cleanup_sessions.js +5 -0
  237. package/src/app/databases/queries/accounts.js +17 -0
  238. package/src/app/databases/queries/map.js +21 -0
  239. package/src/app/databases/queries/mongodb/accounts.js +360 -0
  240. package/src/app/databases/queries/mongodb/queues.js +157 -0
  241. package/src/app/databases/queries/mongodb/sessions.js +22 -0
  242. package/src/app/databases/queries/postgresql/accounts.js +379 -0
  243. package/src/app/databases/queries/postgresql/queues.js +288 -0
  244. package/src/app/databases/queries/postgresql/sessions.js +37 -0
  245. package/src/app/databases/queries/sessions.js +17 -0
  246. package/src/app/databases/register_database.js +30 -0
  247. package/src/app/databases/sql.js +63 -0
  248. package/src/app/email/send.js +108 -0
  249. package/src/app/email/validate_smtp_settings.js +53 -0
  250. package/src/app/fixture/index.js +50 -0
  251. package/src/app/generate_machine_id.js +26 -0
  252. package/src/app/generate_process_id.js +30 -0
  253. package/src/app/get_ssl_certificates.js +23 -0
  254. package/src/app/handle_process_errors.js +101 -0
  255. package/src/app/index.js +248 -0
  256. package/src/app/middleware/account.js +28 -0
  257. package/src/app/middleware/body_parser.js +18 -0
  258. package/src/app/middleware/build_error.js +18 -0
  259. package/src/app/middleware/built_in.js +76 -0
  260. package/src/app/middleware/context.js +34 -0
  261. package/src/app/middleware/cors.js +23 -0
  262. package/src/app/middleware/csp.js +54 -0
  263. package/src/app/middleware/generate_insecure_page.js +71 -0
  264. package/{dist/lib/generateErrorPage.js → src/app/middleware/generate_joystick_error_page.js} +25 -21
  265. package/src/app/middleware/hmr_client.js +12 -0
  266. package/src/app/middleware/insecure.js +22 -0
  267. package/src/app/middleware/process_browser_polyfill.js +12 -0
  268. package/src/app/middleware/render/get_url.js +15 -0
  269. package/src/app/middleware/render/index.js +93 -0
  270. package/src/app/middleware/request_methods.js +21 -0
  271. package/src/app/middleware/session.js +31 -0
  272. package/src/app/push_logs.js +36 -0
  273. package/src/app/queues/index.js +268 -0
  274. package/src/app/register_app_options.js +7 -0
  275. package/src/app/routes/register_route_from_function.js +10 -0
  276. package/src/app/routes/register_route_from_object.js +34 -0
  277. package/src/app/routes/supported_http_methods.js +9 -0
  278. package/src/app/settings/load.js +33 -0
  279. package/src/app/ssr/index.js +131 -0
  280. package/src/app/ssr/set_base_attributes_in_html.js +43 -0
  281. package/src/app/ssr/set_head_tags_in_html.js +104 -0
  282. package/src/app/start_express.js +50 -0
  283. package/src/app/start_node_as_cluster.js +30 -0
  284. package/src/app/uploaders/local_upload_progress_middleware.js +24 -0
  285. package/src/app/uploaders/register.js +169 -0
  286. package/src/app/uploaders/run_upload.js +136 -0
  287. package/src/app/uploaders/validate_options.js +74 -0
  288. package/src/app/uploaders/validate_uploads.js +127 -0
  289. package/src/app/websockets/emit_event.js +14 -0
  290. package/src/app/websockets/index.js +16 -0
  291. package/src/app/websockets/register.js +175 -0
  292. package/src/index.js +82 -0
  293. package/{dist/lib/camelPascalToSnake.js → src/lib/camel_pascal_to_snake.js} +3 -4
  294. package/src/lib/constants.js +21 -0
  295. package/src/lib/dynamic_import.js +6 -0
  296. package/src/lib/escape_html.js +9 -0
  297. package/src/lib/escape_key_value_pair.js +15 -0
  298. package/src/lib/float_to_decimal_place.js +5 -0
  299. package/src/lib/generate_id.js +15 -0
  300. package/src/lib/get_browser_safe_request.js +17 -0
  301. package/src/lib/get_joystick_build_path.js +28 -0
  302. package/src/lib/get_origin.js +7 -0
  303. package/src/lib/get_sanitized_context.js +51 -0
  304. package/src/lib/get_translations.js +102 -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 +18 -0
  309. package/src/lib/parse_json.js +9 -0
  310. package/src/lib/path_exists.js +11 -0
  311. package/src/lib/rainbow_road.js +7 -0
  312. package/src/lib/replace_backslashes_with_forward_slashes.js +8 -0
  313. package/src/lib/replace_file_protocol.js +8 -0
  314. package/src/lib/serialize_query_parameters.js +7 -0
  315. package/src/lib/set_cookie.js +16 -0
  316. package/src/lib/string_to_slug.js +14 -0
  317. package/src/lib/timestamps.js +48 -0
  318. package/src/lib/types.js +59 -0
  319. package/src/lib/unset_cookie.js +11 -0
  320. package/src/lib/wait.js +9 -0
  321. package/src/test/track_function_call.js +16 -0
  322. package/README.md +0 -8
  323. package/_package.json +0 -63
  324. package/canary.js +0 -12
  325. package/dist/api/get.js +0 -29
  326. package/dist/api/getOrigin.js +0 -6
  327. package/dist/api/index.js +0 -9
  328. package/dist/api/set.js +0 -29
  329. package/dist/app/accounts/defaultUserOutputFields.js +0 -9
  330. package/dist/app/accounts/generateResetToken.js +0 -28
  331. package/dist/app/accounts/generateSession.js +0 -15
  332. package/dist/app/accounts/getBrowserSafeUser.js +0 -24
  333. package/dist/app/accounts/hasLoginTokenExpired.js +0 -18
  334. package/dist/app/accounts/hashString.js +0 -7
  335. package/dist/app/accounts/recoverPassword.js +0 -30
  336. package/dist/app/accounts/resetPassword.js +0 -73
  337. package/dist/app/accounts/roles/index.test.js +0 -123
  338. package/dist/app/accounts/roles/userHasRole.js +0 -7
  339. package/dist/app/accounts/runUserQuery.js +0 -15
  340. package/dist/app/accounts/sendEmailVerification.js +0 -65
  341. package/dist/app/accounts/setAuthenticationCookie.js +0 -11
  342. package/dist/app/accounts/setPassword.js +0 -45
  343. package/dist/app/accounts/unsetAuthenticationCookie.js +0 -11
  344. package/dist/app/accounts/verifyEmail.js +0 -46
  345. package/dist/app/databases/getTargetDatabase.js +0 -10
  346. package/dist/app/databases/getTargetDatabaseConnection.js +0 -19
  347. package/dist/app/databases/getTargetDatabaseProvider.js +0 -10
  348. package/dist/app/databases/mongodb/buildConnectionString.js +0 -22
  349. package/dist/app/databases/mongodb/buildQueryParameters.js +0 -14
  350. package/dist/app/databases/mongodb/index.js +0 -40
  351. package/dist/app/databases/mongodb/queries/accounts.js +0 -266
  352. package/dist/app/databases/mongodb/queries/queues.js +0 -111
  353. package/dist/app/databases/postgresql/addColumnToTable.js +0 -6
  354. package/dist/app/databases/postgresql/createAccountsIndexes.js +0 -21
  355. package/dist/app/databases/postgresql/createAccountsTables.js +0 -39
  356. package/dist/app/databases/postgresql/createDatabase.js +0 -0
  357. package/dist/app/databases/postgresql/index.js +0 -55
  358. package/dist/app/databases/postgresql/queries/accounts.js +0 -186
  359. package/dist/app/databases/postgresql/queries/queues.js +0 -211
  360. package/dist/app/databases/queryMap.js +0 -17
  361. package/dist/app/databases/typesMap.js +0 -7
  362. package/dist/app/getAPIContext.js +0 -25
  363. package/dist/app/getAPIURLComponent.js +0 -6
  364. package/dist/app/getBrowserSafeRequest.js +0 -14
  365. package/dist/app/getOutput.js +0 -74
  366. package/dist/app/handleProcessErrors.js +0 -73
  367. package/dist/app/index.test.js +0 -575
  368. package/dist/app/initExpress.js +0 -41
  369. package/dist/app/middleware/bodyParser.js +0 -16
  370. package/dist/app/middleware/hmr/client.js +0 -113
  371. package/dist/app/middleware/index.js +0 -89
  372. package/dist/app/middleware/render.js +0 -213
  373. package/dist/app/middleware/requestMethods.js +0 -19
  374. package/dist/app/registerGetters.js +0 -45
  375. package/dist/app/registerSetters.js +0 -45
  376. package/dist/app/runGetter.js +0 -103
  377. package/dist/app/runSetter.js +0 -103
  378. package/dist/app/runUploader.js +0 -143
  379. package/dist/app/sanitizeAPIResponse.js +0 -27
  380. package/dist/app/utils/process.js +0 -193
  381. package/dist/app/validateSession.js +0 -16
  382. package/dist/app/validateUploaderOptions.js +0 -53
  383. package/dist/app/validateUploads.js +0 -102
  384. package/dist/email/render.js +0 -50
  385. package/dist/email/send.js +0 -55
  386. package/dist/email/send.test.js +0 -37
  387. package/dist/email/templates/base.css +0 -194
  388. package/dist/email/templates/base.html +0 -28
  389. package/dist/email/templates/reset-password.js +0 -14
  390. package/dist/email/validateSMTPSettings.js +0 -27
  391. package/dist/lib/escapeHTML.js +0 -9
  392. package/dist/lib/escapeKeyValuePair.js +0 -13
  393. package/dist/lib/formatAPIError.js +0 -12
  394. package/dist/lib/formatErrorString.js +0 -8
  395. package/dist/lib/generateCookie.js +0 -14
  396. package/dist/lib/generateId.js +0 -13
  397. package/dist/lib/generateMachineId.js +0 -15
  398. package/dist/lib/getBuildPath.js +0 -10
  399. package/dist/lib/getErrorObject.js +0 -9
  400. package/dist/lib/getPlatformSafeFilePath.js +0 -8
  401. package/dist/lib/getPlatformSafePath.js +0 -8
  402. package/dist/lib/getSSLCertificates.js +0 -19
  403. package/dist/lib/isValidHTTPMethod.js +0 -7
  404. package/dist/lib/isValidJSONString.js +0 -11
  405. package/dist/lib/nodeUrlPolyfills.js +0 -14
  406. package/dist/lib/objectToSQLKeysString.js +0 -18
  407. package/dist/lib/objectToSQLValuesString.js +0 -16
  408. package/dist/lib/obscenedb/debounce.js +0 -12
  409. package/dist/lib/obscenedb/index.js +0 -61
  410. package/dist/lib/parseDatabasesFromEnvironment.js +0 -9
  411. package/dist/lib/rainbowRoad.js +0 -7
  412. package/dist/lib/readDirectory.js +0 -24
  413. package/dist/lib/replaceBackslashesWithForwardSlashes.js +0 -8
  414. package/dist/lib/replaceFileProtocol.js +0 -8
  415. package/dist/lib/replaceForwardSlashesWithBackslashes.js +0 -8
  416. package/dist/lib/serializeQueryParameters.js +0 -8
  417. package/dist/lib/serverAvailable.js +0 -0
  418. package/dist/lib/setCookie.js +0 -16
  419. package/dist/lib/supportedHTTPMethods.js +0 -4
  420. package/dist/lib/unsetCookie.js +0 -13
  421. package/dist/push/logs/index.js +0 -55
  422. package/dist/settings/index.js +0 -5
  423. package/dist/settings/load.js +0 -30
  424. package/dist/ssr/compileCSS.js +0 -85
  425. package/dist/ssr/findComponentInTree.js +0 -29
  426. package/dist/ssr/formatCSS.js +0 -6
  427. package/dist/ssr/getCSSFromTree.js +0 -33
  428. package/dist/ssr/index.js +0 -441
  429. package/dist/ssr/replaceWhenTags.js +0 -37
  430. package/dist/ssr/setHeadTagsInHTML.js +0 -84
  431. package/dist/validation/index.js +0 -10
  432. package/dist/validation/index.test.js +0 -463
  433. package/dist/validation/inputWithSchema/index.js +0 -105
  434. package/dist/validation/lib/constants.js +0 -162
  435. package/dist/validation/lib/getValueFromObject.js +0 -12
  436. package/dist/validation/lib/getValueFromObject.test.js +0 -7
  437. package/dist/validation/lib/isArrayPath.js +0 -6
  438. package/dist/validation/lib/throwError.js +0 -6
  439. package/dist/validation/lib/typeValidators.js +0 -38
  440. package/dist/validation/lib/validateType.js +0 -33
  441. package/dist/validation/schema/index.js +0 -44
  442. package/dist/websockets/emitWebsocketEvent.js +0 -12
  443. package/dist/websockets/index.js +0 -12
  444. package/notes +0 -1
@@ -0,0 +1,157 @@
1
+ import timestamps from '../../../../lib/timestamps.js';
2
+
3
+ const queues ={
4
+ add_job: function (job_to_add = {}) {
5
+ const db = this.db?.collection(`queue_${this.queue.name}`);
6
+ return db.insertOne({
7
+ ...job_to_add,
8
+ attempts: 0,
9
+ });
10
+ },
11
+ count_jobs: function (status = '') {
12
+ const db = this.db?.collection(`queue_${this.queue.name}`);
13
+ return db.countDocuments({ status, locked_by: this.machine_id });
14
+ },
15
+ delete_job: function (job_id = '') {
16
+ const db = this.db?.collection(`queue_${this.queue.name}`);
17
+ return db.deleteOne({ _id: job_id });
18
+ },
19
+ delete_incomplete_jobs_for_machine: function () {
20
+ const db = this.db?.collection(`queue_${this.queue.name}`);
21
+ return db.deleteMany({ status: { $in: ['incomplete', 'running'] }, locked_by: this.machine_id });
22
+ },
23
+ get_jobs: function (query = {}) {
24
+ const db = this.db?.collection(`queue_${this.queue.name}`);
25
+ return db.find({
26
+ ...query,
27
+ environment: process.env.NODE_ENV,
28
+ }).toArray();
29
+ },
30
+ get_next_job_to_run: async function () {
31
+ const db = this.db?.collection(`queue_${this.queue.name}`);
32
+
33
+ const next_job = await db.findOneAndUpdate({
34
+ $or: [
35
+ {
36
+ status: 'pending',
37
+ environment: process.env.NODE_ENV,
38
+ // NOTE: Do this to avoid accidentally running jobs intended for the future too early.
39
+ next_run_at: { $lte: timestamps.get_current_time() },
40
+ locked_by: { $exists: false }
41
+ },
42
+ {
43
+ status: 'pending',
44
+ environment: process.env.NODE_ENV,
45
+ // NOTE: Do this to avoid accidentally running jobs intended for the future too early.
46
+ next_run_at: { $lte: timestamps.get_current_time() },
47
+ locked_by: null,
48
+ }
49
+ ]
50
+ }, {
51
+ $set: {
52
+ status: 'running',
53
+ started_at: timestamps.get_current_time(),
54
+ locked_by: this.machine_id,
55
+ },
56
+ }, {
57
+ sort: {
58
+ next_run_at: 1,
59
+ },
60
+ });
61
+
62
+ return next_job;
63
+ },
64
+ initialize_database: async function () {
65
+ try {
66
+ await this.db.createCollection(`queue_${this.queue.name}`);
67
+ } catch {
68
+ // NOTE: Drop the error. We anticipate it after the first run.
69
+ }
70
+
71
+ const db = this.db?.collection(`queue_${this.queue.name}`);
72
+
73
+ const indexes = await db?.indexes();
74
+
75
+ await db.createIndex({ status: 1 });
76
+ await db.createIndex({ status: 1, next_run_at: 1 });
77
+ await db.createIndex({ status: 1, environment: 1, next_run_at: 1, locked_by: 1 });
78
+
79
+ if (this.queue.options?.cleanup?.completedAfterSeconds || this.queue.options?.cleanup?.completed_after_seconds) {
80
+ if (indexes?.find((index) => index?.name === 'completed_at_1')) {
81
+ await db.dropIndex({ completed_at: 1 });
82
+ }
83
+
84
+ await db.createIndex({ completed_at: 1 }, { expireAfterSeconds: this?.queue?.options?.cleanup?.completedAfterSeconds || this.queue.options?.cleanup?.completed_after_seconds });
85
+ }
86
+
87
+ if (this.queue.options?.cleanup?.failedAfterSeconds || this.queue.options?.cleanup?.failed_after_seconds) {
88
+ if (indexes?.find((index) => index?.name === 'failed_at_1')) {
89
+ await db.dropIndex({ failed_at: 1 });
90
+ }
91
+
92
+ await db.createIndex({ failed_at: 1 }, { expireAfterSeconds: this?.queue?.options?.cleanup?.failedAfterSeconds || this.queue.options?.cleanup?.failed_after_seconds });
93
+ }
94
+ },
95
+ log_attempt: function (job_id = '') {
96
+ const db = this.db?.collection(`queue_${this.queue.name}`);
97
+ return db.updateOne({ _id: job_id }, {
98
+ $inc: {
99
+ attempts: 1,
100
+ },
101
+ });
102
+ },
103
+ requeue_job: function (job_id = '', next_run_at = null) {
104
+ const db = this.db?.collection(`queue_${this.queue.name}`);
105
+ return db.updateOne({ _id: job_id }, {
106
+ $set: {
107
+ status: 'pending',
108
+ next_run_at,
109
+ },
110
+ $unset: {
111
+ locked_by: '',
112
+ }
113
+ });
114
+ },
115
+ set_job_completed: function (job_id = '') {
116
+ const db = this.db?.collection(`queue_${this.queue.name}`);
117
+ return db.updateOne({ _id: job_id }, {
118
+ $set: {
119
+ status: 'completed',
120
+ // NOTE: Format this way for ttl indexes.
121
+ completed_at: timestamps.get_current_time({ mongodb_ttl: true }),
122
+ },
123
+ });
124
+ },
125
+ set_job_failed: function (job_id = '', error = '') {
126
+ const db = this.db?.collection(`queue_${this.queue.name}`);
127
+ return db.updateOne({ _id: job_id }, {
128
+ $set: {
129
+ status: 'failed',
130
+ // NOTE: Format this way for ttl indexes.
131
+ failed_at: timestamps.get_current_time({ mongodb_ttl: true }),
132
+ error,
133
+ },
134
+ });
135
+ },
136
+ set_jobs_for_machine_pending: function () {
137
+ const db = this.db?.collection(`queue_${this.queue.name}`);
138
+
139
+ // NOTE: Do NOT change the next_run_at as we want priority to remain intact. Oldest jobs
140
+ // should still be FIFO.
141
+ return db.updateMany({
142
+ status: { $in: ['pending', 'running'] },
143
+ locked_by: this.machine_id
144
+ }, {
145
+ $set: {
146
+ status: 'pending',
147
+ },
148
+ // NOTE: Unpin job from the machine that originally had it and toss it back in the queue
149
+ // for any machine to pick it up.
150
+ $unset: {
151
+ locked_by: '',
152
+ }
153
+ });
154
+ },
155
+ };
156
+
157
+ 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;