@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 @@
1
+ import a from"compression";import _ from"cookie-parser";import c from"cors";import i from"express";import m from"serve-favicon";import t from"./account.js";import d from"./body_parser.js";import u from"./build_error.js";import f from"./context.js";import l from"../../lib/get_joystick_build_path.js";import x from"./hmr_client.js";import o from"./insecure.js";import b from"../../lib/path_exists.js";import w from"./process_browser_polyfill.js";import y from"./render/index.js";import j from"./request_methods.js";import v from"./session.js";const k=l(),n=(e={})=>{e.express_app.set("trust proxy",1),["development","test"].includes(process.env.NODE_ENV)||e.express_app.use(o),e.express_app.use(u),e.express_app.use(j),e?.csp_config&&e.express_app.use((r,p,s)=>csp(r,p,s,e?.csp_config)),process.env.NODE_ENV!=="development"&&e.express_app.use(a()),e.express_app.use(i.static("public")),e.express_app.use("/css",i.static("css")),e.express_app.use("/_joystick/utils/process.js",w),e.express_app.use("/_joystick/index.client.js",i.static(`${e?.joystick_build_path}index.client.js`)),e.express_app.use("/_joystick/index.css",i.static(`${e?.joystick_build_path}index.css`)),e.express_app.use("/_joystick/ui",i.static(`${k}ui`)),process.env.NODE_ENV==="development"&&e.express_app.use("/_joystick/hmr/client.js",x),e.express_app.use(async(r,p,s)=>{await b("public/favicon.ico")?m("public/favicon.ico")(r,p,s):s()}),e.express_app.use(_()),e.express_app.use(d(e?.middleware_config?.bodyParser)),e.express_app.use(c(e?.middleware_config?.cors,e?.port)),process.databases?._sessions&&e.express_app.use((r,p,s)=>v(r,p,s)),process.databases?._users&&e.express_app.use((r,p,s)=>t(r,p,s)),e.express_app.use((r,p,s)=>f(r,p,s)),e.express_app.use((r,p,s)=>y(r,p,s,e?.app_instance))};var J=n;export{J as default};
@@ -0,0 +1 @@
1
+ const g=(n="",e=null,o={})=>{if(o?.req?.context?.user&&n)return o?.res.redirect(n);if(e)return e()},f=(n="",e=null,o={})=>{if(!o?.req?.context?.user&&n)return o?.res.redirect(n);if(e)return e()},d=async(n,e,o)=>{n.context={...n?.context||{},if_logged_in:(t="",i)=>g(t,i,{req:n,res:e}),ifLoggedIn:(t="",i)=>g(t,i,{req:n,res:e}),if_not_logged_in:(t="",i)=>f(t,i,{req:n,res:e}),ifNotLoggedIn:(t="",i)=>f(t,i,{req:n,res:e}),...process.databases||{}},o()};var r=d;export{r as default};
@@ -1,22 +1 @@
1
- import cors from "cors";
2
- var cors_default = (config = {}, port = "") => {
3
- return (req, res, next) => {
4
- const allowedUrls = [
5
- `http://localhost:${port}`,
6
- ...config?.allowedUrls || []
7
- ];
8
- return cors({
9
- credentials: true,
10
- origin: function(origin, callback) {
11
- if (!origin || allowedUrls.includes(origin)) {
12
- callback(null, true);
13
- } else {
14
- callback(new Error(`${origin} not permitted by CORS policy.`));
15
- }
16
- }
17
- })(req, res, next);
18
- };
19
- };
20
- export {
21
- cors_default as default
22
- };
1
+ import d from"cors";const c=(t={},l="")=>(o,n,s)=>{const u=[`http://localhost:${l}`,...t?.allowedUrls||[]];return d({credentials:!0,origin:function(e,r){!e||u.includes(e)?r(null,!0):r(new Error(`${e} not permitted by CORS policy.`))}})(o,n,s)};var p=c;export{p as default};
@@ -1,48 +1 @@
1
- import { isObject } from "../../validation/lib/typeValidators.js";
2
- var csp_default = (req, res, next, config = null) => {
3
- if (config && isObject(config)) {
4
- const directiveDefaults = {
5
- "default-src": ["'self'"],
6
- "child-src": ["'self'"],
7
- "connect-src": ["'self'", "wss:"],
8
- "font-src": ["'self'"],
9
- "frame-src": ["'self'"],
10
- "img-src": ["'self'"],
11
- "manifest-src": ["'self'"],
12
- "media-src": ["'self'"],
13
- "object-src": ["'self'"],
14
- "script-src": ["'self'"],
15
- "script-src-elem": ["'self'"],
16
- "script-src-attr": ["'self'"],
17
- "style-src": ["'self'"],
18
- "style-src-elem": ["'self'"],
19
- "style-src-attr": ["'self'"],
20
- "worker-src": ["'self'"],
21
- "base-uri": ["'self'"],
22
- "navigate-to": ["'self'"],
23
- "form-action": ["'self'"]
24
- };
25
- const { unrestrictedOrigins, directives } = config;
26
- if (process.env.NODE_ENV === "development") {
27
- directiveDefaults["script-src"].push("'unsafe-eval'");
28
- directiveDefaults["connect-src"].push("ws:");
29
- }
30
- const directiveNames = Object.keys(directiveDefaults);
31
- for (let i = 0; i < directiveNames?.length; i += 1) {
32
- const directive = directiveNames[i];
33
- directiveDefaults[directive] = [
34
- ...directiveDefaults[directive] || [],
35
- ...unrestrictedOrigins || [],
36
- ...directives[directive] || []
37
- ];
38
- }
39
- const csp = Object.keys(directiveDefaults).map((source) => {
40
- return `${source} ${directiveDefaults[source].join(" ")}`;
41
- })?.join("; ");
42
- res.setHeader("Content-Security-Policy", csp);
43
- }
44
- next();
45
- };
46
- export {
47
- csp_default as default
48
- };
1
+ import n from"../../lib/types.js";const o=(a,l,i,s=null)=>{if(s&&n.is_object(s)){const e={"base-uri":["'self'"],"child-src":["'self'"],"connect-src":["'self'","wss:"],"default-src":["'self'"],"font-src":["'self'"],"form-action":["'self'"],"frame-src":["'self'"],"img-src":["'self'"],"manifest-src":["'self'"],"media-src":["'self'"],"navigate-to":["'self'"],"object-src":["'self'"],"script-src":["'self'"],"script-src-attr":["'self'"],"script-src-elem":["'self'"],"style-src":["'self'"],"style-src-attr":["'self'"],"style-src-elem":["'self'"],"worker-src":["'self'"]};process.env.NODE_ENV==="development"&&(e["script-src"].push("'unsafe-eval'"),e["connect-src"].push("ws:"));const c=Object.keys(e||{});for(let r=0;r<c?.length;r+=1){const t=c[r];e[t]=[...e[t]||[],...s?.unrestrictedOrigins||s?.unrestricted_origins||[],...s?.directives&&s?.directives[t]||[]]}const f=Object.keys(e||{}).map(r=>`${r} ${e[r].join(" ")}`)?.join("; ");l.setHeader("Content-Security-Policy",f)}i()};var m=o;export{m as default};
@@ -0,0 +1,65 @@
1
+ const t=(i="",n="")=>{const e=`https://${i}${n}`;return`
2
+ <html>
3
+ <head>
4
+ <title>Insecure Connection</title>
5
+ <style type="text/css">
6
+ body {
7
+ font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
8
+ font-size: 16px;
9
+ line-height: 24px;
10
+ background: #fafafa;
11
+ display: flex;
12
+ margin: 0;
13
+ padding: 20px;
14
+ justify-content: center;
15
+ }
16
+
17
+ .warning {
18
+ width: 100%;
19
+ max-width: 500px;
20
+ background: #fff;
21
+ border: 1px solid #eee;
22
+ border-radius: 3px;
23
+ padding: 35px;
24
+ align-self: flex-start;
25
+ }
26
+
27
+ .warning h1 {
28
+ color: #000;
29
+ font-size: 22px;
30
+ line-height: 30px;
31
+ margin: 0;
32
+ }
33
+
34
+ .warning p {
35
+ font-size: 16px;
36
+ line-height: 25px;
37
+ font-weight: 400;
38
+ color: #555;
39
+ margin: 10px 0 0;
40
+ }
41
+
42
+ .warning p a {
43
+ color: #555;
44
+ }
45
+
46
+ @media screen and (min-width: 768px) {
47
+ body {
48
+ padding: 40px;
49
+ }
50
+ }
51
+ </style>
52
+ </head>
53
+ <body>
54
+ <div class="warning">
55
+ <h1>Insecure Connection<h1>
56
+ <p>The site at this URL requires an SSL-secured connection. Please visit <a href="${e}">${e}</a> instead. You will be automatically redirected in 15 seconds.</p>
57
+ </div>
58
+ <script>
59
+ setTimeout(() => {
60
+ location.href = '${e}';
61
+ }, 15 * 1000);
62
+ </script>
63
+ </body>
64
+ </html>
65
+ `};var a=t;export{a as default};
@@ -0,0 +1,147 @@
1
+ const d=(e="build")=>({build:"Build Error",layout_not_found:"Layout Not Found",page_not_found:"Page Not Found"})[e],t=({type:e="build",path:a,frame:r,stack:o})=>{const i=d(e);return`
2
+ <html>
3
+ <head>
4
+ <title>${i}</title>
5
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/styles/atom-one-dark.min.css" />
6
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/highlight.min.js"></script>
7
+ <style>
8
+ body {
9
+ background: #fff;
10
+ font-size: 16px;
11
+ line-height: 24px;
12
+ color: #333;
13
+ font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
14
+ }
15
+
16
+ * {
17
+ margin: 0;
18
+ padding: 0;
19
+ }
20
+
21
+ *, *:before, *:after {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ .container {
26
+ width: 90%;
27
+ margin: 0 auto;
28
+ max-width: 1200px;
29
+ }
30
+
31
+ h1,
32
+ h2,
33
+ h3,
34
+ h4,
35
+ h5,
36
+ h6 {
37
+ margin: 0;
38
+ }
39
+
40
+ .container > header {
41
+ padding: 30px 0;
42
+ }
43
+
44
+ .container > header h1 {
45
+ font-size: 24px;
46
+ font-weight: bold;
47
+ color: #333;
48
+ }
49
+
50
+ .container > header h1 .fa-exclamation-triangle {
51
+ color: #ffcc00;
52
+ margin-right: 5px;
53
+ font-size: 22px;
54
+ }
55
+
56
+ .container > header h4 {
57
+ font-size: 18px;
58
+ font-weight: normal;
59
+ color: #888;
60
+ margin-top: 10px;
61
+ }
62
+
63
+ .container > header p {
64
+ margin: 20px 0 0;
65
+ }
66
+
67
+ .code-block {
68
+ margin-bottom: 40px;
69
+ border: 1px solid #eee;
70
+ border-radius: 3px;
71
+ background: #282c34;
72
+ }
73
+
74
+ .code-block header {
75
+ background: #22252b;
76
+ padding: 20px;
77
+ border-radius: 3px 3px 0px 0px;
78
+ }
79
+
80
+ .code-block header .fas {
81
+ color: #aaa;
82
+ margin-right: 5px;
83
+ }
84
+
85
+ .code-block header h4 {
86
+ color: #fff;
87
+ font-weight: normal;
88
+ }
89
+
90
+ .code-block pre {
91
+ background: #fff;
92
+ overflow: scroll;
93
+ margin: 0px;
94
+ border-radius: 0px 0px 3px 3px;
95
+ }
96
+
97
+ .code-block pre code.hljs {
98
+ padding: 15px 20px 20px !important;
99
+ }
100
+
101
+ @media screen and (min-width: 768px) {
102
+ .container {
103
+ max-width: 728px;
104
+ }
105
+
106
+ .container > header {
107
+ padding: 50px 0;
108
+ }
109
+
110
+ .container > header p {
111
+ margin: 30px 0 0;
112
+ }
113
+ }
114
+
115
+ @media screen and (min-width: 1240px) {
116
+ .container {
117
+ max-width: 1200px;
118
+ }
119
+
120
+ width: 100%;
121
+ }
122
+ </style>
123
+ </head>
124
+ <body>
125
+ <div class="container">
126
+ <header>
127
+ <h1>${i}</h1>
128
+ <h4>${e==="build"?"in":"at"} ${a}</h4>
129
+ ${e==="build"?"<p><strong>Your app is failing to build</strong>. Review the output below, correct the issue displayed, and then refresh the page:</p>":""}
130
+ </header>
131
+ ${r?`<div class="code-block">
132
+ <header>
133
+ <h4>Code Frame</h4>
134
+ </header>
135
+ <pre><code>${r}</code></pre>
136
+ </div>`:""}
137
+ ${o?`<div class="code-block">
138
+ <header>
139
+ <h4>Stack Trace</h4>
140
+ </header>
141
+ <pre><code class="${e!=="build"?"language-plaintext":""}">${o}</code></pre>
142
+ </div>`:""}
143
+ </div>
144
+ <script>hljs.highlightAll();</script>
145
+ </body>
146
+ </html>
147
+ `};var n=t;export{n as default};
@@ -0,0 +1 @@
1
+ import e from"fs";import r from"../../lib/node_path_polyfills.js";const{readFile:o}=e.promises,i=await o(`${r?.__package}/app/browser/hmr_client.js`,"utf-8"),p=(s,t)=>{t.set("Content-Type","text/javascript"),t.send(i)};var _=p;export{_ as default};
@@ -1,11 +1 @@
1
- var insecure_default = (req, res, next) => {
2
- const forwardedProtocol = req.get("x-forwarded-proto");
3
- const isForwardedFromHTTPS = forwardedProtocol && forwardedProtocol === "https";
4
- if (process.env.NODE_ENV != "development" && !req.secure && !isForwardedFromHTTPS) {
5
- return res.redirect("https://" + req.headers.host + req.url);
6
- }
7
- next();
8
- };
9
- export {
10
- insecure_default as default
11
- };
1
+ import t from"./generate_insecure_page.js";const n=(e,r,s)=>{if(!e.secure)return r.send(t(e?.headers?.host,e?.url));s()};var a=n;export{a as default};
@@ -0,0 +1 @@
1
+ import o from"fs";import p from"../../lib/node_path_polyfills.js";const{readFile:s}=o.promises,r=await s(`${p.__package}/app/browser/process_polyfill.js`,"utf-8"),l=(t,e)=>{e.set("Content-Type","text/javascript"),e.send(r?.replace("${NODE_ENV}",process.env.NODE_ENV))};var _=l;export{_ as default};
@@ -0,0 +1 @@
1
+ import a from"../../../lib/escape_html.js";import p from"../../../lib/escape_key_value_pair.js";const o=(r={})=>{const[t=null]=r.url?.split("?");return{params:p(r.params),query:p(r.query),route:a(r.route.path),path:a(t)}};var m=o;export{m as default};
@@ -0,0 +1 @@
1
+ import w from"fs";import p from"../../../lib/dynamic_import.js";import c from"../generate_joystick_error_page.js";import k from"../../../lib/get_joystick_build_path.js";import j from"../../../lib/get_translations.js";import x from"./get_url.js";import _ from"../../../lib/path_exists.js";import v from"../../ssr/index.js";import"../../../lib/get_browser_safe_request.js";const{readFile:z}=w.promises,i=k(),A=()=>z("index.html","utf-8"),D=(s,e,f,d={})=>{e.render=async(n="",t={})=>{const u=n?.substring(0,1)==="/"?n?.replace("/",""):n,r=t?.layout?.substring(0,1)==="/"?t?.layout?.replace("/",""):t?.layout,a=`${i}${u}`,o=t?.layout?`${i}${r}`:null;if(!await _(a))return e.status(404).send(c({type:"page_not_found",path:`res.render('${a}')`,frame:null,stack:`A page component at the path ${a} could not be found.`}));if(o&&!await _(o))return e.status(404).send(c({type:"layout_not_found",path:`res.render('${a}', { layout: '${r}' })`,frame:null,stack:`A layout component at the path ${t?.layout} could not be found.`}));const l=await p(`${a}?v=${new Date().getTime()}`),h=o?await p(`${o}?v=${new Date().getTime()}`):null,m={...t?.props||{}};o&&(m.page=l);const y=await A(),g=await j({joystick_build_path:i,render_component_path:n,req:s}),$=x(s),b=await v({api_schema:d?.options?.api,attributes:t?.attributes,base_html:y,component_options:{props:m,translations:g,url:$},component_to_render:h||l,head:t?.head,render_component_path:u,render_layout_path:r,req:s});return e.status(200).send(b)},f()};var K=D;export{K as default};
@@ -0,0 +1 @@
1
+ const o=(e,d,t)=>{["OPTIONS","HEAD","CONNECT","GET","POST","PUT","DELETE","PATCH"].includes(e.method)||d.status(405).send(`${e.method} not allowed.`),t()};var l=o;export{l as default};
@@ -1,24 +1 @@
1
- import setCookie from "../../lib/setCookie.js";
2
- import generateId from "../../lib/generateId.js";
3
- var session_default = (req, res, next, appInstance = {}) => {
4
- let sessionId = req?.cookies?.joystickSession;
5
- if (!sessionId) {
6
- sessionId = generateId(32);
7
- setCookie(res, "joystickSession", sessionId);
8
- }
9
- if (!appInstance.sessions.get(sessionId)) {
10
- appInstance.sessions.set(sessionId, { id: sessionId, csrf: generateId(32) });
11
- }
12
- req.cookies = {
13
- ...req?.cookies || {},
14
- joystickSession: sessionId
15
- };
16
- req.context = {
17
- ...req?.context || {},
18
- session: appInstance?.sessions?.get(sessionId)
19
- };
20
- next();
21
- };
22
- export {
23
- session_default as default
24
- };
1
+ import i from"../databases/queries/sessions.js";import n from"../../lib/set_cookie.js";const c=async(o,e,t)=>{let s=o?.cookies?.joystick_session;(s?await i("get_session",{session_id:s}):null)||(s=await i("create_session"),n(e,"joystick_session",s)),o.cookies={...o?.cookies||{},joystick_session:s},o.context={...o?.context||{},session:await i("get_session",{session_id:s})},t()};var l=c;export{l as default};
@@ -0,0 +1 @@
1
+ import t from"winston";import s from"fs";import e from"../lib/path_exists.js";const{mkdir:i}=s.promises,n=async()=>{await e("/root/push/logs")||await i("/root/push/logs",{recursive:!0});const r=t.createLogger({format:t.format.combine(t.format.timestamp(),t.format.json()),transports:[new t.transports.File({filename:"/root/push/logs/app.log",maxsize:1024*1024*20,maxFiles:1,tailable:!0})]});process.stdout.write=o=>{r.info(o)},process.stderr.write=o=>{r.error(o)},process.on("uncaughtException",o=>{r.error(o instanceof Error?o?.toString():o)}),process.on("unhandledRejection",o=>{r.error(o instanceof Error?o?.toString():o)})};var c=n;export{c as default};
@@ -1,119 +1 @@
1
- import dayjs from "dayjs";
2
- import fs from "fs";
3
- import os from "os";
4
- import generateId from "../../lib/generateId";
5
- import getTargetDatabaseProvider from "../databases/getTargetDatabaseProvider";
6
- import queryMap from "../databases/queryMap";
7
- class Queue {
8
- constructor(queueName = "", queueOptions = {}) {
9
- this.machineId = fs.readFileSync(`${os.homedir()}/.cheatcode/MACHINE_ID`, "utf-8")?.trim().replace(/\n/g, "");
10
- this.name = queueName;
11
- this.options = {
12
- concurrentJobs: 1,
13
- ...queueOptions
14
- };
15
- this._initDatabase();
16
- if (queueOptions?.runOnStartup) {
17
- this.run();
18
- }
19
- }
20
- async _initDatabase() {
21
- const queuesDatabase = getTargetDatabaseProvider("queues");
22
- const db = queryMap[queuesDatabase]?.queues;
23
- if (db && typeof db === "object" && !Array.isArray(db)) {
24
- this.db = Object.entries(db)?.reduce((boundQueries = {}, [queryFunctionName, queryFunction]) => {
25
- boundQueries[queryFunctionName] = queryFunction.bind({
26
- machineId: this.machineId,
27
- queue: {
28
- name: this.name,
29
- options: this.options
30
- }
31
- });
32
- return boundQueries;
33
- }, {});
34
- await this.db.initializeDatabase();
35
- }
36
- }
37
- add(options = {}) {
38
- const nextRunAt2 = options?.nextRunAt === "now" || !options?.nextRunAt ? dayjs().format() : options?.nextRunAt;
39
- this.db.addJob({
40
- _id: generateId(),
41
- status: "pending",
42
- ...options,
43
- nextRunAt: nextRunAt2
44
- });
45
- }
46
- async _checkIfOkayToRunJobs() {
47
- const jobsRunning = await this._getNumberOfJobsRunning();
48
- return jobsRunning < this.options.concurrentJobs;
49
- }
50
- _getNumberOfJobsRunning() {
51
- return this.db.countJobs("running");
52
- }
53
- _handleRequeueJobsRunningBeforeRestart() {
54
- if (!this.db) {
55
- return;
56
- }
57
- if (!this.options.retryJobsRunningBeforeRestart) {
58
- return this.db.setJobsForMachineIncomplete();
59
- }
60
- return this.db.setJobsForMachinePending();
61
- }
62
- run() {
63
- if (!this.db) {
64
- return;
65
- }
66
- console.log(`Starting ${this.name} queue...`);
67
- this._handleRequeueJobsRunningBeforeRestart().then(() => {
68
- setInterval(async () => {
69
- const okayToRunJobs = await this._checkIfOkayToRunJobs();
70
- if (okayToRunJobs && !process.env.HALT_QUEUES) {
71
- const nextJob = await this.db.getNextJobToRun();
72
- this._handleNextJob(nextJob);
73
- }
74
- }, 300);
75
- });
76
- }
77
- _handleNextJob(nextJob = {}) {
78
- if (nextJob && nextJob?.job && this.options.jobs[nextJob?.job] && typeof this.options.jobs[nextJob?.job]?.run === "function") {
79
- try {
80
- this.options.jobs[nextJob.job].run(nextJob?.payload, {
81
- ...nextJob,
82
- queue: this,
83
- completed: () => this._handleJobCompleted(nextJob?._id),
84
- failed: (error) => this._handleJobFailed(nextJob?._id, error),
85
- delete: () => this._handleDeleteJob(nextJob?._id),
86
- requeue: (nextRunAt2 = "") => this._handleRequeueJob(nextJob, nextRunAt2)
87
- });
88
- } catch (exception) {
89
- this._handleJobFailed(nextJob?._id, exception);
90
- if (this.options.jobs[nextJob.job]?.requeueOnFailure) {
91
- this._handleRequeueJob(nextRunAt, dayjs().add(10, "seconds").format());
92
- }
93
- }
94
- }
95
- }
96
- _handleJobCompleted(jobId = "") {
97
- return this.db.setJobCompleted(jobId);
98
- }
99
- _handleJobFailed(jobId = "", error = "") {
100
- return this.db.setJobFailed(jobId, error);
101
- }
102
- _handleDeleteJob(jobId = "") {
103
- return this.db.deleteJob(jobId);
104
- }
105
- _handleRequeueJob(job = {}, nextRunAt2 = dayjs().format()) {
106
- return this.db.requeueJob(job?._id, nextRunAt2);
107
- }
108
- list(status = "") {
109
- const query = {};
110
- if (status) {
111
- query.status = status;
112
- }
113
- return this.db.getJobs(query);
114
- }
115
- }
116
- var queues_default = Queue;
117
- export {
118
- queues_default as default
119
- };
1
+ import d from"chalk";import h from"fs";import c from"os";import b from"../../lib/generate_id.js";import f from"../databases/get_target_database_connection.js";import l from"../databases/queries/map.js";import _ from"../../lib/timestamps.js";import i from"../../lib/types.js";import p from"../../test/track_function_call.js";class m{constructor(e="",t={}){this.init_database=this.init_database.bind(this),this.machine_id=h.readFileSync(`${c.homedir()}/.cheatcode/MACHINE_ID`,"utf-8")?.trim().replace(/\n/g,""),this.name=e,this.options={concurrent_jobs:1,...t},this.init_database(this?.options?.external,this?.options?.database?.provider)}async init_database(e=!1,t=null){const n=t||f("queues")?.provider,s=l[n]?.queues,o=this._get_database_connection();i.is_object(o)&&i.is_object(s)&&(this.db=Object.entries(s||{})?.reduce((a={},[r,u])=>(a[r]=u.bind({db:o,machine_id:this.machine_id,queue:{name:this.name,options:this.options}}),a),{_connection:o}),e||(await this.db.initialize_database(n),(this?.options?.runOnStartup||this?.options?.run_on_startup)&&this.run()))}_get_database_connection(){if(this?.options?.database){const{provider:e,name:t}=this?.options?.database,n=process.databases&&process.databases[e]&&process.databases[e][t];return n||console.warn(d.red(`Connection to database ${e}.${t} not found on process. Cannot start queue.`)),n||null}return process.databases._queues}async add(e={}){const t=(e?.nextRunAt||e?.next_run_at)==="now"||!e?.nextRunAt&&!e?.next_run_at?_.get_future_time():e?.nextRunAt||e?.next_run_at,n={_id:b(16),status:"pending",environment:process.env.NODE_ENV,next_run_at:t,job:e?.job,payload:e?.payload},s=this?.options?.jobs&&this?.options?.jobs[e?.job];if(s&&(i.is_function(s?.preflight?.onBeforeAdd)||i.is_function(s?.preflight?.on_before_add))&&!await(s?.preflight?.onBeforeAdd||s?.preflight?.on_before_add)(n,this.db._connection,`queue_${this.name}`))return null;this.db.add_job(n)}async _check_if_okay_to_run_jobs(){return await this._get_number_of_jobs_running()<(this.options.concurrentJobs||this.options.concurrent_jobs||1)}_get_number_of_jobs_running(){return this.db.count_jobs("running")}_handle_requeue_jobs_running_before_restart(){if(this.db)return!this.options.retryJobsRunningBeforeRestart&&!this.options.retry_jobs_running_before_restart?this.db.delete_incomplete_jobs_for_machine():this.db.set_jobs_for_machine_pending()}run(){this.db&&(process.env.NODE_ENV!=="test"&&console.log(`Starting ${this.name} queue...`),this._handle_requeue_jobs_running_before_restart().then(()=>{setInterval(async()=>{if(await this._check_if_okay_to_run_jobs()&&!process.env.HALT_QUEUES){const t=await this.db.get_next_job_to_run();this.handle_next_job(t)}},300)}))}async handle_next_job(e={}){const t=this.options.jobs[e?.job];if(e&&e?.job&&t&&i.is_function(t?.run))try{if((i.is_function(t?.preflight?.okayToRun)||i.is_function(t?.preflight?.okay_to_run))&&!await(t?.preflight?.okayToRun||t?.preflight?.okay_to_run)(e?.payload,e))return this._handle_requeue_job(e,_.get_future_time("seconds",t?.preflight?.requeueDelayInSeconds||t?.preflight?.requeue_delay_in_seconds||10));if((i.is_number(t?.maxAttempts)||i.is_number(t?.max_attempts))&&e?.attempts>=parseInt(t?.maxAttempts||t?.max_attempts,10))return(i.is_function(t?.onMaxAttemptsExhausted)||i.is_function(t?.on_max_attempts_exhausted))&&await(t.onMaxAttemptsExhausted||t.on_max_attempts_exhausted)(e),this._handle_delete_job(e?._id);await this._log_attempt(e?._id),p(`node.queues.${this?.name}.jobs.${e?.job}`,[e?.payload]),await t.run(e?.payload,{...e,queue:this,completed:()=>this._handle_job_completed(e?._id),failed:n=>this._handle_job_failed(e,t,n),delete:()=>this._handle_delete_job(e?._id),requeue:(n="")=>this._handle_requeue_job(e,n)})}catch(n){console.warn(n),this._handle_job_failed(e,t,n)}}_log_attempt(e=""){return this.db.log_attempt(e)}_handle_job_completed(e=""){return this.db.set_job_completed(e)}_handle_job_failed(e={},t={},n=""){return t?.requeueOnFailure||t?.requeue_on_failure?this._handle_requeue_job(e,_.get_future_time("seconds",10)):this.db.set_job_failed(e?._id,n)}_handle_delete_job(e=""){return this.db.delete_job(e)}_handle_requeue_job(e={},t=null){return this.db.requeue_job(e?._id,t||_.get_future_time())}list(e=""){const t={};return e&&(t.status=e),this.db.get_jobs(t)}}var R=m;export{R as default};
@@ -0,0 +1 @@
1
+ const e=(o={},s={})=>{o.databases=[],o.express={},o.options=s};var t=e;export{t as default};
@@ -0,0 +1 @@
1
+ const c=(t={},e="",n=null)=>{t.get(e,async(o,r,u)=>{n(o,r,u)})};var f=c;export{f as default};
@@ -0,0 +1 @@
1
+ import s from"./supported_http_methods.js";import i from"../../lib/types.js";const p=(d={},t="",o={})=>{const n=o?.method?.toLowerCase(),m=o?.methods?.map(e=>e?.toLowerCase()),r=(n?[n]:m)?.filter(e=>s.includes(e)),f=i.is_array(o?.middleware)?o?.middleware:[];if(r?.length===0){console.warn(`Cannot register route ${t}. All provided HTTP methods are invalid. Must be one of ${s?.join(", ")}.`);return}if(!i.is_function(o?.handler)){console.warn(`Cannot register route ${t}. Handler must be a function.`);return}for(let e=0;e<r?.length;e+=1){const a=r[e];d[a](t,...f||[],async(c,l,u)=>{o.handler(c,l,u)})}};var _=p;export{_ as default};
@@ -0,0 +1 @@
1
+ const t=["get","delete","patch","post","put"];var e=t;export{e as default};
@@ -0,0 +1 @@
1
+ import o from"../../lib/is_valid_json.js";import r from"../../lib/parse_json.js";const s={config:{},global:{},public:{},private:{}},i=()=>{const t=!!process.env.JOYSTICK_SETTINGS,e=`${process.env.JOYSTICK_SETTINGS}`.replace(/\\/g,""),n=t&&o(e);return t?n?r(e)||s:(console.warn(`Could not parse settings. Please verify that your settings.${process.env.NODE_ENV}.json file exports a valid JSON object.`),s):s};var p=i;export{p as default};
@@ -0,0 +1,33 @@
1
+ import u from"fs";import{parseHTML as p}from"linkedom";import y from"os";import $ from"../api/get_api_for_data_functions.js";import f from"../../lib/get_browser_safe_request.js";import h from"../settings/load.js";import w from"./set_base_attributes_in_html.js";import b from"./set_head_tags_in_html.js";import i from"../../lib/path_exists.js";import g from"../accounts/get_browser_safe_user.js";const{readFile:a}=u.promises,_=h(),s=process.env.NODE_ENV==="development",{document:j}=p("<div></div>"),k=(e={})=>e?.base_html.replace("${css}",`<style type="text/css" js-css>${e?.css}</style>`).replace('<div id="app"></div>',`
2
+ <div id="app">${e?.html}</div>
3
+ <script>
4
+ window.joystick = {
5
+ settings: {
6
+ global: ${JSON.stringify(_?.global)},
7
+ public: ${JSON.stringify(_?.public)},
8
+ },
9
+ };
10
+
11
+ window.__joystick_platform__ = '${y.platform()}';
12
+ window.__joystick_data__ = '${Buffer.from(JSON.stringify(e?.data),"utf8").toString("base64")}';
13
+ window.__joystick_i18n__ = ${JSON.stringify(e?.translations)};
14
+ ${s?`window.__joystick_hmr_port__ = ${parseInt(process.env.PORT,10)+1}`:""}
15
+ window.__joystick_layout_url__ = ${e?.render_layout_path?`"/_joystick/${e?.render_layout_path}"`:null};
16
+ window.__joystick_page_url__ = ${e?.render_component_path?`"/_joystick/${e?.render_component_path}"`:null};
17
+ window.__joystick_request__ = ${JSON.stringify(f(e?.req))};
18
+ window.__joystick_settings__ = ${JSON.stringify({global:_?.global,public:_?.public})};
19
+
20
+ window.__joystick_should_auto_mount__ = true;
21
+ window.__joystick_ssr_props__ = ${JSON.stringify(e?.props)};
22
+ window.__joystick_url__ = ${JSON.stringify(e?.url)};
23
+ window.__joystick_user__ = ${JSON.stringify(g(e?.req?.context?.user))};
24
+ </script>
25
+ <script type="module" src="/_joystick/utils/process.js"></script>
26
+ <script type="module" src="/_joystick/index.client.js"></script>
27
+ ${e?.render_component_path?`<script type="module" src="/_joystick/${e?.render_component_path}"></script>`:""}
28
+ ${e?.render_layout_path?`<script type="module" src="/_joystick/${e?.render_layout_path}"></script>`:""}
29
+ ${s?'<script type="module" src="/_joystick/hmr/client.js"></script>':""}
30
+ `),v=(e={})=>e?.base_html.replace("${css}",`<style type="text/css">${e?.css}</style>`).replace("${subject}",e?.email_options?.subject).replace("${preheader}",e?.email_options?.preheader||"").replace('<div id="email"></div>',`<div id="email">${e?.html}</div>`),N=(e={})=>e?.is_email?v(e):k(e),O=async(e="")=>await i(`email/${e?`base_${e}`:"base"}.html`)?a(`email/${e?`base_${e}`:"base"}.html`,"utf-8"):(console.warn(`Could not find email/${e?`base_${e}`:"base"}.html`),""),S=async(e="")=>await i(`email/${e?`base_${e}`:"base"}.css`)?a(`email/${e?`base_${e}`:"base"}.css`,"utf-8"):(console.warn(`Could not find email/${e?`base_${e}`:"base"}.css`),""),q=(e=null,t={})=>e(t),J=async(e={})=>{const t=q(e?.component_to_render,e?.component_options),c=$(e?.req,e?.api_schema),l=[],r=await t.render_for_ssr(c,e?.req,l,{linkedom_document:j,is_email:e?.is_email}),n=e?.is_email?await S(e?.email_options?.base_html_name):null,o=e?.is_email?await O(e?.email_options?.base_html_name):null,m=N({is_email:e?.is_email,attributes:e?.attributes,base_html:e?.is_email?o:e?.base_html,component_instance:t,css:e?.is_email?`
31
+ ${n}
32
+ ${r?.css}
33
+ `:r?.css,data:r?.data,email_options:e?.email_options,head:e?.head,html:r?.html,props:e?.component_options?.props,render_component_path:e?.render_component_path,render_layout_path:e?.render_layout_path,req:e?.req,translations:e?.component_options?.translations,url:e?.component_options?.url}),d=b(m,e?.head,e?.req);return w(d,e?.attributes)};var P=J;export{P as default};
@@ -0,0 +1 @@
1
+ import{parseHTML as n}from"linkedom";import a from"../../lib/types.js";const i=(e={},s={})=>{const c=Object.keys(s||{})?.filter(t=>t!=="class");if(a.is_array(s?.class?.list))if(s?.class?.method==="replace")e.setAttribute("class",s.class.list.join(" "));else for(let t=0;t<s.class.list.length;t+=1){const o=s.class.list[t];e.classList.add(o)}for(let t=0;t<c.length;t+=1){const o=c[t];e.setAttribute(o,s[o])}return e},r=(e="",s={})=>{const{document:l}=n(e);return s?.html&&i(l.documentElement,s.html),s?.body&&i(l.body,s.body),l.toString()};var m=r;export{m as default};
@@ -0,0 +1 @@
1
+ import c from"node-html-parser";import _ from"../../lib/types.js";const f=(u="",t=null,p={})=>{const g=c.parse(u),i=g.querySelector("head");if(p?.context?.session){const s=c.parse("<meta />").querySelector("meta");s.setAttribute("name","csrf"),s.setAttribute("content",p?.context?.session?.csrf),i.appendChild(s)}if(!t)return g.toString();if(t.title){const e=i.querySelector("title");if(e){const s=c.parse(`<title>${t.title}</title>`);i.exchangeChild(e,s)}e||i.insertAdjacentHTML("afterbegin",`<title>${t.title}</title>`)}if(t.tags&&t.tags.meta&&_.is_array(t.tags.meta)&&t.tags.meta.length>0)for(let e=0;e<t?.tags?.meta?.length;e+=1){const s=t.tags.meta[e],r=i.querySelector(`meta[name="${s.name}"]`),a=c.parse("<meta />"),n=Object.entries(s||{});for(let l=0;l<n?.length;l+=1){const[o,m]=n[l];a.querySelector("meta").setAttribute(o,m)}r&&i.exchangeChild(r,a),r||i.appendChild(a)}if(t.tags&&t.tags.link&&_.is_array(t.tags.link)&&t.tags.link.length>0)for(let e=0;e<t?.tags?.link?.length;e+=1){const s=t?.tags?.link[e],r=c.parse("<link />"),a=Object.entries(s||{});for(let n=0;n<a?.length;n+=1){const[l,o]=a[n];r.querySelector("link").setAttribute(l,o)}i.appendChild(r)}if(t.tags&&t.tags.script&&Array.isArray(t.tags.script)&&t.tags.script.length>0)for(let e=0;e<t?.tags?.script?.length;e+=1){const s=t.tags.script[e],r=c.parse("<script></script>"),a=Object.entries(s||{});for(let n=0;n<a?.length;n+=1){const[l,o]=a[n];r.querySelector("script").setAttribute(l,o)}i.appendChild(r)}if(t.jsonld){const e=c.parse("<script></script>"),s=e.querySelector("script");s.setAttribute("type","application/ld+json"),s.set_content(JSON.stringify(t.jsonld,null,2)),i.appendChild(e)}return g.toString()};var S=f;export{S as default};
@@ -0,0 +1 @@
1
+ import f from"express";import u from"https";import g from"./middleware/built_in.js";import w from"../lib/get_joystick_build_path.js";import _ from"./get_ssl_certificates.js";import m from"../lib/types.js";const y=(r=null,o={})=>{const n=joystick?.settings?.config||{},c=w(),i=_(o?.options?.ssl),s=process.env.PORT?parseInt(process.env.PORT,10):2600;process.env.PORT=s;const t=f(),d=i?u.createServer(i,t).listen(s):t.listen(s);if(g({app_instance:o,csp_config:o?.options?.csp,express_app:t,joystick_build_path:c,middleware_config:n?.middleware,port:s}),o?.options?.middleware&&m.is_array(o?.options?.middleware))for(let e=0;e<o?.options?.middleware?.length;e+=1){const p=o?.options?.middleware[e];t.use(p)}const l={port:s,app:t,server:d};return m.is_function(r)&&r(l,o),l};var k=y;export{k as default};
@@ -0,0 +1 @@
1
+ import o from"cluster";import c from"os";const i=(n=null)=>{const t=c.cpus().length;if(o.isPrimary){for(let s=0;s<t;s++){const r=o.fork();r.on("message",e=>{process.send&&process.send(e)}),process.on("message",e=>{r.send(e)})}o.on("exit",s=>{console.warn(`Worker ${s.process.pid} died.`)})}else n()};var d=i;export{d as default};
@@ -0,0 +1 @@
1
+ import p from"../websockets/emit_event.js";import d from"../../lib/float_to_decimal_place.js";const i=(r=1,e={},n={},s)=>{let o=0;const l=parseInt(e.headers["content-length"],10);e.on("data",t=>{if(t.length>0){o+=t.length;const a=d(o/(l*r)*100);p(`uploaders_${e?.headers["x-joystick-upload-id"]}`,"progress",{provider:"local",progress:a})}}),s()};var g=i;export{g as default};
@@ -0,0 +1 @@
1
+ import h from"multer";import m from"../../lib/get_browser_safe_request.js";import p from"../api/handle_api_error.js";import v from"../../lib/is_valid_json.js";import w from"./local_upload_progress_middleware.js";import y from"./run_upload.js";import q from"../../lib/string_to_slug.js";import g from"../../test/track_function_call.js";import d from"../../lib/types.js";import x from"./validate_options.js";import $ from"./validate_uploads.js";const z=async(e={})=>{const r=parseInt(e?.req?.headers["content-length"],10),t=e?.uploader_options?.providers?.includes("local")?e?.uploader_options?.providers.length:e?.uploader_options?.providers?.length+1,s=r*t;return y({existing_upload_progress:r,total_upload_size_all_providers:s,uploads:e?.validated_uploads,input:e?.upload_input,req:e?.req})},B=async(e="",r=null,t={})=>{await r({input:t?.input,req:t?.req,uploads:t?.uploads}),g(`node.uploaders.${e}.on_after_upload`,[{input:t?.input,req:m(t?.req),uploads:t?.uploads}])},M=async(e="",r=null,t={})=>{await r({input:t?.input,req:t?.req,uploads:t?.uploads}),g(`node.uploaders.${e}.on_before_upload`,[{input:t?.input,req:m(t?.req),uploads:t?.uploads}])},S=(e="")=>e&&v(e)&&JSON.parse(e),U=async(e="",r={},t={},s={})=>{try{const a=S(t?.headers["x-joystick-upload-input"]),i=await $({files:t?.files,uploader_input:a,uploader_name:e,uploader_options:r});if(i?.errors)return p(`uploaders.${e}`,i,s);(d.is_function(r?.onBeforeUpload)||d.is_function(r?.on_before_upload))&&await M(e,r?.onBeforeUpload||r?.on_before_upload,{input:a,req:t,uploads:i});const l=await z({validated_uploads:i,uploader_input:a,uploader_options:r,req:t});return(d.is_function(r?.onAfterUpload)||d.is_function(r?.on_after_upload))&&await B(e,r?.onAfterUpload||r?.on_after_upload,{input:a,req:t,uploads:l}),s.status(200).send(JSON.stringify({uploads:l}))}catch(a){p(`uploaders.${e}`,a,s)}},b=(e="",r={},t={})=>{const s=q(e),a=r?.maxSizeInMegabytes||r?.max_size_in_megabytes,l=h({limits:{fileSize:`${a||10}MB`}}).array("files",10),_=r?.providers?.includes("local")?r?.providers?.length:r?.providers?.length+1;t.express.app.post(`/api/_uploaders/${s}`,(n,o,u)=>w(_,n,o,u),(n,o,u)=>l(n,o,c=>{if(c){let f=c;c?.message==="File too large"&&(f=new Error(`Max file size is ${a}MB.`)),p(`uploader.${e}`,f,o)}else u()}),(n={},o={})=>U(e,r,n,o))},j=(e=[])=>{if(e?.length>0)for(let r=0;r<e?.length;r+=1){const t=e[r];console.error(t)}},O=(e={},r={})=>{const t=Object.entries(e);for(let s=0;s<t?.length;s+=1){const[a,i]=t[s],l=x(i);j(l),l?.length===0&&b(a,i,r)}};var K=O;export{K as default};
@@ -0,0 +1 @@
1
+ import c from"fs";import l from"path";import{S3Client as _}from"@aws-sdk/client-s3";import{Upload as f}from"@aws-sdk/lib-storage";import y from"../websockets/emit_event.js";import p from"../../lib/float_to_decimal_place.js";import g from"../../lib/path_exists.js";const{mkdir:h,writeFile:d}=c.promises,w=async(e={},t={},a={})=>new Promise(async(n,r)=>{try{const i=new f({client:new _({region:e?.s3?.region,credentials:{accessKeyId:e?.s3?.accessKeyId||e?.s3?.access_key_id,secretAccessKey:e?.s3?.secretAccessKey||e?.s3?.secret_access_key}}),params:{Bucket:e?.s3?.bucket,Key:e.file_name,Body:e.content,ContentType:e.mime_type},queueSize:4,partSize:5242880});let s=0;i.on("httpUploadProgress",m=>{a("s3",m?.loaded-s),s=m?.loaded});const o=await i.done();return n({id:t?.req?.headers["x-joystick-upload-id"],provider:"s3",url:o?.Location,size:e?.fileSize,file_name:e?.file_name,fileName:e?.file_name,original_file_name:e?.original_file_name,originalFileName:e?.original_file_name,mime_type:e?.mime_type,mimeType:e?.mime_type})}catch(i){r(i?.message||"There was an error uploading your file to Amazon S3. Check the server logs for more information.")}}),k=async(e={},t={})=>{if(e?.local?.path)return new Promise(async(a,n)=>{try{await g(e?.local?.path)||await h(e?.local?.path,{recursive:!0});const r=l.dirname(`${e?.local?.path}/${e?.file_name}`);c.existsSync(r)||c.mkdirSync(r,{recursive:!0});const i=`${e?.local?.path}/${e?.file_name}`||`_uploads/${e?.file_name}`;await d(i,e.content),a({id:t?.req?.headers["x-joystick-upload-id"],provider:"local",url:i,size:e?.file_size,file_name:e?.file_name,fileName:e?.file_name,original_file_name:e?.original_file_name,originalFileName:e?.original_file_name,mime_type:e?.mime_type,mimeType:e?.mime_type})}catch(r){n(r)}})},v=async(e={})=>{const t=[];let a=e?.existing_upload_progress;const n=(r="",i=0)=>{const s=a+i,o=p(s/e?.total_upload_size_all_providers*100);y(`uploaders_${e?.req?.headers["x-joystick-upload-id"]}`,"progress",{provider:r,progress:o}),a+=i};for(let r=0;r<e?.uploads?.length;r+=1){const i=e?.uploads[r];if(i?.providers?.includes("local")){const s=await k(i,e);t.push(s)}if(i?.providers?.includes("s3")){const s=await w(i,e,n);t.push(s)}}return t};var T=v;export{T as default};
@@ -0,0 +1 @@
1
+ const a=["mimeTypes","mime_types","maxSizeInMegabytes","max_size_in_megabytes","fileName","file_name","providers","local","s3","onBeforeUpload","on_before_upload","onAfterUpload","on_after_upload"],t=["path"],n=["region","accessKeyId","access_key_id","secretAccessKey","secret_access_key","bucket","acl"],r=(e={})=>{const l=[],c=Object.keys(e||{});for(let s=0;s<c?.length;s+=1){const o=c[s];a.includes(o)||l.push(`${o} is not an allowed uploader option.`)}if(e?.providers?.includes("local")&&!e?.local&&l.push("If an uploader provider is 'local', local object must be specified in uploader_options with a storage path."),e?.providers?.includes("s3")&&!e?.s3&&l.push("If an uploader provider is 's3', s3 object must be specified with configuration."),e?.provider?.includes("local")&&e.local){const s=Object.keys(e?.local);for(let o=0;o<s?.length;o+=1){const i=s[o];t.includes(i)||l.push(`local.${i} is not an allowed uploader option.`)}}if(e?.provider?.includes("s3")&&e.s3){const s=Object.keys(e.s3||{});for(let o=0;o<s?.length;o+=1){const i=s[o];n.includes(i)||l.push(`local.${i} is not an allowed uploader option.`)}}return l};var d=r;export{d as default};
@@ -0,0 +1 @@
1
+ import l from"../../lib/log.js";import o from"../../test/track_function_call.js";import f from"../../lib/types.js";const _=({uploader_name:t,max_size_in_megabytes:s,mime_types:i,original_file_name:m,file_size:e,mime_type:c})=>{const a=s*1024*1024,r=[];if(f.is_number(a)&&e&&e>a){const n=`The file ${m} is too big. Max file size is ${s}MB.`;l(n,{level:"danger",docs:"https://docs.cheatcode.co/joystick/node/uploaders"}),r.push({status:400,error:new Error(n),message:n,location:`uploaders.${t}`})}if(i?.length>0&&!i.includes(c)){const n=`The MIME type for the file ${m} is not supported by the uploader ${t} (only ${i?.join(", ")}).`;l(n,{level:"danger",docs:"https://docs.cheatcode.co/joystick/node/uploaders"}),r.push({status:400,error:new Error(n),message:n,location:`uploaders.${t}`})}return r},g=(t=[])=>t.flatMap((s={})=>_(s)),z=({files:t=[],uploader_name:s="",uploader_options:i={},uploader_input:m={}})=>Promise.all(t.map(async e=>{const c=e?.mimetype?.split("/").pop(),a=f.is_function(i?.fileName)||f.is_function(i?.file_name),r=f.is_function(i?.maxSizeInMegabytes)||f.is_function(i?.max_size_in_megabytes);a&&o(`node.uploaders.${s}.file_name`,[{uploader_input:m,file_name:e?.originalname,file_size:e?.size,file_extension:c,mime_type:e?.mimetype}]),r&&o(`node.uploaders.${s}.max_size_in_megabytes`,[{input:m,upload:e}]);const n=r?await(i?.maxSizeInMegabytes||i?.max_size_in_megabytes)({input:m,upload:e}):i?.maxSizeInMegabytes||i?.max_size_in_megabytes,y=a?(i.fileName||i?.file_name)({input:m,fileName:e?.originalname,file_name:e?.originalname,fileSize:e?.size,file_size:e?.size,fileExtension:c,file_extension:c,mimeType:e?.mimetype,mime_type:e?.mimetype}):e?.originalname;return{uploader_name:s,providers:i?.providers,local:i?.local,s3:i?.s3,maxSizeInMegabytes:n,max_size_in_megabytes:n,mimeTypes:i?.mimeTypes,mime_types:i?.mimeTypes,fileName:y,file_name:y,original_file_name:e?.originalname,originalFileName:e?.originalname,file_size:e?.size,fileSize:e?.size,mime_type:e?.mimetype,mimeType:e?.mimetype,content:e?.buffer}})),h=async(t={})=>{const s=await z(t),i=g(s);return i?.length>0?{errors:i}:s};var $=h;export{$ as default};
@@ -0,0 +1 @@
1
+ import o from"../../lib/types.js";const s=(i="",r="",m={})=>{const t=joystick?.emitters[i];if(o.is_array(t))for(let e=0;e<t?.length;e+=1)t[e].emit(r,m)};var p=s;export{p as default};
@@ -0,0 +1 @@
1
+ import c from"./emit_event.js";import m from"../../test/track_function_call.js";const r=(t="")=>({send:(e={},o="")=>{const s=o?`${t}_${o}`:t;c(s,"message",e),m(`node.websockets.${t}.send`,[e])}});var n=r;export{n as default};
@@ -0,0 +1 @@
1
+ import h from"events";import S from"query-string";import*as y from"ws";import a from"../../test/track_function_call.js";import l from"../../lib/types.js";const j=(e={},s={})=>{e.on("upgrade",(n,r,o)=>{if(n?.url?.includes("/api/_websockets")){const t=(n?.url?.replace("/api/_websockets/","")?.split("?")||[])[0],p=s[t];p&&p.server.handleUpgrade(n,r,o,O=>{p.server.emit("connection",O,n)})}})},$=(e={},s={},n={})=>{const r=Object.assign(e,{params:s});(l.is_function(n?.onOpen)||l.is_function(n?.on_open))&&(n?.onOpen||n?.on_open)(r),e.on("message",o=>{const t=JSON.parse(o);l.is_function(n?.on_message)&&n?.on_message(t,e)}),e.on("close",(o=0,t="")=>{l.is_function(n?.on_close)&&n?.on_close(o,t?.toString(),e)})},u=(e="",s={},n={})=>{const r=new h,o=s?.id?`${e}_${s?.id}`:e;joystick?.emitters&&joystick?.emitters[o]?joystick.emitters[o].push(r):joystick.emitters={...joystick?.emitters||{},[o]:[r]},r.on("message",(t={})=>{n.send(JSON.stringify(t))}),r.on("progress",(t={})=>{n.send(JSON.stringify({type:"PROGRESS",...t}))})},C=(e={})=>{const[s,n]=e?.url?.split("?");return S.parse(n)},E=(e="",s={})=>{s?.server.on("connection",(n={},r={})=>{const o=C(r);u(e,o,n),$(n,o,s)})},c=(e="",s={},n=[])=>(a(`node.websockets.${e}.on_close`,n),s?.onClose||s?.on_close?(s?.onClose||s?.on_close)(...n):null),m=(e="",s={},n=[])=>(a(`node.websockets.${e}.on_message`,n),s?.onMessage||s?.on_message?(s?.onMessage||s?.on_message)(...n):null),g=(e="",s={},n=[])=>(a(`node.websockets.${e}.on_open`,n),s?.onOpen||s?.on_open?(s?.onOpen||s?.on_open)(...n):null),v=(e="")=>new y.WebSocketServer({noServer:!0,path:`/api/_websockets/${e}`}),J=(e={})=>({uploaders:{server:v("uploaders")},...Object.entries(e||{}).reduce((s={},[n,r])=>(s[n]={server:v(n),on_open:(...o)=>g(n,r,o),onOpen:(...o)=>g(n,r,o),on_message:(...o)=>m(n,r,o),onMessage:(...o)=>m(n,r,o),on_close:(...o)=>c(n,r,o),onClose:(...o)=>c(n,r,o)},s),{})}),M=(e={},s={})=>{const n=J(e),r=Object.entries(n);for(let o=0;o<r?.length;o+=1){const[t,p]=r[o];E(t,p)}j(s.express.server,n)};var W=M;export{W as default};