@wasp.sh/wasp-cli-darwin-arm64-unknown 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/data/Cli/starters/README.md +22 -0
  2. package/data/Cli/starters/basic/README.md +35 -0
  3. package/data/Cli/starters/basic/eslint.config.js +24 -0
  4. package/data/Cli/starters/basic/main.wasp +100 -0
  5. package/data/Cli/starters/basic/package.json +29 -0
  6. package/data/Cli/starters/basic/postcss.config.js +6 -0
  7. package/data/Cli/starters/basic/schema.prisma +42 -0
  8. package/data/Cli/starters/basic/src/App.css +13 -0
  9. package/data/Cli/starters/basic/src/App.tsx +12 -0
  10. package/data/Cli/starters/basic/src/assets/logo.svg +1 -0
  11. package/data/Cli/starters/basic/src/auth/AuthLayout.tsx +10 -0
  12. package/data/Cli/starters/basic/src/auth/email/EmailVerificationPage.tsx +19 -0
  13. package/data/Cli/starters/basic/src/auth/email/LoginPage.tsx +27 -0
  14. package/data/Cli/starters/basic/src/auth/email/PasswordResetPage.tsx +19 -0
  15. package/data/Cli/starters/basic/src/auth/email/RequestPasswordResetPage.tsx +10 -0
  16. package/data/Cli/starters/basic/src/auth/email/SignupPage.tsx +34 -0
  17. package/data/Cli/starters/basic/src/auth/email/userSignupFields.ts +13 -0
  18. package/data/Cli/starters/basic/src/shared/components/Button.tsx +90 -0
  19. package/data/Cli/starters/basic/src/shared/components/Dialog.tsx +85 -0
  20. package/data/Cli/starters/basic/src/shared/components/Header.tsx +39 -0
  21. package/data/Cli/starters/basic/src/shared/components/Input.tsx +36 -0
  22. package/data/Cli/starters/basic/src/shared/components/Portal.tsx +26 -0
  23. package/data/Cli/starters/basic/src/tags/actions.ts +23 -0
  24. package/data/Cli/starters/basic/src/tags/components/ColorRadioButton.tsx +44 -0
  25. package/data/Cli/starters/basic/src/tags/components/ColorRadioButtons.tsx +59 -0
  26. package/data/Cli/starters/basic/src/tags/components/CreateTagDialog.tsx +50 -0
  27. package/data/Cli/starters/basic/src/tags/components/CreateTagForm.tsx +100 -0
  28. package/data/Cli/starters/basic/src/tags/components/TagLabel.tsx +55 -0
  29. package/data/Cli/starters/basic/src/tags/components/colors.ts +8 -0
  30. package/data/Cli/starters/basic/src/tags/queries.ts +14 -0
  31. package/data/Cli/starters/basic/src/tasks/TasksPage.tsx +19 -0
  32. package/data/Cli/starters/basic/src/tasks/actions.ts +71 -0
  33. package/data/Cli/starters/basic/src/tasks/components/CreateTaskForm.tsx +103 -0
  34. package/data/Cli/starters/basic/src/tasks/components/TaskList.tsx +68 -0
  35. package/data/Cli/starters/basic/src/tasks/components/TaskListItem.tsx +56 -0
  36. package/data/Cli/starters/basic/src/tasks/queries.ts +21 -0
  37. package/data/Cli/starters/basic/tailwind.config.js +30 -0
  38. package/data/Cli/starters/basic/vite.config.ts +7 -0
  39. package/data/Cli/starters/minimal/main.wasp +14 -0
  40. package/data/Cli/starters/minimal/package.json +18 -0
  41. package/data/Cli/starters/minimal/schema.prisma +10 -0
  42. package/data/Cli/starters/minimal/src/Main.css +103 -0
  43. package/data/Cli/starters/minimal/src/MainPage.tsx +37 -0
  44. package/data/Cli/starters/minimal/src/assets/logo.svg +1 -0
  45. package/data/Cli/starters/minimal/vite.config.ts +7 -0
  46. package/data/Cli/starters/skeleton/public/favicon.ico +0 -0
  47. package/data/Cli/starters/skeleton/src/vite-env.d.ts +7 -0
  48. package/data/Cli/starters/skeleton/tsconfig.json +28 -0
  49. package/data/Generator/templates/Dockerfile +78 -0
  50. package/data/Generator/templates/db/schema.prisma +24 -0
  51. package/data/Generator/templates/dockerignore +2 -0
  52. package/data/Generator/templates/react-app/README.md +21 -0
  53. package/data/Generator/templates/react-app/gitignore +23 -0
  54. package/data/Generator/templates/react-app/index.html +22 -0
  55. package/data/Generator/templates/react-app/netlify.toml +8 -0
  56. package/data/Generator/templates/react-app/npmrc +1 -0
  57. package/data/Generator/templates/react-app/package.json +31 -0
  58. package/data/Generator/templates/react-app/public/manifest.json +15 -0
  59. package/data/Generator/templates/react-app/src/auth/pages/OAuthCallback.tsx +93 -0
  60. package/data/Generator/templates/react-app/src/auth/pages/createAuthRequiredPage.jsx +40 -0
  61. package/data/Generator/templates/react-app/src/components/DefaultRootErrorBoundary.tsx +16 -0
  62. package/data/Generator/templates/react-app/src/components/FullPageWrapper.tsx +21 -0
  63. package/data/Generator/templates/react-app/src/components/Loader.module.css +37 -0
  64. package/data/Generator/templates/react-app/src/components/Loader.tsx +12 -0
  65. package/data/Generator/templates/react-app/src/components/Message.tsx +86 -0
  66. package/data/Generator/templates/react-app/src/index.tsx +47 -0
  67. package/data/Generator/templates/react-app/src/logo.png +0 -0
  68. package/data/Generator/templates/react-app/src/router.tsx +59 -0
  69. package/data/Generator/templates/react-app/src/test/vitest/setup.ts +8 -0
  70. package/data/Generator/templates/react-app/src/utils.js +3 -0
  71. package/data/Generator/templates/react-app/src/vite-env.d.ts +1 -0
  72. package/data/Generator/templates/react-app/tsconfig.app.json +28 -0
  73. package/data/Generator/templates/react-app/tsconfig.json +11 -0
  74. package/data/Generator/templates/react-app/tsconfig.vite.json +16 -0
  75. package/data/Generator/templates/react-app/vite/detectServerImports.ts +53 -0
  76. package/data/Generator/templates/react-app/vite/validateEnv.ts +45 -0
  77. package/data/Generator/templates/react-app/vite.config.ts +74 -0
  78. package/data/Generator/templates/sdk/wasp/api/events.ts +11 -0
  79. package/data/Generator/templates/sdk/wasp/api/index.ts +136 -0
  80. package/data/Generator/templates/sdk/wasp/auth/email/actions/login.ts +13 -0
  81. package/data/Generator/templates/sdk/wasp/auth/email/actions/passwordReset.ts +22 -0
  82. package/data/Generator/templates/sdk/wasp/auth/email/actions/signup.ts +20 -0
  83. package/data/Generator/templates/sdk/wasp/auth/email/actions/verifyEmail.ts +14 -0
  84. package/data/Generator/templates/sdk/wasp/auth/email/index.ts +5 -0
  85. package/data/Generator/templates/sdk/wasp/auth/forms/Auth.module.css +16 -0
  86. package/data/Generator/templates/sdk/wasp/auth/forms/Auth.tsx +94 -0
  87. package/data/Generator/templates/sdk/wasp/auth/forms/ForgotPassword.tsx +18 -0
  88. package/data/Generator/templates/sdk/wasp/auth/forms/Login.tsx +18 -0
  89. package/data/Generator/templates/sdk/wasp/auth/forms/ResetPassword.tsx +18 -0
  90. package/data/Generator/templates/sdk/wasp/auth/forms/Signup.tsx +24 -0
  91. package/data/Generator/templates/sdk/wasp/auth/forms/VerifyEmail.tsx +18 -0
  92. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.module.css +99 -0
  93. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.tsx +74 -0
  94. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.module.css +22 -0
  95. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.tsx +34 -0
  96. package/data/Generator/templates/sdk/wasp/auth/forms/internal/auth-styles.css +30 -0
  97. package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.module.css +55 -0
  98. package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx +291 -0
  99. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/ForgotPasswordForm.tsx +52 -0
  100. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/ResetPasswordForm.tsx +82 -0
  101. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/VerifyEmailForm.tsx +43 -0
  102. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/useEmail.ts +33 -0
  103. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.module.css +33 -0
  104. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.tsx +14 -0
  105. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.module.css +4 -0
  106. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.tsx +74 -0
  107. package/data/Generator/templates/sdk/wasp/auth/forms/internal/usernameAndPassword/useUsernameAndPassword.ts +29 -0
  108. package/data/Generator/templates/sdk/wasp/auth/forms/internal/util.ts +16 -0
  109. package/data/Generator/templates/sdk/wasp/auth/forms/types.ts +77 -0
  110. package/data/Generator/templates/sdk/wasp/auth/helpers/_Provider.tsx +17 -0
  111. package/data/Generator/templates/sdk/wasp/auth/helpers/user.ts +15 -0
  112. package/data/Generator/templates/sdk/wasp/auth/index.ts +9 -0
  113. package/data/Generator/templates/sdk/wasp/auth/jwt.ts +22 -0
  114. package/data/Generator/templates/sdk/wasp/auth/logout.ts +18 -0
  115. package/data/Generator/templates/sdk/wasp/auth/lucia.ts +53 -0
  116. package/data/Generator/templates/sdk/wasp/auth/password.ts +36 -0
  117. package/data/Generator/templates/sdk/wasp/auth/providers/index.ts +9 -0
  118. package/data/Generator/templates/sdk/wasp/auth/providers/types.ts +68 -0
  119. package/data/Generator/templates/sdk/wasp/auth/session.ts +78 -0
  120. package/data/Generator/templates/sdk/wasp/auth/types.ts +2 -0
  121. package/data/Generator/templates/sdk/wasp/auth/useAuth.ts +37 -0
  122. package/data/Generator/templates/sdk/wasp/auth/user.ts +63 -0
  123. package/data/Generator/templates/sdk/wasp/auth/username/actions/login.ts +13 -0
  124. package/data/Generator/templates/sdk/wasp/auth/username/actions/signup.ts +20 -0
  125. package/data/Generator/templates/sdk/wasp/auth/username/index.ts +2 -0
  126. package/data/Generator/templates/sdk/wasp/auth/utils.ts +369 -0
  127. package/data/Generator/templates/sdk/wasp/auth/validation.ts +83 -0
  128. package/data/Generator/templates/sdk/wasp/client/auth/discord.ts +2 -0
  129. package/data/Generator/templates/sdk/wasp/client/auth/email.ts +5 -0
  130. package/data/Generator/templates/sdk/wasp/client/auth/github.ts +2 -0
  131. package/data/Generator/templates/sdk/wasp/client/auth/google.ts +2 -0
  132. package/data/Generator/templates/sdk/wasp/client/auth/index.ts +29 -0
  133. package/data/Generator/templates/sdk/wasp/client/auth/keycloak.ts +2 -0
  134. package/data/Generator/templates/sdk/wasp/client/auth/slack.ts +2 -0
  135. package/data/Generator/templates/sdk/wasp/client/auth/ui.ts +32 -0
  136. package/data/Generator/templates/sdk/wasp/client/auth/username.ts +2 -0
  137. package/data/Generator/templates/sdk/wasp/client/config.ts +15 -0
  138. package/data/Generator/templates/sdk/wasp/client/crud/_crud.ts +89 -0
  139. package/data/Generator/templates/sdk/wasp/client/crud/index.ts +4 -0
  140. package/data/Generator/templates/sdk/wasp/client/crud/operationsHelpers.ts +21 -0
  141. package/data/Generator/templates/sdk/wasp/client/env/schema.ts +22 -0
  142. package/data/Generator/templates/sdk/wasp/client/env.ts +5 -0
  143. package/data/Generator/templates/sdk/wasp/client/hooks.ts +19 -0
  144. package/data/Generator/templates/sdk/wasp/client/index.ts +17 -0
  145. package/data/Generator/templates/sdk/wasp/client/operations/actions/core.ts +49 -0
  146. package/data/Generator/templates/sdk/wasp/client/operations/actions/index.ts +13 -0
  147. package/data/Generator/templates/sdk/wasp/client/operations/hooks.ts +347 -0
  148. package/data/Generator/templates/sdk/wasp/client/operations/index.ts +22 -0
  149. package/data/Generator/templates/sdk/wasp/client/operations/internal/index.ts +22 -0
  150. package/data/Generator/templates/sdk/wasp/client/operations/internal/resources.js +83 -0
  151. package/data/Generator/templates/sdk/wasp/client/operations/internal/updateHandlersMap.js +37 -0
  152. package/data/Generator/templates/sdk/wasp/client/operations/queries/core.ts +91 -0
  153. package/data/Generator/templates/sdk/wasp/client/operations/queries/index.ts +16 -0
  154. package/data/Generator/templates/sdk/wasp/client/operations/queryClient.ts +34 -0
  155. package/data/Generator/templates/sdk/wasp/client/operations/rpc.ts +96 -0
  156. package/data/Generator/templates/sdk/wasp/client/router/Link.tsx +21 -0
  157. package/data/Generator/templates/sdk/wasp/client/router/index.ts +53 -0
  158. package/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts +48 -0
  159. package/data/Generator/templates/sdk/wasp/client/router/types.ts +98 -0
  160. package/data/Generator/templates/sdk/wasp/client/test/index.ts +1 -0
  161. package/data/Generator/templates/sdk/wasp/client/test/vitest/helpers.tsx +95 -0
  162. package/data/Generator/templates/sdk/wasp/client/webSocket/WebSocketProvider.tsx +77 -0
  163. package/data/Generator/templates/sdk/wasp/client/webSocket/index.ts +39 -0
  164. package/data/Generator/templates/sdk/wasp/core/auth.ts +40 -0
  165. package/data/Generator/templates/sdk/wasp/core/serialization/custom-register.ts +21 -0
  166. package/data/Generator/templates/sdk/wasp/core/serialization/index.ts +56 -0
  167. package/data/Generator/templates/sdk/wasp/core/serialization/prisma.ts +54 -0
  168. package/data/Generator/templates/sdk/wasp/core/storage.ts +50 -0
  169. package/data/Generator/templates/sdk/wasp/dev/index.ts +19 -0
  170. package/data/Generator/templates/sdk/wasp/entities/index.ts +28 -0
  171. package/data/Generator/templates/sdk/wasp/env/index.ts +9 -0
  172. package/data/Generator/templates/sdk/wasp/env/validation.ts +38 -0
  173. package/data/Generator/templates/sdk/wasp/package.json +152 -0
  174. package/data/Generator/templates/sdk/wasp/prisma-runtime-library.d.ts +17 -0
  175. package/data/Generator/templates/sdk/wasp/scripts/copy-assets.js +14 -0
  176. package/data/Generator/templates/sdk/wasp/server/HttpError.ts +30 -0
  177. package/data/Generator/templates/sdk/wasp/server/_types/index.ts +105 -0
  178. package/data/Generator/templates/sdk/wasp/server/_types/taggedEntities.ts +26 -0
  179. package/data/Generator/templates/sdk/wasp/server/api/index.ts +44 -0
  180. package/data/Generator/templates/sdk/wasp/server/auth/email/index.ts +20 -0
  181. package/data/Generator/templates/sdk/wasp/server/auth/email/utils.ts +104 -0
  182. package/data/Generator/templates/sdk/wasp/server/auth/hooks.ts +188 -0
  183. package/data/Generator/templates/sdk/wasp/server/auth/index.ts +49 -0
  184. package/data/Generator/templates/sdk/wasp/server/auth/oauth/index.ts +38 -0
  185. package/data/Generator/templates/sdk/wasp/server/auth/oauth/oneTimeCode.ts +50 -0
  186. package/data/Generator/templates/sdk/wasp/server/auth/oauth/provider.ts +20 -0
  187. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/discord.ts +22 -0
  188. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/github.ts +20 -0
  189. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/google.ts +22 -0
  190. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/keycloak.ts +23 -0
  191. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/slack.ts +22 -0
  192. package/data/Generator/templates/sdk/wasp/server/auth/oauth/redirect.ts +43 -0
  193. package/data/Generator/templates/sdk/wasp/server/auth/user.ts +148 -0
  194. package/data/Generator/templates/sdk/wasp/server/auth/username.ts +1 -0
  195. package/data/Generator/templates/sdk/wasp/server/config.ts +47 -0
  196. package/data/Generator/templates/sdk/wasp/server/crud/_operationTypes.ts +134 -0
  197. package/data/Generator/templates/sdk/wasp/server/crud/index.ts +5 -0
  198. package/data/Generator/templates/sdk/wasp/server/dbClient.ts +35 -0
  199. package/data/Generator/templates/sdk/wasp/server/email/core/helpers.ts +40 -0
  200. package/data/Generator/templates/sdk/wasp/server/email/core/index.ts +17 -0
  201. package/data/Generator/templates/sdk/wasp/server/email/core/providers/dummy.ts +34 -0
  202. package/data/Generator/templates/sdk/wasp/server/email/core/providers/mailgun.ts +31 -0
  203. package/data/Generator/templates/sdk/wasp/server/email/core/providers/sendgrid.ts +44 -0
  204. package/data/Generator/templates/sdk/wasp/server/email/core/providers/smtp.ts +29 -0
  205. package/data/Generator/templates/sdk/wasp/server/email/core/types.ts +59 -0
  206. package/data/Generator/templates/sdk/wasp/server/email/index.ts +39 -0
  207. package/data/Generator/templates/sdk/wasp/server/env.ts +173 -0
  208. package/data/Generator/templates/sdk/wasp/server/index.ts +17 -0
  209. package/data/Generator/templates/sdk/wasp/server/jobs/_job.ts +39 -0
  210. package/data/Generator/templates/sdk/wasp/server/jobs/core/job.ts +28 -0
  211. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/index.ts +3 -0
  212. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/pgBoss.ts +76 -0
  213. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/pgBossJob.ts +230 -0
  214. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/types.ts +9 -0
  215. package/data/Generator/templates/sdk/wasp/server/jobs/index.ts +5 -0
  216. package/data/Generator/templates/sdk/wasp/server/middleware/globalMiddleware.ts +8 -0
  217. package/data/Generator/templates/sdk/wasp/server/middleware/index.ts +1 -0
  218. package/data/Generator/templates/sdk/wasp/server/operations/actions/index.ts +41 -0
  219. package/data/Generator/templates/sdk/wasp/server/operations/actions/types.ts +35 -0
  220. package/data/Generator/templates/sdk/wasp/server/operations/index.ts +13 -0
  221. package/data/Generator/templates/sdk/wasp/server/operations/queries/index.ts +42 -0
  222. package/data/Generator/templates/sdk/wasp/server/operations/queries/types.ts +36 -0
  223. package/data/Generator/templates/sdk/wasp/server/operations/wrappers.ts +242 -0
  224. package/data/Generator/templates/sdk/wasp/server/types/index.ts +11 -0
  225. package/data/Generator/templates/sdk/wasp/server/utils.ts +38 -0
  226. package/data/Generator/templates/sdk/wasp/server/webSocket/index.ts +57 -0
  227. package/data/Generator/templates/sdk/wasp/tsconfig.json +102 -0
  228. package/data/Generator/templates/sdk/wasp/universal/ansiColors.ts +14 -0
  229. package/data/Generator/templates/sdk/wasp/universal/predicates.ts +3 -0
  230. package/data/Generator/templates/sdk/wasp/universal/types.ts +74 -0
  231. package/data/Generator/templates/sdk/wasp/universal/url.ts +9 -0
  232. package/data/Generator/templates/sdk/wasp/universal/validators.ts +21 -0
  233. package/data/Generator/templates/sdk/wasp/vite-env.d.ts +1 -0
  234. package/data/Generator/templates/server/README.md +1 -0
  235. package/data/Generator/templates/server/gitignore +6 -0
  236. package/data/Generator/templates/server/nodemon.json +13 -0
  237. package/data/Generator/templates/server/npmrc +1 -0
  238. package/data/Generator/templates/server/package.json +27 -0
  239. package/data/Generator/templates/server/rollup.config.js +44 -0
  240. package/data/Generator/templates/server/src/actions/_action.ts +18 -0
  241. package/data/Generator/templates/server/src/app.js +36 -0
  242. package/data/Generator/templates/server/src/auth/hooks.ts +135 -0
  243. package/data/Generator/templates/server/src/auth/providers/config/discord.ts +69 -0
  244. package/data/Generator/templates/server/src/auth/providers/config/email.ts +96 -0
  245. package/data/Generator/templates/server/src/auth/providers/config/github.ts +78 -0
  246. package/data/Generator/templates/server/src/auth/providers/config/google.ts +65 -0
  247. package/data/Generator/templates/server/src/auth/providers/config/keycloak.ts +67 -0
  248. package/data/Generator/templates/server/src/auth/providers/config/slack.ts +65 -0
  249. package/data/Generator/templates/server/src/auth/providers/config/username.ts +33 -0
  250. package/data/Generator/templates/server/src/auth/providers/email/login.ts +66 -0
  251. package/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts +74 -0
  252. package/data/Generator/templates/server/src/auth/providers/email/resetPassword.ts +48 -0
  253. package/data/Generator/templates/server/src/auth/providers/email/signup.ts +165 -0
  254. package/data/Generator/templates/server/src/auth/providers/email/verifyEmail.ts +42 -0
  255. package/data/Generator/templates/server/src/auth/providers/index.ts +32 -0
  256. package/data/Generator/templates/server/src/auth/providers/oauth/config.ts +19 -0
  257. package/data/Generator/templates/server/src/auth/providers/oauth/cookies.ts +35 -0
  258. package/data/Generator/templates/server/src/auth/providers/oauth/handler.ts +130 -0
  259. package/data/Generator/templates/server/src/auth/providers/oauth/oneTimeCode.ts +39 -0
  260. package/data/Generator/templates/server/src/auth/providers/oauth/state.ts +144 -0
  261. package/data/Generator/templates/server/src/auth/providers/oauth/types.ts +7 -0
  262. package/data/Generator/templates/server/src/auth/providers/oauth/user.ts +139 -0
  263. package/data/Generator/templates/server/src/auth/providers/username/login.ts +64 -0
  264. package/data/Generator/templates/server/src/auth/providers/username/signup.ts +59 -0
  265. package/data/Generator/templates/server/src/crud/_operations.ts +184 -0
  266. package/data/Generator/templates/server/src/dbSeed.ts +37 -0
  267. package/data/Generator/templates/server/src/jobs/_job.ts +9 -0
  268. package/data/Generator/templates/server/src/jobs/core/allJobs.ts +8 -0
  269. package/data/Generator/templates/server/src/middleware/globalMiddleware.ts +45 -0
  270. package/data/Generator/templates/server/src/middleware/index.ts +1 -0
  271. package/data/Generator/templates/server/src/middleware/operations.ts +28 -0
  272. package/data/Generator/templates/server/src/queries/_query.ts +18 -0
  273. package/data/Generator/templates/server/src/routes/apis/index.ts +67 -0
  274. package/data/Generator/templates/server/src/routes/auth/index.js +16 -0
  275. package/data/Generator/templates/server/src/routes/auth/logout.ts +12 -0
  276. package/data/Generator/templates/server/src/routes/auth/me.ts +10 -0
  277. package/data/Generator/templates/server/src/routes/crud/_crud.ts +46 -0
  278. package/data/Generator/templates/server/src/routes/crud/index.ts +12 -0
  279. package/data/Generator/templates/server/src/routes/index.js +55 -0
  280. package/data/Generator/templates/server/src/routes/operations/_action.js +5 -0
  281. package/data/Generator/templates/server/src/routes/operations/_query.js +5 -0
  282. package/data/Generator/templates/server/src/routes/operations/index.js +18 -0
  283. package/data/Generator/templates/server/src/server.ts +76 -0
  284. package/data/Generator/templates/server/src/views/wrong-port.ts +123 -0
  285. package/data/Generator/templates/server/src/webSocket/initialization.ts +59 -0
  286. package/data/Generator/templates/server/tsconfig.json +41 -0
  287. package/data/Lsp/templates/ts/action.fn.ts +12 -0
  288. package/data/Lsp/templates/ts/operation.fn.js +7 -0
  289. package/data/Lsp/templates/ts/page.component.jsx +9 -0
  290. package/data/Lsp/templates/ts/query.fn.ts +12 -0
  291. package/data/packages/deploy/dist/common/brandedTypes.js +2 -0
  292. package/data/packages/deploy/dist/common/clientApp.js +26 -0
  293. package/data/packages/deploy/dist/common/commander.js +8 -0
  294. package/data/packages/deploy/dist/common/random.js +5 -0
  295. package/data/packages/deploy/dist/common/terminal.js +24 -0
  296. package/data/packages/deploy/dist/common/typeUtils.js +2 -0
  297. package/data/packages/deploy/dist/common/validation.js +14 -0
  298. package/data/packages/deploy/dist/common/waspBuild.js +21 -0
  299. package/data/packages/deploy/dist/common/waspProject.js +43 -0
  300. package/data/packages/deploy/dist/common/zx.js +10 -0
  301. package/data/packages/deploy/dist/index.js +30 -0
  302. package/data/packages/deploy/dist/providers/fly/CommonCmdOptions.js +2 -0
  303. package/data/packages/deploy/dist/providers/fly/CommonOps.js +36 -0
  304. package/data/packages/deploy/dist/providers/fly/DeploymentInstructions.js +12 -0
  305. package/data/packages/deploy/dist/providers/fly/commands/cmd/CmdCmdOptions.js +2 -0
  306. package/data/packages/deploy/dist/providers/fly/commands/cmd/cmd.js +29 -0
  307. package/data/packages/deploy/dist/providers/fly/commands/createDb/CreateDbCmdOptions.js +2 -0
  308. package/data/packages/deploy/dist/providers/fly/commands/createDb/createDb.js +55 -0
  309. package/data/packages/deploy/dist/providers/fly/commands/deploy/DeployCmdOptions.js +2 -0
  310. package/data/packages/deploy/dist/providers/fly/commands/deploy/deploy.js +88 -0
  311. package/data/packages/deploy/dist/providers/fly/commands/launch/LaunchCmdOptions.js +2 -0
  312. package/data/packages/deploy/dist/providers/fly/commands/launch/launch.js +17 -0
  313. package/data/packages/deploy/dist/providers/fly/commands/setup/SetupCmdOptions.js +2 -0
  314. package/data/packages/deploy/dist/providers/fly/commands/setup/setup.js +141 -0
  315. package/data/packages/deploy/dist/providers/fly/flyAppUrl.js +4 -0
  316. package/data/packages/deploy/dist/providers/fly/flyCli.js +74 -0
  317. package/data/packages/deploy/dist/providers/fly/index.js +121 -0
  318. package/data/packages/deploy/dist/providers/fly/jsonOutputSchemas.js +37 -0
  319. package/data/packages/deploy/dist/providers/fly/tomlFile.js +65 -0
  320. package/data/packages/deploy/dist/providers/railway/DeploymentInstructions.js +11 -0
  321. package/data/packages/deploy/dist/providers/railway/brandedTypes.js +2 -0
  322. package/data/packages/deploy/dist/providers/railway/commands/deploy/DeployCmdOptions.js +2 -0
  323. package/data/packages/deploy/dist/providers/railway/commands/deploy/client.js +22 -0
  324. package/data/packages/deploy/dist/providers/railway/commands/deploy/common.js +40 -0
  325. package/data/packages/deploy/dist/providers/railway/commands/deploy/index.js +57 -0
  326. package/data/packages/deploy/dist/providers/railway/commands/deploy/server.js +17 -0
  327. package/data/packages/deploy/dist/providers/railway/commands/launch/LaunchCmdOptions.js +2 -0
  328. package/data/packages/deploy/dist/providers/railway/commands/launch/launch.js +9 -0
  329. package/data/packages/deploy/dist/providers/railway/commands/setup/SetupCmdOptions.js +2 -0
  330. package/data/packages/deploy/dist/providers/railway/commands/setup/setup.js +146 -0
  331. package/data/packages/deploy/dist/providers/railway/index.js +83 -0
  332. package/data/packages/deploy/dist/providers/railway/jsonOutputSchemas.js +19 -0
  333. package/data/packages/deploy/dist/providers/railway/ports.js +6 -0
  334. package/data/packages/deploy/dist/providers/railway/railwayCli.js +85 -0
  335. package/data/packages/deploy/dist/providers/railway/railwayProject/RailwayProject.js +14 -0
  336. package/data/packages/deploy/dist/providers/railway/railwayProject/cli.js +80 -0
  337. package/data/packages/deploy/dist/providers/railway/railwayProject/index.js +48 -0
  338. package/data/packages/deploy/dist/providers/railway/railwayService/nameGenerator.js +24 -0
  339. package/data/packages/deploy/dist/providers/railway/railwayService/url.js +32 -0
  340. package/data/packages/deploy/package-lock.json +3536 -0
  341. package/data/packages/deploy/package.json +29 -0
  342. package/data/packages/prisma/dist/format.js +35 -0
  343. package/data/packages/prisma/dist/index.js +33 -0
  344. package/data/packages/prisma/package-lock.json +5101 -0
  345. package/data/packages/prisma/package.json +30 -0
  346. package/data/packages/studio/dist/index.js +48 -0
  347. package/data/packages/studio/dist/public/assets/Flow-b5112d3d.js +26 -0
  348. package/data/packages/studio/dist/public/assets/index-17ce6ed4.css +1 -0
  349. package/data/packages/studio/dist/public/assets/index-62a9d21a.js +120 -0
  350. package/data/packages/studio/dist/public/index.html +14 -0
  351. package/data/packages/studio/package-lock.json +1866 -0
  352. package/data/packages/studio/package.json +33 -0
  353. package/data/packages/ts-inspect/dist/exports.js +82 -0
  354. package/data/packages/ts-inspect/dist/index.js +28 -0
  355. package/data/packages/ts-inspect/package-lock.json +4947 -0
  356. package/data/packages/ts-inspect/package.json +31 -0
  357. package/data/packages/wasp-config/dist/__tests__/appAnalyzer.unit.test.d.ts +2 -0
  358. package/data/packages/wasp-config/dist/__tests__/appAnalyzer.unit.test.d.ts.map +1 -0
  359. package/data/packages/wasp-config/dist/__tests__/appAnalyzer.unit.test.js +59 -0
  360. package/data/packages/wasp-config/dist/__tests__/cli.unit.test.d.ts +2 -0
  361. package/data/packages/wasp-config/dist/__tests__/cli.unit.test.d.ts.map +1 -0
  362. package/data/packages/wasp-config/dist/__tests__/cli.unit.test.js +65 -0
  363. package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.integration.test.d.ts +2 -0
  364. package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.integration.test.d.ts.map +1 -0
  365. package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.integration.test.js +126 -0
  366. package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.unit.test.d.ts +2 -0
  367. package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.unit.test.d.ts.map +1 -0
  368. package/data/packages/wasp-config/dist/__tests__/mapTsAppSpecToAppSpecDecls.unit.test.js +743 -0
  369. package/data/packages/wasp-config/dist/__tests__/testFixtures.d.ts +224 -0
  370. package/data/packages/wasp-config/dist/__tests__/testFixtures.d.ts.map +1 -0
  371. package/data/packages/wasp-config/dist/__tests__/testFixtures.js +656 -0
  372. package/data/packages/wasp-config/dist/__tests__/testFixtures.test-d.d.ts +2 -0
  373. package/data/packages/wasp-config/dist/__tests__/testFixtures.test-d.d.ts.map +1 -0
  374. package/data/packages/wasp-config/dist/__tests__/testFixtures.test-d.js +57 -0
  375. package/data/packages/wasp-config/dist/src/_private.d.ts +2 -0
  376. package/data/packages/wasp-config/dist/src/_private.d.ts.map +1 -0
  377. package/data/packages/wasp-config/dist/src/_private.js +1 -0
  378. package/data/packages/wasp-config/dist/src/appAnalyzer.d.ts +16 -0
  379. package/data/packages/wasp-config/dist/src/appAnalyzer.d.ts.map +1 -0
  380. package/data/packages/wasp-config/dist/src/appAnalyzer.js +34 -0
  381. package/data/packages/wasp-config/dist/src/appSpec.d.ts +223 -0
  382. package/data/packages/wasp-config/dist/src/appSpec.d.ts.map +1 -0
  383. package/data/packages/wasp-config/dist/src/appSpec.js +6 -0
  384. package/data/packages/wasp-config/dist/src/branded.d.ts +7 -0
  385. package/data/packages/wasp-config/dist/src/branded.d.ts.map +1 -0
  386. package/data/packages/wasp-config/dist/src/branded.js +1 -0
  387. package/data/packages/wasp-config/dist/src/cli.d.ts +6 -0
  388. package/data/packages/wasp-config/dist/src/cli.d.ts.map +1 -0
  389. package/data/packages/wasp-config/dist/src/cli.js +24 -0
  390. package/data/packages/wasp-config/dist/src/index.d.ts +8 -0
  391. package/data/packages/wasp-config/dist/src/index.d.ts.map +1 -0
  392. package/data/packages/wasp-config/dist/src/index.js +1 -0
  393. package/data/packages/wasp-config/dist/src/mapTsAppSpecToAppSpecDecls.d.ts +38 -0
  394. package/data/packages/wasp-config/dist/src/mapTsAppSpecToAppSpecDecls.d.ts.map +1 -0
  395. package/data/packages/wasp-config/dist/src/mapTsAppSpecToAppSpecDecls.js +294 -0
  396. package/data/packages/wasp-config/dist/src/publicApi/App.d.ts +24 -0
  397. package/data/packages/wasp-config/dist/src/publicApi/App.d.ts.map +1 -0
  398. package/data/packages/wasp-config/dist/src/publicApi/App.js +75 -0
  399. package/data/packages/wasp-config/dist/src/publicApi/tsAppSpec.d.ts +171 -0
  400. package/data/packages/wasp-config/dist/src/publicApi/tsAppSpec.d.ts.map +1 -0
  401. package/data/packages/wasp-config/dist/src/publicApi/tsAppSpec.js +1 -0
  402. package/data/packages/wasp-config/dist/src/run.d.ts +3 -0
  403. package/data/packages/wasp-config/dist/src/run.d.ts.map +1 -0
  404. package/data/packages/wasp-config/dist/src/run.js +18 -0
  405. package/data/packages/wasp-config/package-lock.json +3992 -0
  406. package/data/packages/wasp-config/package.json +39 -0
  407. package/main.js +9 -0
  408. package/package.json +1 -0
  409. package/readme.md +3 -0
  410. package/wasp-bin +0 -0
@@ -0,0 +1,9 @@
1
+ export function stripTrailingSlash(url: string): string
2
+ export function stripTrailingSlash(url: undefined): undefined
3
+ export function stripTrailingSlash(url?: string): string | undefined {
4
+ return url?.replace(/\/$/, "");
5
+ }
6
+
7
+ export function getOrigin(url: string) {
8
+ return new URL(url).origin;
9
+ }
@@ -0,0 +1,21 @@
1
+ export function isValidAbsoluteURL(rawUrl: string): boolean {
2
+ try {
3
+ const url = new URL(rawUrl);
4
+ /*
5
+ URL constructor will parse some invalid absolute URLs as valid URLs
6
+ so we need to do some extra checks.
7
+
8
+ Example: "localhost:3000" will be parsed as URL with protocol of
9
+ "localhost:" and host of "3000"
10
+ */
11
+ return url.protocol === "http:" || url.protocol === "https:";
12
+ } catch (e) {
13
+ return false;
14
+ }
15
+ }
16
+
17
+ export function throwIfNotValidAbsoluteURL(value: string | undefined, name: string): void {
18
+ if (value && !isValidAbsoluteURL(value)) {
19
+ throw new Error(`${name} must be a valid absolute URL`);
20
+ }
21
+ }
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1 @@
1
+ `npm start` to run server in development mode (it reloads on changes).
@@ -0,0 +1,6 @@
1
+ node_modules
2
+
3
+ npm-debug.log
4
+ *.log
5
+
6
+ .env
@@ -0,0 +1,13 @@
1
+ {{={= =}=}}
2
+ {
3
+ "env": {
4
+ "NODE_ENV": "development"
5
+ },
6
+ "watch": [
7
+ "src/",
8
+ "{= relativeUserSrcDirPath =}",
9
+ ".env"
10
+ ],
11
+ "comment-filip": "We now have to watch {= relativeUserSrcDirPath =} because we're importing client files directly",
12
+ "ext": "ts,mts,js,mjs,json"
13
+ }
@@ -0,0 +1 @@
1
+ engine-strict=true
@@ -0,0 +1,27 @@
1
+ {{={= =}=}}
2
+ {
3
+ "name": "{= packageName =}",
4
+ "version": "0.0.0",
5
+ "private": true,
6
+ "type": "module",
7
+ "comment-filip": "The server.js location changed because we have now included client source files above .wasp/out/server/src.",
8
+ "scripts": {
9
+ "bundle": "tsc --build && rollup --config --silent",
10
+ "start": "node --enable-source-maps -r dotenv/config bundle/server.js",
11
+ "bundle-and-start": "npm run bundle && npm run start",
12
+ "watch": "nodemon --exec 'npm run bundle-and-start || exit 1'",
13
+ "db-seed": "npm run bundle && node --enable-source-maps -r dotenv/config bundle/dbSeed.js",
14
+ "db-migrate-prod": "prisma migrate deploy --schema=../db/schema.prisma",
15
+ "start-production": "{=& startProductionScript =}"
16
+ },
17
+ "nodemonConfig": {
18
+ "delay": "1000"
19
+ },
20
+ "engineStrict": true,
21
+ "engines": {
22
+ "node": "{=& nodeVersionRange =}"
23
+ },
24
+ "prisma": {=& prisma =},
25
+ {=& depsChunk =},
26
+ {=& devDepsChunk =}
27
+ }
@@ -0,0 +1,44 @@
1
+ {{={= =}=}}
2
+ import esbuild from 'rollup-plugin-esbuild'
3
+ import resolve from '@rollup/plugin-node-resolve';
4
+
5
+ export default [
6
+ createBundle('src/server.ts', 'bundle/server.js'),
7
+ {=# areDbSeedsDefined =}
8
+ createBundle('src/dbSeed.ts', 'bundle/dbSeed.js'),
9
+ {=/ areDbSeedsDefined =}
10
+ ]
11
+
12
+ function createBundle(inputFilePath, outputFilePath) {
13
+ return {
14
+ input: inputFilePath,
15
+ output: {
16
+ file: outputFilePath,
17
+ format: 'es',
18
+ sourcemap: true,
19
+ },
20
+ plugins: [
21
+ resolve(),
22
+ esbuild({
23
+ target: 'esnext',
24
+ }),
25
+ ],
26
+ // We don't want to bundle any of the node_module deps because we want to
27
+ // keep them as external dependencies.
28
+ external: /node_modules/,
29
+ // 'preserveSymlinks: false' tells Rollup to fully follow symlinks when
30
+ // resolving modules. This is the default option, but we're setting it
31
+ // explicitly because we rely on it.
32
+ //
33
+ // With this set to 'false', the 'wasp' package resolves to
34
+ // '.wasp/out/sdk/wasp' (not 'node_modules/wasp'), preventing Rollup from
35
+ // viewing it as an external dependency and ensuring it gets bundled.
36
+ //
37
+ // We need to bundle 'wasp' to support fully extensionless relative
38
+ // imports. See https://github.com/wasp-lang/wasp/issues/2492 for more
39
+ // details.
40
+ //
41
+ // Source: https://rollupjs.org/configuration-options/#preservesymlinks
42
+ preserveSymlinks: false,
43
+ }
44
+ }
@@ -0,0 +1,18 @@
1
+ {{={= =}=}}
2
+ import { prisma } from 'wasp/server'
3
+
4
+ {=& jsFn.importStatement =}
5
+
6
+ {=! TODO: This template is exactly the same at the moment as one for queries,
7
+ consider in the future if it is worth removing this duplication. =}
8
+
9
+ export default async function (args, context) {
10
+ return ({= jsFn.importIdentifier =} as any)(args, {
11
+ ...context,
12
+ entities: {
13
+ {=# entities =}
14
+ {= name =}: prisma.{= prismaIdentifier =},
15
+ {=/ entities =}
16
+ },
17
+ })
18
+ }
@@ -0,0 +1,36 @@
1
+ import express from 'express'
2
+
3
+ import { HttpError } from 'wasp/server'
4
+ import indexRouter from './routes/index.js'
5
+
6
+ // TODO: Consider extracting most of this logic into createApp(routes, path) function so that
7
+ // it can be used in unit tests to test each route individually.
8
+
9
+ const app = express()
10
+
11
+ // NOTE: Middleware are installed on a per-router or per-route basis.
12
+
13
+ app.use('/', indexRouter)
14
+
15
+ // Custom error handler.
16
+ app.use((err, _req, res, next) => {
17
+ // As by expressjs documentation, when the headers have already
18
+ // been sent to the client, we must delegate to the default error handler.
19
+ if (res.headersSent) { return next(err) }
20
+
21
+ if (err instanceof HttpError) {
22
+ return res.status(err.statusCode).json({ message: err.message, data: err.data })
23
+ }
24
+
25
+ // This forwards the error to the default express error handler.
26
+ // As described by expressjs documentation, the default error handler sets response status
27
+ // to err.status or err.statusCode if it is 4xx or 5xx, and if not, sets it to 500.
28
+ // It won't add any more info to it if server is running in production, which is exactly what we want,
29
+ // we want to share as little info as possible when error happens in production, for security reasons,
30
+ // so they will get only status code if set, or 500 if not, no extra info.
31
+ // In development it will also share the error stack though, which is useful.
32
+ // If the user wants to put more information about the error into the response, they should use HttpError.
33
+ return next(err)
34
+ })
35
+
36
+ export default app
@@ -0,0 +1,135 @@
1
+ {{={= =}=}}
2
+ import { prisma } from 'wasp/server'
3
+ import type {
4
+ OnAfterSignupHook,
5
+ OnAfterEmailVerifiedHook,
6
+ OnBeforeOAuthRedirectHook,
7
+ OnBeforeSignupHook,
8
+ OnBeforeLoginHook,
9
+ OnAfterLoginHook,
10
+ InternalAuthHookParams,
11
+ } from 'wasp/server/auth'
12
+ {=# onBeforeSignupHook.isDefined =}
13
+ {=& onBeforeSignupHook.importStatement =}
14
+ {=/ onBeforeSignupHook.isDefined =}
15
+ {=# onAfterSignupHook.isDefined =}
16
+ {=& onAfterSignupHook.importStatement =}
17
+ {=/ onAfterSignupHook.isDefined =}
18
+ {=# onAfterEmailVerifiedHook.isDefined =}
19
+ {=& onAfterEmailVerifiedHook.importStatement =}
20
+ {=/ onAfterEmailVerifiedHook.isDefined =}
21
+ {=# onBeforeOAuthRedirectHook.isDefined =}
22
+ {=& onBeforeOAuthRedirectHook.importStatement =}
23
+ {=/ onBeforeOAuthRedirectHook.isDefined =}
24
+ {=# onBeforeLoginHook.isDefined =}
25
+ {=& onBeforeLoginHook.importStatement =}
26
+ {=/ onBeforeLoginHook.isDefined =}
27
+ {=# onAfterLoginHook.isDefined =}
28
+ {=& onAfterLoginHook.importStatement =}
29
+ {=/ onAfterLoginHook.isDefined =}
30
+
31
+ /*
32
+ These are "internal hook functions" based on the user defined hook functions.
33
+
34
+ In the server code (e.g. email signup) we import these functions and call them.
35
+
36
+ We want to pass extra params to the user defined hook functions, but we don't want to
37
+ pass them when we call them in the server code.
38
+ */
39
+
40
+ {=# onBeforeSignupHook.isDefined =}
41
+ export const onBeforeSignupHook: InternalFunctionForHook<OnBeforeSignupHook> = (params) =>
42
+ {= onBeforeSignupHook.importIdentifier =}({
43
+ prisma,
44
+ ...params,
45
+ })
46
+ {=/ onBeforeSignupHook.isDefined =}
47
+ {=^ onBeforeSignupHook.isDefined =}
48
+ /**
49
+ * This is a no-op function since the user didn't define the onBeforeSignup hook.
50
+ */
51
+ export const onBeforeSignupHook: InternalFunctionForHook<OnBeforeSignupHook> = async (_params) => {}
52
+ {=/ onBeforeSignupHook.isDefined =}
53
+
54
+ {=# onAfterSignupHook.isDefined =}
55
+ export const onAfterSignupHook: InternalFunctionForHook<OnAfterSignupHook> = (params) =>
56
+ {= onAfterSignupHook.importIdentifier =}({
57
+ prisma,
58
+ ...params,
59
+ })
60
+ {=/ onAfterSignupHook.isDefined =}
61
+ {=^ onAfterSignupHook.isDefined =}
62
+ /**
63
+ * This is a no-op function since the user didn't define the onAfterSignup hook.
64
+ */
65
+ export const onAfterSignupHook: InternalFunctionForHook<OnAfterSignupHook> = async (_params) => {}
66
+ {=/ onAfterSignupHook.isDefined =}
67
+
68
+ {=# onAfterEmailVerifiedHook.isDefined =}
69
+ export const onAfterEmailVerifiedHook: InternalFunctionForHook<OnAfterEmailVerifiedHook> = (params) =>
70
+ {= onAfterEmailVerifiedHook.importIdentifier =}({
71
+ prisma,
72
+ ...params,
73
+ })
74
+ {=/ onAfterEmailVerifiedHook.isDefined =}
75
+ {=^ onAfterEmailVerifiedHook.isDefined =}
76
+ /**
77
+ * This is a no-op function since the user didn't define the onAfterSignup hook.
78
+ */
79
+ export const onAfterEmailVerifiedHook: InternalFunctionForHook<OnAfterEmailVerifiedHook> = async (_params) => {}
80
+ {=/ onAfterEmailVerifiedHook.isDefined =}
81
+
82
+ {=# onBeforeOAuthRedirectHook.isDefined =}
83
+ export const onBeforeOAuthRedirectHook: InternalFunctionForHook<OnBeforeOAuthRedirectHook> = (params) =>
84
+ {= onBeforeOAuthRedirectHook.importIdentifier =}({
85
+ prisma,
86
+ ...params,
87
+ })
88
+ {=/ onBeforeOAuthRedirectHook.isDefined =}
89
+ {=^ onBeforeOAuthRedirectHook.isDefined =}
90
+ /**
91
+ * This is an identity function since the user didn't define the onBeforeOAuthRedirect hook.
92
+ */
93
+ export const onBeforeOAuthRedirectHook: InternalFunctionForHook<OnBeforeOAuthRedirectHook> = async (params) => params
94
+ {=/ onBeforeOAuthRedirectHook.isDefined =}
95
+
96
+
97
+ {=# onBeforeLoginHook.isDefined =}
98
+ export const onBeforeLoginHook: InternalFunctionForHook<OnBeforeLoginHook> = (params) =>
99
+ {= onBeforeLoginHook.importIdentifier =}({
100
+ prisma,
101
+ ...params,
102
+ })
103
+ {=/ onBeforeLoginHook.isDefined =}
104
+ {=^ onBeforeLoginHook.isDefined =}
105
+ /**
106
+ * This is a no-op function since the user didn't define the onBeforeLogin hook.
107
+ */
108
+ export const onBeforeLoginHook: InternalFunctionForHook<OnBeforeLoginHook> = async (_params) => {}
109
+ {=/ onBeforeLoginHook.isDefined =}
110
+
111
+ {=# onAfterLoginHook.isDefined =}
112
+ export const onAfterLoginHook: InternalFunctionForHook<OnAfterLoginHook> = (params) =>
113
+ {= onAfterLoginHook.importIdentifier =}({
114
+ prisma,
115
+ ...params,
116
+ })
117
+ {=/ onAfterLoginHook.isDefined =}
118
+ {=^ onAfterLoginHook.isDefined =}
119
+ /**
120
+ * This is a no-op function since the user didn't define the onAfterLogin hook.
121
+ */
122
+ export const onAfterLoginHook: InternalFunctionForHook<OnAfterLoginHook> = async (_params) => {}
123
+ {=/ onAfterLoginHook.isDefined =}
124
+
125
+ /*
126
+ We pass extra params to the user defined hook functions, but we don't want to
127
+ pass the extra params (e.g. 'prisma') when we call the hooks in the server code.
128
+ So, we need to remove the extra params from the params object which is used to define the
129
+ internal hook functions.
130
+ */
131
+ type InternalFunctionForHook<Fn extends (args: never) => unknown | Promise<unknown>> = Fn extends (
132
+ params: infer P,
133
+ ) => infer R
134
+ ? (args: Omit<P, keyof InternalAuthHookParams>) => R
135
+ : never
@@ -0,0 +1,69 @@
1
+ {{={= =}=}}
2
+
3
+ import type { ProviderConfig } from "wasp/auth/providers/types";
4
+ import { discord } from "wasp/server/auth";
5
+ import { mergeDefaultAndUserConfig } from "../oauth/config.js";
6
+ import { createOAuthProviderRouter } from "../oauth/handler.js";
7
+
8
+ {=# userSignupFields.isDefined =}
9
+ {=& userSignupFields.importStatement =}
10
+ const _waspUserSignupFields = {= userSignupFields.importIdentifier =}
11
+ {=/ userSignupFields.isDefined =}
12
+ {=^ userSignupFields.isDefined =}
13
+ const _waspUserSignupFields = undefined
14
+ {=/ userSignupFields.isDefined =}
15
+ {=# configFn.isDefined =}
16
+ {=& configFn.importStatement =}
17
+ const _waspUserDefinedConfigFn = {= configFn.importIdentifier =}
18
+ {=/ configFn.isDefined =}
19
+ {=^ configFn.isDefined =}
20
+ const _waspUserDefinedConfigFn = undefined
21
+ {=/ configFn.isDefined =}
22
+
23
+ const _waspConfig: ProviderConfig = {
24
+ id: discord.id,
25
+ displayName: discord.displayName,
26
+ createRouter(provider) {
27
+ const config = mergeDefaultAndUserConfig({
28
+ scopes: {=& requiredScopes =},
29
+ }, _waspUserDefinedConfigFn);
30
+
31
+ async function getDiscordProfile(accessToken: string): Promise<{
32
+ providerProfile: unknown;
33
+ providerUserId: string;
34
+ }> {
35
+ const response = await fetch("https://discord.com/api/users/@me", {
36
+ headers: {
37
+ Authorization: `Bearer ${accessToken}`,
38
+ },
39
+ });
40
+ const providerProfile = (await response.json()) as {
41
+ id?: string;
42
+ email?: string;
43
+ global_name?: string;
44
+ avatar?: string;
45
+ };
46
+
47
+ if (!providerProfile.id) {
48
+ throw new Error("Invalid profile");
49
+ }
50
+
51
+ if (providerProfile.avatar) {
52
+ providerProfile.avatar = `https://cdn.discordapp.com/avatars/${providerProfile.id}/${providerProfile.avatar}.png`;
53
+ }
54
+
55
+ return { providerProfile, providerUserId: providerProfile.id };
56
+ }
57
+
58
+ return createOAuthProviderRouter({
59
+ provider,
60
+ oAuthType: 'OAuth2',
61
+ userSignupFields: _waspUserSignupFields,
62
+ getAuthorizationUrl: ({ state }) => discord.oAuthClient.createAuthorizationURL(state, config),
63
+ getProviderTokens: ({ code }) => discord.oAuthClient.validateAuthorizationCode(code),
64
+ getProviderInfo: ({ accessToken }) => getDiscordProfile(accessToken),
65
+ });
66
+ },
67
+ }
68
+
69
+ export default _waspConfig;
@@ -0,0 +1,96 @@
1
+ {{={= =}=}}
2
+ import { Router } from "express";
3
+
4
+ import { ProviderConfig } from "wasp/auth/providers/types";
5
+ import type { EmailFromField } from "wasp/server/email/core/types";
6
+
7
+ import { getLoginRoute } from "../email/login.js";
8
+ import { getSignupRoute } from "../email/signup.js";
9
+ import { getRequestPasswordResetRoute } from "../email/requestPasswordReset.js";
10
+ import { resetPassword } from "../email/resetPassword.js";
11
+ import { verifyEmail } from "../email/verifyEmail.js";
12
+ import { GetVerificationEmailContentFn, GetPasswordResetEmailContentFn } from "wasp/server/auth/email";
13
+ import { defineHandler } from "wasp/server/utils";
14
+ import { env } from "wasp/server";
15
+
16
+ {=# userSignupFields.isDefined =}
17
+ {=& userSignupFields.importStatement =}
18
+ const _waspUserSignupFields = {= userSignupFields.importIdentifier =}
19
+ {=/ userSignupFields.isDefined =}
20
+ {=^ userSignupFields.isDefined =}
21
+ const _waspUserSignupFields = undefined
22
+ {=/ userSignupFields.isDefined =}
23
+
24
+ {=# getVerificationEmailContent.isDefined =}
25
+ {=& getVerificationEmailContent.importStatement =}
26
+ const _waspGetVerificationEmailContent: GetVerificationEmailContentFn = {= getVerificationEmailContent.importIdentifier =};
27
+ {=/ getVerificationEmailContent.isDefined =}
28
+ {=# getPasswordResetEmailContent.isDefined =}
29
+ {=& getPasswordResetEmailContent.importStatement =}
30
+ const _waspGetPasswordResetEmailContent: GetPasswordResetEmailContentFn = {= getPasswordResetEmailContent.importIdentifier =};
31
+ {=/ getPasswordResetEmailContent.isDefined =}
32
+
33
+ {=^ getVerificationEmailContent.isDefined =}
34
+ const _waspGetVerificationEmailContent: GetVerificationEmailContentFn = ({ verificationLink }) => ({
35
+ subject: 'Verify your email',
36
+ text: `Click the link below to verify your email: ${verificationLink}`,
37
+ html: `
38
+ <p>Click the link below to verify your email</p>
39
+ <a href="${verificationLink}">Verify email</a>
40
+ `,
41
+ });
42
+ {=/ getVerificationEmailContent.isDefined =}
43
+ {=^ getPasswordResetEmailContent.isDefined =}
44
+ const _waspGetPasswordResetEmailContent: GetPasswordResetEmailContentFn = ({ passwordResetLink }) => ({
45
+ subject: 'Reset your password',
46
+ text: `Click the link below to reset your password: ${passwordResetLink}`,
47
+ html: `
48
+ <p>Click the link below to reset your password</p>
49
+ <a href="${passwordResetLink}">Reset password</a>
50
+ `,
51
+ });
52
+ {=/ getPasswordResetEmailContent.isDefined =}
53
+
54
+ const fromField: EmailFromField = {
55
+ name: '{= fromField.name =}',
56
+ email: '{= fromField.email =}',
57
+ };
58
+
59
+ const config: ProviderConfig = {
60
+ id: "{= providerId =}",
61
+ displayName: "{= displayName =}",
62
+ createRouter() {
63
+ const router = Router();
64
+
65
+ const loginRoute = defineHandler(getLoginRoute());
66
+ router.post('/login', loginRoute);
67
+
68
+ const signupRoute = defineHandler(getSignupRoute({
69
+ userSignupFields: _waspUserSignupFields,
70
+ fromField,
71
+ clientRoute: '{= emailVerificationClientRoute =}',
72
+ getVerificationEmailContent: _waspGetVerificationEmailContent,
73
+ {=# isDevelopment =}
74
+ isEmailAutoVerified: env.SKIP_EMAIL_VERIFICATION_IN_DEV,
75
+ {=/ isDevelopment =}
76
+ {=^ isDevelopment =}
77
+ isEmailAutoVerified: false,
78
+ {=/ isDevelopment =}
79
+ }));
80
+ router.post('/signup', signupRoute);
81
+
82
+ const requestPasswordResetRoute = defineHandler(getRequestPasswordResetRoute({
83
+ fromField,
84
+ clientRoute: '{= passwordResetClientRoute =}',
85
+ getPasswordResetEmailContent: _waspGetPasswordResetEmailContent,
86
+ }));
87
+ router.post('/request-password-reset', requestPasswordResetRoute);
88
+
89
+ router.post('/reset-password', defineHandler(resetPassword));
90
+ router.post('/verify-email', defineHandler(verifyEmail));
91
+
92
+ return router;
93
+ },
94
+ }
95
+
96
+ export default config;
@@ -0,0 +1,78 @@
1
+ {{={= =}=}}
2
+
3
+ import type { ProviderConfig } from "wasp/auth/providers/types";
4
+ import { github } from "wasp/server/auth";
5
+ import { mergeDefaultAndUserConfig } from "../oauth/config.js";
6
+ import { createOAuthProviderRouter } from "../oauth/handler.js";
7
+
8
+ {=# userSignupFields.isDefined =}
9
+ {=& userSignupFields.importStatement =}
10
+ const _waspUserSignupFields = {= userSignupFields.importIdentifier =}
11
+ {=/ userSignupFields.isDefined =}
12
+ {=^ userSignupFields.isDefined =}
13
+ const _waspUserSignupFields = undefined
14
+ {=/ userSignupFields.isDefined =}
15
+ {=# configFn.isDefined =}
16
+ {=& configFn.importStatement =}
17
+ const _waspUserDefinedConfigFn = {= configFn.importIdentifier =}
18
+ {=/ configFn.isDefined =}
19
+ {=^ configFn.isDefined =}
20
+ const _waspUserDefinedConfigFn = undefined
21
+ {=/ configFn.isDefined =}
22
+
23
+ const _waspConfig: ProviderConfig = {
24
+ id: github.id,
25
+ displayName: github.displayName,
26
+ createRouter(provider) {
27
+ const config = mergeDefaultAndUserConfig({
28
+ scopes: {=& requiredScopes =},
29
+ }, _waspUserDefinedConfigFn);
30
+
31
+ async function getGithubProfile(accessToken: string): Promise<{
32
+ providerProfile: unknown;
33
+ providerUserId: string;
34
+ }> {
35
+ const response = await fetch("https://api.github.com/user", {
36
+ headers: {
37
+ Authorization: `Bearer ${accessToken}`,
38
+ },
39
+ });
40
+ const providerProfile = (await response.json()) as {
41
+ id?: string;
42
+ emails?: unknown[];
43
+ };
44
+
45
+ if (!providerProfile.id) {
46
+ throw new Error("Invalid profile");
47
+ }
48
+
49
+ const scopes = config.scopes as string[];
50
+ // Using the logic from https://github.com/cfsghost/passport-github/blob/master/lib/strategy.js#L118C24-L120C10
51
+ const isEmailAccessAllowed = scopes.some((scope) => {
52
+ return scope === 'user' || scope === 'user:email';
53
+ });
54
+ if (isEmailAccessAllowed) {
55
+ const emailsResponse = await fetch("https://api.github.com/user/emails", {
56
+ headers: {
57
+ Authorization: `Bearer ${accessToken}`,
58
+ },
59
+ });
60
+ const emails = (await emailsResponse.json()) as unknown[];
61
+ providerProfile.emails = emails;
62
+ }
63
+
64
+ return { providerProfile, providerUserId: `${providerProfile.id}` };
65
+ }
66
+
67
+ return createOAuthProviderRouter({
68
+ provider,
69
+ oAuthType: 'OAuth2',
70
+ userSignupFields: _waspUserSignupFields,
71
+ getAuthorizationUrl: ({ state }) => github.oAuthClient.createAuthorizationURL(state, config),
72
+ getProviderTokens: ({ code }) => github.oAuthClient.validateAuthorizationCode(code),
73
+ getProviderInfo: ({ accessToken }) => getGithubProfile(accessToken),
74
+ });
75
+ },
76
+ }
77
+
78
+ export default _waspConfig;
@@ -0,0 +1,65 @@
1
+ {{={= =}=}}
2
+ import type { ProviderConfig } from "wasp/auth/providers/types";
3
+ import { google } from "wasp/server/auth";
4
+
5
+ import { mergeDefaultAndUserConfig } from "../oauth/config.js";
6
+ import { createOAuthProviderRouter } from "../oauth/handler.js";
7
+
8
+ {=# userSignupFields.isDefined =}
9
+ {=& userSignupFields.importStatement =}
10
+ const _waspUserSignupFields = {= userSignupFields.importIdentifier =}
11
+ {=/ userSignupFields.isDefined =}
12
+ {=^ userSignupFields.isDefined =}
13
+ const _waspUserSignupFields = undefined
14
+ {=/ userSignupFields.isDefined =}
15
+ {=# configFn.isDefined =}
16
+ {=& configFn.importStatement =}
17
+ const _waspUserDefinedConfigFn = {= configFn.importIdentifier =}
18
+ {=/ configFn.isDefined =}
19
+ {=^ configFn.isDefined =}
20
+ const _waspUserDefinedConfigFn = undefined
21
+ {=/ configFn.isDefined =}
22
+
23
+ const _waspConfig: ProviderConfig = {
24
+ id: google.id,
25
+ displayName: google.displayName,
26
+ createRouter(provider) {
27
+ const config = mergeDefaultAndUserConfig({
28
+ scopes: {=& requiredScopes =},
29
+ }, _waspUserDefinedConfigFn);
30
+
31
+ async function getGoogleProfile(accessToken: string): Promise<{
32
+ providerProfile: unknown;
33
+ providerUserId: string;
34
+ }> {
35
+ const response = await fetch(
36
+ "https://openidconnect.googleapis.com/v1/userinfo",
37
+ {
38
+ headers: {
39
+ Authorization: `Bearer ${accessToken}`,
40
+ },
41
+ }
42
+ );
43
+ const providerProfile = (await response.json()) as {
44
+ sub?: string;
45
+ };
46
+
47
+ if (!providerProfile.sub) {
48
+ throw new Error("Invalid profile");
49
+ }
50
+
51
+ return { providerProfile, providerUserId: providerProfile.sub };
52
+ }
53
+
54
+ return createOAuthProviderRouter({
55
+ provider,
56
+ oAuthType: 'OAuth2WithPKCE',
57
+ userSignupFields: _waspUserSignupFields,
58
+ getAuthorizationUrl: ({ state, codeVerifier }) => google.oAuthClient.createAuthorizationURL(state, codeVerifier, config),
59
+ getProviderTokens: ({ code, codeVerifier }) => google.oAuthClient.validateAuthorizationCode(code, codeVerifier),
60
+ getProviderInfo: ({ accessToken }) => getGoogleProfile(accessToken),
61
+ });
62
+ },
63
+ }
64
+
65
+ export default _waspConfig;