@wasp.sh/wasp-cli-darwin-x64-unknown 0.25.0 → 0.26.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 (255) hide show
  1. package/data/Cli/starters/README.md +2 -0
  2. package/data/Cli/starters/basic/README.md +3 -3
  3. package/data/Cli/starters/basic/src/tags/components/CreateTagForm.tsx +2 -3
  4. package/data/Cli/starters/basic/vite.config.ts +0 -3
  5. package/data/Cli/starters/minimal/package.json +4 -1
  6. package/data/Cli/starters/minimal/vite.config.ts +0 -3
  7. package/data/Cli/starters/skeleton/AGENTS.md +6 -0
  8. package/data/Cli/starters/skeleton/CLAUDE.md +6 -0
  9. package/data/Cli/starters/skeleton/tsconfig.src.json +1 -11
  10. package/data/Generator/libs/auth/wasp.sh-lib-auth-0.26.0.tgz +0 -0
  11. package/data/Generator/libs/sdk-core/node_modules/@wasp.sh/lib-auth/wasp.sh-lib-auth-0.26.0.tgz +0 -0
  12. package/data/Generator/libs/sdk-core/wasp.sh-lib-sdk-core-0.26.0.tgz +0 -0
  13. package/data/Generator/libs/vite-ssr/{wasp.sh-lib-vite-ssr-0.25.0.tgz → wasp.sh-lib-vite-ssr-0.26.0.tgz} +0 -0
  14. package/data/Generator/templates/Dockerfile +1 -0
  15. package/data/Generator/templates/sdk/wasp/api/index.ts +5 -86
  16. package/data/Generator/templates/sdk/wasp/auth/email/actions/login.ts +2 -2
  17. package/data/Generator/templates/sdk/wasp/auth/email/actions/passwordReset.ts +1 -1
  18. package/data/Generator/templates/sdk/wasp/auth/email/actions/signup.ts +7 -6
  19. package/data/Generator/templates/sdk/wasp/auth/email/actions/verifyEmail.ts +1 -1
  20. package/data/Generator/templates/sdk/wasp/auth/forms/Auth.tsx +12 -6
  21. package/data/Generator/templates/sdk/wasp/auth/forms/ForgotPassword.tsx +2 -1
  22. package/data/Generator/templates/sdk/wasp/auth/forms/Login.tsx +2 -1
  23. package/data/Generator/templates/sdk/wasp/auth/forms/ResetPassword.tsx +2 -1
  24. package/data/Generator/templates/sdk/wasp/auth/forms/Signup.tsx +5 -5
  25. package/data/Generator/templates/sdk/wasp/auth/forms/VerifyEmail.tsx +2 -1
  26. package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx +34 -33
  27. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/DummyEmailSenderNotice.module.css +11 -0
  28. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/DummyEmailSenderNotice.tsx +17 -0
  29. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/ForgotPasswordForm.tsx +9 -13
  30. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/ResetPasswordForm.tsx +8 -9
  31. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/VerifyEmailForm.tsx +4 -8
  32. package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/useEmail.ts +5 -5
  33. package/data/Generator/templates/sdk/wasp/auth/forms/internal/usernameAndPassword/useUsernameAndPassword.ts +6 -5
  34. package/data/Generator/templates/sdk/wasp/auth/forms/types.ts +0 -59
  35. package/data/Generator/templates/sdk/wasp/auth/helpers/_Provider.tsx +2 -2
  36. package/data/Generator/templates/sdk/wasp/auth/index.ts +1 -1
  37. package/data/Generator/templates/sdk/wasp/auth/logout.ts +1 -1
  38. package/data/Generator/templates/sdk/wasp/auth/providers/index.ts +4 -4
  39. package/data/Generator/templates/sdk/wasp/auth/providers/types.ts +20 -24
  40. package/data/Generator/templates/sdk/wasp/auth/useAuth.ts +5 -5
  41. package/data/Generator/templates/sdk/wasp/auth/user.ts +147 -14
  42. package/data/Generator/templates/sdk/wasp/auth/username/actions/login.ts +2 -2
  43. package/data/Generator/templates/sdk/wasp/auth/username/actions/signup.ts +6 -5
  44. package/data/Generator/templates/sdk/wasp/auth/validation.ts +1 -83
  45. package/data/Generator/templates/sdk/wasp/client/app/pages/OAuthCallback.tsx +8 -5
  46. package/data/Generator/templates/sdk/wasp/client/app/pages/createAuthRequiredPage.jsx +6 -4
  47. package/data/Generator/templates/sdk/wasp/client/app/router.tsx +2 -2
  48. package/data/Generator/templates/sdk/wasp/client/auth/ui.ts +2 -2
  49. package/data/Generator/templates/sdk/wasp/client/auth/username.ts +2 -2
  50. package/data/Generator/templates/sdk/wasp/client/config.ts +1 -6
  51. package/data/Generator/templates/sdk/wasp/client/crud/_crud.ts +129 -75
  52. package/data/Generator/templates/sdk/wasp/client/env/schema.ts +14 -7
  53. package/data/Generator/templates/sdk/wasp/client/env.ts +4 -3
  54. package/data/Generator/templates/sdk/wasp/client/index.ts +3 -12
  55. package/data/Generator/templates/sdk/wasp/client/operations/actions/core.ts +14 -10
  56. package/data/Generator/templates/sdk/wasp/client/operations/actions/index.ts +7 -4
  57. package/data/Generator/templates/sdk/wasp/client/operations/index.ts +5 -5
  58. package/data/Generator/templates/sdk/wasp/client/operations/internal/index.ts +1 -8
  59. package/data/Generator/templates/sdk/wasp/client/operations/queries/core.ts +13 -55
  60. package/data/Generator/templates/sdk/wasp/client/operations/queries/index.ts +7 -7
  61. package/data/Generator/templates/sdk/wasp/client/router/Link.tsx +8 -8
  62. package/data/Generator/templates/sdk/wasp/client/router/NavLink.tsx +8 -8
  63. package/data/Generator/templates/sdk/wasp/client/router/index.ts +15 -15
  64. package/data/Generator/templates/sdk/wasp/client/test/index.ts +2 -1
  65. package/data/Generator/templates/sdk/wasp/client/test/vitest/helpers.tsx +5 -36
  66. package/data/Generator/templates/sdk/wasp/client/vite/index.ts +2 -1
  67. package/data/Generator/templates/sdk/wasp/client/vite/plugins/virtualUserModules.ts +43 -0
  68. package/data/Generator/templates/sdk/wasp/client/vite/plugins/{virtualModules.ts → virtualWaspModules.ts} +4 -4
  69. package/data/Generator/templates/sdk/wasp/client/vite/plugins/wasp.ts +17 -14
  70. package/data/Generator/templates/sdk/wasp/client/vite/plugins/waspConfig.ts +60 -18
  71. package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/files/client-entry.tsx +1 -1
  72. package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/files/routes.tsx +1 -1
  73. package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/files/ssr-entry.tsx +1 -1
  74. package/data/Generator/templates/sdk/wasp/client/webSocket/WebSocketProvider.tsx +3 -3
  75. package/data/Generator/templates/sdk/wasp/client/webSocket/index.ts +1 -1
  76. package/data/Generator/templates/sdk/wasp/core/serialization/index.ts +2 -47
  77. package/data/Generator/templates/sdk/wasp/core/serialization/prisma.ts +0 -1
  78. package/data/Generator/templates/sdk/wasp/entities/index.ts +6 -6
  79. package/data/Generator/templates/sdk/wasp/env/index.ts +1 -9
  80. package/data/Generator/templates/sdk/wasp/package.json +150 -104
  81. package/data/Generator/templates/sdk/wasp/server/_types/index.ts +8 -10
  82. package/data/Generator/templates/sdk/wasp/server/_types/taggedEntities.ts +4 -4
  83. package/data/Generator/templates/sdk/wasp/server/api/index.ts +5 -5
  84. package/data/Generator/templates/sdk/wasp/server/auth/email/index.ts +2 -12
  85. package/data/Generator/templates/sdk/wasp/server/auth/email/utils.ts +8 -30
  86. package/data/Generator/templates/sdk/wasp/server/auth/hooks.ts +5 -2
  87. package/data/Generator/templates/sdk/wasp/server/auth/index.ts +3 -3
  88. package/data/Generator/templates/sdk/wasp/{auth → server/auth}/jwt.ts +1 -1
  89. package/data/Generator/templates/sdk/wasp/{auth → server/auth}/lucia.ts +4 -4
  90. package/data/Generator/templates/sdk/wasp/server/auth/oauth/oneTimeCode.ts +1 -1
  91. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/discord.ts +1 -1
  92. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/github.ts +1 -1
  93. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/google.ts +1 -1
  94. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/keycloak.ts +1 -1
  95. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/microsoft.ts +1 -1
  96. package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/slack.ts +1 -1
  97. package/data/Generator/templates/sdk/wasp/{auth → server/auth}/session.ts +17 -6
  98. package/data/Generator/templates/sdk/wasp/{auth → server/auth}/utils.ts +40 -183
  99. package/data/Generator/templates/sdk/wasp/server/config.ts +1 -1
  100. package/data/Generator/templates/sdk/wasp/{core → server/core}/auth.ts +3 -3
  101. package/data/Generator/templates/sdk/wasp/server/crud/_operationTypes.ts +16 -63
  102. package/data/Generator/templates/sdk/wasp/server/dbClient.ts +15 -17
  103. package/data/Generator/templates/sdk/wasp/server/email/core/helpers.ts +3 -20
  104. package/data/Generator/templates/sdk/wasp/server/email/core/providers/dummy.ts +2 -2
  105. package/data/Generator/templates/sdk/wasp/server/email/core/providers/resend.ts +2 -1
  106. package/data/Generator/templates/sdk/wasp/server/email/core/providers/smtp.ts +2 -1
  107. package/data/Generator/templates/sdk/wasp/server/email/core/types.ts +2 -45
  108. package/data/Generator/templates/sdk/wasp/server/email/index.ts +1 -1
  109. package/data/Generator/templates/sdk/wasp/server/env.ts +20 -11
  110. package/data/Generator/templates/sdk/wasp/server/index.ts +3 -3
  111. package/data/Generator/templates/sdk/wasp/server/jobs/_job.ts +1 -1
  112. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/index.ts +1 -1
  113. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/pgBossJob.ts +4 -4
  114. package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/types.ts +1 -1
  115. package/data/Generator/templates/sdk/wasp/server/middleware/index.ts +1 -1
  116. package/data/Generator/templates/sdk/wasp/server/operations/actions/index.ts +14 -8
  117. package/data/Generator/templates/sdk/wasp/server/operations/actions/types.ts +5 -5
  118. package/data/Generator/templates/sdk/wasp/server/operations/queries/index.ts +14 -8
  119. package/data/Generator/templates/sdk/wasp/server/operations/queries/types.ts +5 -5
  120. package/data/Generator/templates/sdk/wasp/server/operations/wrappers.ts +40 -14
  121. package/data/Generator/templates/sdk/wasp/server/types/index.ts +1 -11
  122. package/data/Generator/templates/sdk/wasp/server/utils.ts +5 -20
  123. package/data/Generator/templates/sdk/wasp/server/webSocket/index.ts +7 -7
  124. package/data/Generator/templates/sdk/wasp/tsconfig.json +20 -46
  125. package/data/Generator/templates/sdk/wasp/types/index.ts +8 -0
  126. package/data/Generator/templates/sdk/wasp/types/register.ts +21 -0
  127. package/data/Generator/templates/sdk/wasp/vite-env.d.ts +0 -9
  128. package/data/Generator/templates/sdk/wasp/wasp-ssr.d.ts +8 -0
  129. package/data/Generator/templates/sdk/wasp/wasp-user-virtual-modules.d.ts +20 -0
  130. package/data/Generator/templates/server/package.json +2 -1
  131. package/data/Generator/templates/server/rollup.config.js +2 -43
  132. package/data/Generator/templates/server/rollup.dbSeed.config.js +3 -0
  133. package/data/Generator/templates/server/src/app.js +2 -2
  134. package/data/Generator/templates/server/src/auth/providers/config/email.ts +5 -5
  135. package/data/Generator/templates/server/src/auth/providers/email/login.ts +4 -4
  136. package/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts +4 -4
  137. package/data/Generator/templates/server/src/auth/providers/email/resetPassword.ts +13 -5
  138. package/data/Generator/templates/server/src/auth/providers/email/signup.ts +29 -18
  139. package/data/Generator/templates/server/src/auth/providers/email/verifyEmail.ts +7 -2
  140. package/data/Generator/templates/server/src/auth/providers/oauth/cookies.ts +5 -1
  141. package/data/Generator/templates/server/src/auth/providers/oauth/handler.ts +1 -1
  142. package/data/Generator/templates/server/src/auth/providers/oauth/oneTimeCode.ts +2 -2
  143. package/data/Generator/templates/server/src/auth/providers/oauth/state.ts +55 -13
  144. package/data/Generator/templates/server/src/auth/providers/oauth/user.ts +6 -3
  145. package/data/Generator/templates/server/src/auth/providers/username/login.ts +4 -4
  146. package/data/Generator/templates/server/src/auth/providers/username/signup.ts +12 -4
  147. package/data/Generator/templates/server/src/createRollupBundle.js +47 -0
  148. package/data/Generator/templates/server/src/crud/_operations.ts +16 -16
  149. package/data/Generator/templates/server/src/plugins/virtualUserModules.js +40 -0
  150. package/data/Generator/templates/server/src/routes/apis/index.ts +3 -3
  151. package/data/Generator/templates/server/src/routes/auth/index.js +1 -1
  152. package/data/Generator/templates/server/src/routes/auth/logout.ts +2 -2
  153. package/data/Generator/templates/server/src/routes/crud/_crud.ts +1 -1
  154. package/data/Generator/templates/server/src/routes/index.js +18 -18
  155. package/data/Generator/templates/server/src/routes/operations/index.js +1 -1
  156. package/data/Generator/templates/server/src/webSocket/initialization.ts +1 -1
  157. package/data/Generator/templates/server/tsconfig.json +7 -13
  158. package/data/Generator/templates/types/app/sdk/register.ts +57 -0
  159. package/data/packages/deploy/dist/common/cliVersion.js +17 -0
  160. package/data/packages/deploy/dist/common/waspProject.js +1 -1
  161. package/data/packages/deploy/dist/common/zx.js +24 -6
  162. package/data/packages/deploy/dist/providers/fly/commands/createDb/createDb.js +13 -5
  163. package/data/packages/deploy/dist/providers/fly/flyCli.js +29 -17
  164. package/data/packages/deploy/dist/providers/fly/index.js +16 -8
  165. package/data/packages/deploy/dist/providers/railway/commands/setup/setup.js +19 -31
  166. package/data/packages/deploy/dist/providers/railway/index.js +11 -2
  167. package/data/packages/deploy/dist/providers/railway/jsonOutputSchemas.js +19 -34
  168. package/data/packages/deploy/dist/providers/railway/railwayCli.js +11 -20
  169. package/data/packages/deploy/dist/providers/railway/railwayEnvironment/cli.js +20 -0
  170. package/data/packages/deploy/dist/providers/railway/railwayProject/RailwayProject.js +4 -1
  171. package/data/packages/deploy/dist/providers/railway/railwayProject/cli.js +6 -14
  172. package/data/packages/deploy/dist/providers/railway/railwayService/database.js +88 -0
  173. package/data/packages/deploy/dist/providers/railway/railwayService/deployment.js +12 -25
  174. package/data/packages/deploy/dist/providers/railway/railwayService/nameGenerator.js +5 -4
  175. package/data/packages/deploy/dist/providers/railway/railwayService/serviceInstance.js +48 -0
  176. package/data/packages/deploy/dist/providers/railway/railwayService/url.js +9 -30
  177. package/data/packages/deploy/package-lock.json +2 -2
  178. package/data/packages/deploy/package.json +1 -1
  179. package/data/packages/prisma/package-lock.json +2 -2
  180. package/data/packages/prisma/package.json +1 -1
  181. package/data/packages/spec/dist/__tests__/spec/mapApp.unit.test.js +19 -15
  182. package/data/packages/spec/dist/__tests__/spec/tsAppSpec.test-d.js +6 -0
  183. package/data/packages/spec/dist/src/appSpec.d.ts +15 -2
  184. package/data/packages/spec/dist/src/appSpec.d.ts.map +1 -1
  185. package/data/packages/spec/dist/src/spec/mapper/app.d.ts +1 -0
  186. package/data/packages/spec/dist/src/spec/mapper/app.d.ts.map +1 -1
  187. package/data/packages/spec/dist/src/spec/mapper/app.js +8 -2
  188. package/data/packages/spec/dist/src/spec/mapper/context.js +4 -4
  189. package/data/packages/spec/dist/src/spec/mapper/specElements.js +9 -9
  190. package/data/packages/spec/dist/src/spec/publicApi/constructors.d.ts +11 -11
  191. package/data/packages/spec/dist/src/spec/publicApi/constructors.js +11 -11
  192. package/data/packages/spec/dist/src/spec/publicApi/register.d.ts +1 -1
  193. package/data/packages/spec/dist/src/spec/publicApi/waspSpec.d.ts +58 -38
  194. package/data/packages/spec/dist/src/spec/publicApi/waspSpec.d.ts.map +1 -1
  195. package/data/packages/spec/package-lock.json +2 -2
  196. package/data/packages/spec/package.json +1 -1
  197. package/data/packages/studio/package-lock.json +15 -23
  198. package/data/packages/studio/package.json +2 -2
  199. package/package.json +1 -1
  200. package/wasp-bin +0 -0
  201. package/data/Generator/libs/auth/wasp.sh-lib-auth-0.25.0.tgz +0 -0
  202. package/data/Generator/templates/sdk/wasp/api/events.ts +0 -11
  203. package/data/Generator/templates/sdk/wasp/auth/email/index.ts +0 -5
  204. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.module.css +0 -99
  205. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.tsx +0 -74
  206. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.module.css +0 -22
  207. package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.tsx +0 -34
  208. package/data/Generator/templates/sdk/wasp/auth/forms/internal/auth-styles.css +0 -30
  209. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.module.css +0 -33
  210. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.tsx +0 -14
  211. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.module.css +0 -4
  212. package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.tsx +0 -85
  213. package/data/Generator/templates/sdk/wasp/auth/forms/internal/util.ts +0 -16
  214. package/data/Generator/templates/sdk/wasp/auth/helpers/user.ts +0 -15
  215. package/data/Generator/templates/sdk/wasp/auth/responseSchemas.ts +0 -10
  216. package/data/Generator/templates/sdk/wasp/auth/types.ts +0 -2
  217. package/data/Generator/templates/sdk/wasp/auth/username/index.ts +0 -2
  218. package/data/Generator/templates/sdk/wasp/client/app/components/DefaultRootErrorBoundary.tsx +0 -16
  219. package/data/Generator/templates/sdk/wasp/client/app/components/FullPageWrapper.tsx +0 -21
  220. package/data/Generator/templates/sdk/wasp/client/app/components/Loader.module.css +0 -37
  221. package/data/Generator/templates/sdk/wasp/client/app/components/Loader.tsx +0 -12
  222. package/data/Generator/templates/sdk/wasp/client/app/components/Message.tsx +0 -86
  223. package/data/Generator/templates/sdk/wasp/client/crud/operationsHelpers.ts +0 -21
  224. package/data/Generator/templates/sdk/wasp/client/hooks.ts +0 -19
  225. package/data/Generator/templates/sdk/wasp/client/operations/hooks.ts +0 -347
  226. package/data/Generator/templates/sdk/wasp/client/operations/internal/resources.js +0 -85
  227. package/data/Generator/templates/sdk/wasp/client/operations/internal/updateHandlersMap.js +0 -37
  228. package/data/Generator/templates/sdk/wasp/client/operations/queryClient.ts +0 -34
  229. package/data/Generator/templates/sdk/wasp/client/operations/rpc.ts +0 -96
  230. package/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts +0 -48
  231. package/data/Generator/templates/sdk/wasp/client/router/types.ts +0 -98
  232. package/data/Generator/templates/sdk/wasp/client/vite/plugins/detectServerImports.ts +0 -50
  233. package/data/Generator/templates/sdk/wasp/client/vite/plugins/envFile.ts +0 -112
  234. package/data/Generator/templates/sdk/wasp/client/vite/plugins/typescriptCheck.ts +0 -36
  235. package/data/Generator/templates/sdk/wasp/client/vite/plugins/validateEnv.ts +0 -88
  236. package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/resolver.ts +0 -35
  237. package/data/Generator/templates/sdk/wasp/core/serialization/custom-register.ts +0 -21
  238. package/data/Generator/templates/sdk/wasp/core/storage.ts +0 -73
  239. package/data/Generator/templates/sdk/wasp/env/validation.ts +0 -44
  240. package/data/Generator/templates/sdk/wasp/server/HttpError.ts +0 -30
  241. package/data/Generator/templates/sdk/wasp/server/auth/oauth/provider.ts +0 -20
  242. package/data/Generator/templates/sdk/wasp/server/auth/user.ts +0 -154
  243. package/data/Generator/templates/sdk/wasp/server/auth/username.ts +0 -1
  244. package/data/Generator/templates/sdk/wasp/server/jobs/core/job.ts +0 -28
  245. package/data/Generator/templates/sdk/wasp/server/middleware/globalMiddleware.ts +0 -8
  246. package/data/Generator/templates/sdk/wasp/universal/ansiColors.ts +0 -58
  247. package/data/Generator/templates/sdk/wasp/universal/predicates.ts +0 -3
  248. package/data/Generator/templates/sdk/wasp/universal/types.ts +0 -74
  249. package/data/Generator/templates/sdk/wasp/universal/url.ts +0 -9
  250. package/data/Generator/templates/sdk/wasp/universal/validators.ts +0 -21
  251. package/data/packages/ts-inspect/dist/exports.js +0 -82
  252. package/data/packages/ts-inspect/dist/index.js +0 -28
  253. package/data/packages/ts-inspect/package-lock.json +0 -4724
  254. package/data/packages/ts-inspect/package.json +0 -31
  255. /package/data/Generator/templates/sdk/wasp/{auth → server/auth}/password.ts +0 -0
@@ -1,55 +1,38 @@
1
1
  {{={= =}=}}
2
- import { hashPassword } from './password.js'
3
- import { prisma, HttpError } from '../server/index.js'
4
- import { sleep } from '../server/utils.js'
5
2
  import {
6
- type {= userEntityUpper =},
7
- type {= authEntityUpper =},
8
- type {= authIdentityEntityUpper =},
9
- } from '../entities/index.js'
3
+ getErrorMessage,
4
+ throwValidationError,
5
+ type ProviderId,
6
+ type ProviderName,
7
+ type PossibleProviderData,
8
+ } from '@wasp.sh/lib-sdk-core'
9
+ export { doFakeWork, createInvalidCredentialsError, sanitizeAndSerializeProviderData } from '@wasp.sh/lib-sdk-core/node'
10
+
11
+ import { ensurePasswordIsHashed } from '@wasp.sh/lib-sdk-core/node'
12
+ import { prisma, HttpError } from '../index.js'
13
+ import type {
14
+ {= userEntityUpper =},
15
+ {= authEntityUpper =},
16
+ {= authIdentityEntityUpper =},
17
+ } from '../../entities/index.js'
10
18
  import { Prisma } from '@prisma/client';
11
19
 
12
- import { throwValidationError } from './validation.js'
13
-
14
- import { type UserSignupFields, type PossibleUserFields } from './providers/types.js'
15
-
16
- // PUBLIC API
17
- export type EmailProviderData = {
18
- hashedPassword: string;
19
- isEmailVerified: boolean;
20
- emailVerificationSentAt: string | null;
21
- passwordResetSentAt: string | null;
22
- }
23
-
24
- // PUBLIC API
25
- export type UsernameProviderData = {
26
- hashedPassword: string;
27
- }
28
-
29
- // PUBLIC API
30
- export type OAuthProviderData = {}
31
-
32
- // PRIVATE API
33
- /**
34
- * This type is used for type-level programming e.g. to enumerate
35
- * all possible provider data types.
36
- *
37
- * The keys of this type are the names of the providers and the values
38
- * are the types of the provider data.
39
- */
40
- export type PossibleProviderData = {
41
- email: EmailProviderData;
42
- username: UsernameProviderData;
43
- discord: OAuthProviderData;
44
- slack: OAuthProviderData;
45
- google: OAuthProviderData;
46
- keycloak: OAuthProviderData;
47
- github: OAuthProviderData;
48
- microsoft: OAuthProviderData;
49
- }
50
-
51
- // PUBLIC API
52
- export type ProviderName = keyof PossibleProviderData
20
+ import type { UserSignupFields, PossibleUserFields } from '../../auth/providers/types.js'
21
+
22
+ // Runtime-agnostic provider data code, re-exported here because it's part of
23
+ // the server-side auth API surface (e.g. through `wasp/server/auth`).
24
+ export {
25
+ createProviderId,
26
+ normalizeProviderUserId,
27
+ getProviderData,
28
+ getProviderDataWithPassword,
29
+ type ProviderId,
30
+ type ProviderName,
31
+ type PossibleProviderData,
32
+ type EmailProviderData,
33
+ type UsernameProviderData,
34
+ type OAuthProviderData,
35
+ } from '@wasp.sh/lib-sdk-core'
53
36
 
54
37
  // PRIVATE API
55
38
  export const contextWithUserEntity = {
@@ -60,61 +43,8 @@ export const contextWithUserEntity = {
60
43
 
61
44
  // PRIVATE API
62
45
  export const authConfig = {
63
- failureRedirectPath: "{= failureRedirectPath =}",
64
- successRedirectPath: "{= successRedirectPath =}",
65
- }
66
-
67
- // PUBLIC API
68
- /**
69
- * ProviderId uniquely identifies an auth identity e.g.
70
- * "email" provider with user id "test@test.com" or
71
- * "google" provider with user id "1234567890".
72
- *
73
- * We use this type to avoid passing the providerName and providerUserId
74
- * separately. Also, we can normalize the providerUserId to make sure it's
75
- * consistent across different DB operations.
76
- */
77
- export type ProviderId = {
78
- providerName: ProviderName;
79
- providerUserId: string;
80
- }
81
-
82
- // PUBLIC API
83
- export function createProviderId(providerName: ProviderName, providerUserId: string): ProviderId {
84
- return {
85
- providerName,
86
- providerUserId: normalizeProviderUserId(providerName, providerUserId),
87
- }
88
- }
89
-
90
- // PRIVATE API
91
- export function normalizeProviderUserId(providerName: ProviderName, providerUserId: string): string {
92
- switch (providerName) {
93
- case 'email':
94
- case 'username':
95
- return providerUserId.toLowerCase();
96
- case 'google':
97
- case 'github':
98
- case 'discord':
99
- case 'keycloak':
100
- case 'slack':
101
- case 'microsoft':
102
- return providerUserId;
103
- /*
104
- Why the default case?
105
- In case users add a new auth provider in the user-land.
106
- Users can't extend this function because it is private.
107
- If there is an unknown `providerName` in runtime, we'll
108
- return the `providerUserId` as is.
109
-
110
- We want to still have explicit OAuth providers listed
111
- so that we get a type error if we forget to add a new provider
112
- to the switch statement.
113
- */
114
- default:
115
- providerName satisfies never;
116
- return providerUserId;
117
- }
46
+ failureRedirectPath: {=& failureRedirectPath =},
47
+ successRedirectPath: {=& successRedirectPath =},
118
48
  }
119
49
 
120
50
  // PUBLIC API
@@ -129,7 +59,7 @@ export async function findAuthIdentity(providerId: ProviderId): Promise<{= authI
129
59
  // PUBLIC API
130
60
  /**
131
61
  * Updates the provider data for the given auth identity.
132
- *
62
+ *
133
63
  * This function performs data sanitization and serialization.
134
64
  * Sanitization is done by hashing the password, so this function
135
65
  * expects the password received in the `providerDataUpdates`
@@ -221,19 +151,6 @@ export async function deleteUserByAuthId(authId: string): Promise<{ count: numbe
221
151
  } } })
222
152
  }
223
153
 
224
- // PRIVATE API
225
- // If an user exists, we don't want to leak information
226
- // about it. Pretending that we're doing some work
227
- // will make it harder for an attacker to determine
228
- // if a user exists or not.
229
- // NOTE: Attacker measuring time to response can still determine
230
- // if a user exists or not. We'll be able to avoid it when
231
- // we implement e-mail sending via jobs.
232
- export async function doFakeWork(): Promise<unknown> {
233
- const timeToWork = Math.floor(Math.random() * 1000) + 1000;
234
- return sleep(timeToWork);
235
- }
236
-
237
154
  // PRIVATE API
238
155
  export function rethrowPossibleAuthError(e: unknown): void {
239
156
  // Prisma code P2002 is for unique constraint violations.
@@ -278,6 +195,10 @@ export function rethrowPossibleAuthError(e: unknown): void {
278
195
  throw e
279
196
  }
280
197
 
198
+ function serializeProviderData<PN extends ProviderName>(providerData: PossibleProviderData[PN]): string {
199
+ return JSON.stringify(providerData);
200
+ }
201
+
281
202
  // PRIVATE API
282
203
  export async function validateAndGetUserFields(
283
204
  data: {
@@ -299,73 +220,9 @@ export async function validateAndGetUserFields(
299
220
  try {
300
221
  const value = await getFieldValue(sanitizedData)
301
222
  result[field] = value
302
- } catch (e) {
303
- throwValidationError(e.message)
223
+ } catch (e: unknown) {
224
+ throwValidationError(getErrorMessage(e));
304
225
  }
305
226
  }
306
227
  return result;
307
228
  }
308
-
309
- // PUBLIC API
310
- export function getProviderData<PN extends ProviderName>(
311
- providerData: string,
312
- ): Omit<PossibleProviderData[PN], 'hashedPassword'> {
313
- return sanitizeProviderData(getProviderDataWithPassword(providerData));
314
- }
315
-
316
- // PUBLIC API
317
- export function getProviderDataWithPassword<PN extends ProviderName>(
318
- providerData: string,
319
- ): PossibleProviderData[PN] {
320
- // NOTE: We are letting JSON.parse throw an error if the providerData is not valid JSON.
321
- return JSON.parse(providerData);
322
- }
323
-
324
- function sanitizeProviderData<PN extends ProviderName>(
325
- providerData: PossibleProviderData[PN],
326
- ): Omit<PossibleProviderData[PN], 'hashedPassword'> {
327
- if (providerDataHasPasswordField(providerData)) {
328
- const { hashedPassword, ...rest } = providerData;
329
- return rest;
330
- } else {
331
- return providerData;
332
- }
333
- }
334
-
335
- // PUBLIC API
336
- export async function sanitizeAndSerializeProviderData<PN extends ProviderName>(
337
- providerData: PossibleProviderData[PN],
338
- ): Promise<string> {
339
- return serializeProviderData(
340
- await ensurePasswordIsHashed(providerData)
341
- );
342
- }
343
-
344
- function serializeProviderData<PN extends ProviderName>(providerData: PossibleProviderData[PN]): string {
345
- return JSON.stringify(providerData);
346
- }
347
-
348
- async function ensurePasswordIsHashed<PN extends ProviderName>(
349
- providerData: PossibleProviderData[PN],
350
- ): Promise<PossibleProviderData[PN]> {
351
- const data = {
352
- ...providerData,
353
- };
354
- if (providerDataHasPasswordField(data)) {
355
- data.hashedPassword = await hashPassword(data.hashedPassword);
356
- }
357
-
358
- return data;
359
- }
360
-
361
-
362
- function providerDataHasPasswordField(
363
- providerData: PossibleProviderData[keyof PossibleProviderData],
364
- ): providerData is { hashedPassword: string } {
365
- return 'hashedPassword' in providerData;
366
- }
367
-
368
- // PRIVATE API
369
- export function createInvalidCredentialsError(message?: string): HttpError {
370
- return new HttpError(401, 'Invalid credentials', { message })
371
- }
@@ -1,6 +1,6 @@
1
1
  {{={= =}=}}
2
2
  import { env } from './env.js'
3
- import { stripTrailingSlash, getOrigin } from '../universal/url.js'
3
+ import { getOrigin, stripTrailingSlash } from '@wasp.sh/lib-sdk-core'
4
4
 
5
5
  type NodeEnv = typeof env.NODE_ENV
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { getSessionAndUserFromBearerToken } from '../auth/session.js'
2
- import { createInvalidCredentialsError } from '../auth/utils.js'
3
- import { defineHandler } from '../server/utils.js'
2
+ import { createInvalidCredentialsError } from '@wasp.sh/lib-sdk-core/node'
3
+ import { defineHandler } from '../utils.js'
4
4
 
5
5
  /**
6
6
  * Auth middleware
@@ -14,7 +14,7 @@ import { defineHandler } from '../server/utils.js'
14
14
  * - `req.sessionId` is the ID of the session that authenticated the request.
15
15
  * - If the request is not authenticated, it throws an error.
16
16
  */
17
- const auth = defineHandler(async (req, res, next) => {
17
+ const auth = defineHandler(async (req, _res, next) => {
18
18
  const authHeader = req.get('Authorization')
19
19
  // NOTE(matija): for now we let tokenless requests through and make it operation's
20
20
  // responsibility to verify whether the request is authenticated or not. In the future
@@ -11,25 +11,11 @@ import type {
11
11
  _{= crud.entityUpper =},
12
12
  } from "../_types";
13
13
  import type { Prisma } from "@prisma/client";
14
- import type { Payload, SuperJSONObject } from "../../core/serialization/index.js";
14
+ import type { Payload, SuperJSONObject } from "../../core/serialization/index";
15
15
  import type {
16
16
  {= crud.entityUpper =},
17
- } from "../../entities/index.js";
18
- {=# overrides.GetAll.isDefined =}
19
- {=& overrides.GetAll.importStatement =}
20
- {=/ overrides.GetAll.isDefined =}
21
- {=# overrides.Get.isDefined =}
22
- {=& overrides.Get.importStatement =}
23
- {=/ overrides.Get.isDefined =}
24
- {=# overrides.Create.isDefined =}
25
- {=& overrides.Create.importStatement =}
26
- {=/ overrides.Create.isDefined =}
27
- {=# overrides.Update.isDefined =}
28
- {=& overrides.Update.importStatement =}
29
- {=/ overrides.Update.isDefined =}
30
- {=# overrides.Delete.isDefined =}
31
- {=& overrides.Delete.importStatement =}
32
- {=/ overrides.Delete.isDefined =}
17
+ } from "wasp/entities";
18
+ import type { FromRegisterPath } from '../../types/register'
33
19
 
34
20
  type _WaspEntityTagged = _{= crud.entityUpper =}
35
21
  type _WaspEntity = {= crud.entityUpper =}
@@ -41,71 +27,49 @@ export declare namespace {= crud.name =} {
41
27
  {=# crud.operations.GetAll =}
42
28
  export type GetAllQuery<Input extends Payload = never, Output extends Payload = Payload> = {= queryType =}<[_WaspEntityTagged], Input, Output>
43
29
  {=/ crud.operations.GetAll =}
44
-
45
30
  {=# crud.operations.Get =}
31
+
46
32
  export type GetQuery<Input extends Payload = never, Output extends Payload = Payload> = {= queryType =}<[_WaspEntityTagged], Input, Output>
47
33
  {=/ crud.operations.Get =}
48
-
49
34
  {=# crud.operations.Create =}
35
+
50
36
  export type CreateAction<Input extends Payload = never, Output extends Payload = Payload> = {= actionType =}<[_WaspEntityTagged], Input, Output>
51
37
  {=/ crud.operations.Create =}
52
-
53
38
  {=# crud.operations.Update =}
39
+
54
40
  export type UpdateAction<Input extends Payload = never, Output extends Payload = Payload> = {= actionType =}<[_WaspEntityTagged], Input, Output>
55
41
  {=/ crud.operations.Update =}
56
-
57
42
  {=# crud.operations.Delete =}
43
+
58
44
  export type DeleteAction<Input extends Payload = never, Output extends Payload = Payload> = {= actionType =}<[_WaspEntityTagged], Input, Output>
59
45
  {=/ crud.operations.Delete =}
60
46
  }
61
47
 
62
48
  /**
63
49
  * PRIVATE API
64
- *
65
- * The types with the `Resolved` suffix are the types that are used internally by the Wasp client
66
- * to implement full-stack type safety.
67
50
  */
68
51
  {=# crud.operations.GetAll =}
69
- {=^ overrides.GetAll.isDefined =}
70
52
  type GetAllInput = {}
71
53
  type GetAllOutput = _WaspEntity[]
72
- export type GetAllQueryResolved = {= crud.name =}.GetAllQuery<GetAllInput, GetAllOutput>
73
- {=/ overrides.GetAll.isDefined =}
74
- {=# overrides.GetAll.isDefined =}
75
- const _waspGetAllQuery = {= overrides.GetAll.importIdentifier =}
76
- export type GetAllQueryResolved = typeof _waspGetAllQuery
77
- {=/ overrides.GetAll.isDefined =}
54
+ export type RegisteredGetAllQuery = FromRegisterPath<['crudOverrides', '{= crud.name =}', 'GetAll'], {= crud.name =}.GetAllQuery<GetAllInput, GetAllOutput>>
78
55
  {=/ crud.operations.GetAll =}
79
-
80
56
  {=# crud.operations.Get =}
81
- {=^ overrides.Get.isDefined =}
57
+
82
58
  type GetInput = SuperJSONObject & Prisma.{= crud.entityUpper =}WhereUniqueInput
83
59
  type GetOutput = _WaspEntity | null
84
- export type GetQueryResolved = {= crud.name =}.GetQuery<GetInput, GetOutput>
85
- {=/ overrides.Get.isDefined =}
86
- {=# overrides.Get.isDefined =}
87
- const _waspGetQuery = {= overrides.Get.importIdentifier =}
88
- export type GetQueryResolved = typeof _waspGetQuery
89
- {=/ overrides.Get.isDefined =}
60
+ export type RegisteredGetQuery = FromRegisterPath<['crudOverrides', '{= crud.name =}', 'Get'], {= crud.name =}.GetQuery<GetInput, GetOutput>>
90
61
  {=/ crud.operations.Get =}
91
-
92
62
  {=# crud.operations.Create =}
93
- {=^ overrides.Create.isDefined =}
63
+
94
64
  type CreateInput = SuperJSONObject & Prisma.XOR<
95
65
  Prisma.{= crud.entityUpper =}CreateInput,
96
66
  Prisma.{= crud.entityUpper =}UncheckedCreateInput
97
67
  >
98
68
  type CreateOutput = _WaspEntity
99
- export type CreateActionResolved = {= crud.name =}.CreateAction<CreateInput, CreateOutput>
100
- {=/ overrides.Create.isDefined =}
101
- {=# overrides.Create.isDefined =}
102
- const _waspCreateAction = {= overrides.Create.importIdentifier =}
103
- export type CreateActionResolved = typeof _waspCreateAction
104
- {=/ overrides.Create.isDefined =}
69
+ export type RegisteredCreateAction = FromRegisterPath<['crudOverrides', '{= crud.name =}', 'Create'], {= crud.name =}.CreateAction<CreateInput, CreateOutput>>
105
70
  {=/ crud.operations.Create =}
106
-
107
71
  {=# crud.operations.Update =}
108
- {=^ overrides.Update.isDefined =}
72
+
109
73
  type UpdateInput = SuperJSONObject & Prisma.XOR<
110
74
  Prisma.{= crud.entityUpper =}UpdateInput,
111
75
  Prisma.{= crud.entityUpper =}UncheckedUpdateInput
@@ -113,22 +77,11 @@ type UpdateInput = SuperJSONObject & Prisma.XOR<
113
77
  & Prisma.{= crud.entityUpper =}WhereUniqueInput
114
78
 
115
79
  type UpdateOutput = _WaspEntity
116
- export type UpdateActionResolved = {= crud.name =}.UpdateAction<UpdateInput, UpdateOutput>
117
- {=/ overrides.Update.isDefined =}
118
- {=# overrides.Update.isDefined =}
119
- const _waspUpdateAction = {= overrides.Update.importIdentifier =}
120
- export type UpdateActionResolved = typeof _waspUpdateAction
121
- {=/ overrides.Update.isDefined =}
80
+ export type RegisteredUpdateAction = FromRegisterPath<['crudOverrides', '{= crud.name =}', 'Update'], {= crud.name =}.UpdateAction<UpdateInput, UpdateOutput>>
122
81
  {=/ crud.operations.Update =}
123
-
124
82
  {=# crud.operations.Delete =}
125
- {=^ overrides.Delete.isDefined =}
83
+
126
84
  type DeleteInput = SuperJSONObject & Prisma.{= crud.entityUpper =}WhereUniqueInput
127
85
  type DeleteOutput = _WaspEntity
128
- export type DeleteActionResolved = {= crud.name =}.DeleteAction<DeleteInput, DeleteOutput>
129
- {=/ overrides.Delete.isDefined =}
130
- {=# overrides.Delete.isDefined =}
131
- const _waspDeleteAction = {= overrides.Delete.importIdentifier =}
132
- export type DeleteActionResolved = typeof _waspDeleteAction
133
- {=/ overrides.Delete.isDefined =}
86
+ export type RegisteredDeleteAction = FromRegisterPath<['crudOverrides', '{= crud.name =}', 'Delete'], {= crud.name =}.DeleteAction<DeleteInput, DeleteOutput>>
134
87
  {=/ crud.operations.Delete =}
@@ -1,35 +1,33 @@
1
1
  {{={= =}=}}
2
2
  {=# areThereAnyEntitiesDefined =}
3
+ import { PrismaClient as InternalPrismaClient } from '@prisma/client'
4
+ import type { FromRegister } from '../types/register'
3
5
  {=# prismaSetupFn.isDefined =}
4
6
  {=& prismaSetupFn.importStatement =}
7
+ {=/ prismaSetupFn.isDefined =}
8
+
9
+ // PUBLIC API
10
+ export type PrismaClient = ReturnType<RegisteredPrismaSetupFn>;
11
+
12
+ export type RegisteredPrismaSetupFn = FromRegister<'prismaSetupFn', () => InternalPrismaClient>;
5
13
 
6
- function createDbClient() {
7
- return {= prismaSetupFn.importIdentifier =}()
8
- }
14
+ {=# prismaSetupFn.isDefined =}
15
+ const dbClient: PrismaClient = {= prismaSetupFn.importIdentifier =}();
9
16
  {=/ prismaSetupFn.isDefined =}
10
17
  {=^ prismaSetupFn.isDefined =}
11
- import { PrismaClient as InternalPrismaClient } from '@prisma/client'
12
-
13
- function createDbClient() {
14
- return new InternalPrismaClient()
15
- }
18
+ const dbClient: PrismaClient = new InternalPrismaClient();
16
19
  {=/ prismaSetupFn.isDefined =}
17
20
  {=/ areThereAnyEntitiesDefined =}
18
21
  {=^ areThereAnyEntitiesDefined =}
22
+ export type PrismaClient = null;
23
+
19
24
  // * Prisma will not generate a PrismaClient if there no
20
25
  // entities in the schema. Trying to init the PrismaClient
21
26
  // will throw an error.
22
27
  // * To avoid throwing an error, we return null if there are no
23
28
  // entities in the schema.
24
- function createDbClient(): null {
25
- return null
26
- }
29
+ const dbClient: PrismaClient = null;
27
30
  {=/ areThereAnyEntitiesDefined =}
28
31
 
29
- const dbClient = createDbClient()
30
-
31
- // PUBLIC API
32
- export type PrismaClient = typeof dbClient
33
-
34
32
  // PUBLIC API
35
- export default dbClient
33
+ export default dbClient;
@@ -1,30 +1,13 @@
1
1
  {{={= =}=}}
2
- import { EmailFromField } from "./types";
3
-
4
- // PRIVATE API
5
- // Formats an email address and an optional name into a string that can be used
6
- // as the "from" field in an email.
7
- // { email: "test@test.com, name: "Test" } -> "Test <test@test.com>"
8
- export function formatFromField({
9
- email,
10
- name,
11
- }: {
12
- email: string;
13
- name?: string;
14
- }): string {
15
- if (name) {
16
- return `${name} <${email}>`;
17
- }
18
- return email;
19
- }
2
+ import type { EmailFromField } from '@wasp.sh/lib-sdk-core/node'
20
3
 
21
4
  {=# isDefaultFromFieldDefined =}
22
5
  // PRIVATE API
23
6
  export function getDefaultFromField(): EmailFromField {
24
7
  return {
25
- email: "{= defaultFromField.email =}",
8
+ email: {=& defaultFromField.email =},
26
9
  {=# defaultFromField.isNameDefined =}
27
- name: "{= defaultFromField.name =}",
10
+ name: {=& defaultFromField.name =},
28
11
  {=/ defaultFromField.isNameDefined =}
29
12
  }
30
13
  }
@@ -1,7 +1,7 @@
1
1
  import { getDefaultFromField } from "../helpers.js";
2
- import { DummyEmailProvider, EmailSender } from "../types";
2
+ import type { DummyEmailProvider, EmailSender } from "../types";
3
3
 
4
- import { colorize } from "../../../../universal/ansiColors.js";
4
+ import { colorize } from "@wasp.sh/lib-sdk-core";
5
5
 
6
6
  // PRIVATE API
7
7
  export function initDummyEmailSender(
@@ -1,5 +1,6 @@
1
1
  import { Resend } from 'resend';
2
- import { formatFromField, getDefaultFromField } from "../helpers.js";
2
+ import { formatFromField } from '@wasp.sh/lib-sdk-core/node'
3
+ import { getDefaultFromField } from "../helpers.js";
3
4
  import type { ResendEmailProvider, EmailSender } from "../types";
4
5
 
5
6
  // PRIVATE API
@@ -1,5 +1,6 @@
1
1
  import { createTransport } from "nodemailer";
2
- import { formatFromField, getDefaultFromField } from "../helpers.js";
2
+ import { formatFromField } from '@wasp.sh/lib-sdk-core/node'
3
+ import { getDefaultFromField } from "../helpers.js";
3
4
  import type { SMTPEmailProvider, EmailSender } from "../types";
4
5
 
5
6
  // PRIVATE API
@@ -1,49 +1,12 @@
1
1
  {{={= =}=}}
2
- // PRIVATE API
3
- export type EmailProvider = SMTPEmailProvider | SendGridProvider | MailgunEmailProvider | ResendEmailProvider | DummyEmailProvider;
4
-
5
- // PRIVATE API
6
- export type SMTPEmailProvider = {
7
- type: "smtp";
8
- host: string;
9
- port: number;
10
- username: string;
11
- password: string;
12
- };
13
-
14
- // PRIVATE API
15
- export type SendGridProvider = {
16
- type: "sendgrid";
17
- apiKey: string;
18
- };
19
-
20
- // PRIVATE API
21
- export type MailgunEmailProvider = {
22
- type: "mailgun";
23
- apiKey: string;
24
- domain: string;
25
- apiUrl?: string;
26
- };
27
-
28
- // PRIVATE API
29
- export type ResendEmailProvider = {
30
- type: "resend";
31
- apiKey: string;
32
- };
33
-
34
- // PRIVATE API
35
- export type DummyEmailProvider = {
36
- type: "dummy";
37
- }
2
+ import type { SentMessageInfo, EmailFromField } from '@wasp.sh/lib-sdk-core/node'
3
+ export { type EmailProvider, type SMTPEmailProvider, type SendGridProvider, type MailgunEmailProvider, type ResendEmailProvider, type DummyEmailProvider, type SentMessageInfo, type EmailFromField } from '@wasp.sh/lib-sdk-core/node'
38
4
 
39
5
  // PUBLIC API
40
6
  export type EmailSender = {
41
7
  send: (email: Email) => Promise<SentMessageInfo>;
42
8
  };
43
9
 
44
- // PUBLIC API
45
- export type SentMessageInfo = any;
46
-
47
10
  // PUBLIC API
48
11
  export type Email = {
49
12
  {=# isDefaultFromFieldDefined =}
@@ -57,9 +20,3 @@ export type Email = {
57
20
  text: string;
58
21
  html: string;
59
22
  };
60
-
61
- // PUBLIC API
62
- export type EmailFromField = {
63
- name?: string;
64
- email: string;
65
- }
@@ -1,7 +1,7 @@
1
1
  {{={= =}=}}
2
2
  import { env } from '../env.js';
3
3
  import { initEmailSender } from "./core/index.js";
4
- import { EmailSender } from "./core/types.js";
4
+ import type { EmailSender } from "./core/types.js";
5
5
 
6
6
  {=# isSmtpProviderEnabled =}
7
7
  const emailProvider = {
@@ -1,17 +1,25 @@
1
1
  {{={= =}=}}
2
2
  import * as z from "zod"
3
-
4
- import { ensureEnvSchema } from "../env/validation.js"
3
+ import { ensureEnvSchema } from "@wasp.sh/lib-sdk-core"
4
+ import type { FromRegister } from "../types/register";
5
5
  {=# envValidationSchema.isDefined =}
6
6
  {=& envValidationSchema.importStatement =}
7
- const userServerEnvSchema = {= envValidationSchema.importIdentifier =};
7
+ {=/ envValidationSchema.isDefined =}
8
+
9
+ export type RegisteredServerEnvValidationSchema = FromRegister<"serverEnvValidationSchema", z.ZodObject<{}>>;
10
+ type UserServerEnvSchema = RegisteredServerEnvValidationSchema;
11
+
12
+ {=# envValidationSchema.isDefined =}
13
+ const userServerEnvSchema: UserServerEnvSchema = {= envValidationSchema.importIdentifier =};
8
14
  {=/ envValidationSchema.isDefined =}
9
15
  {=^ envValidationSchema.isDefined =}
10
- const userServerEnvSchema = z.object({});
16
+ const userServerEnvSchema: UserServerEnvSchema = z.object({});
11
17
  {=/ envValidationSchema.isDefined =}
12
18
 
13
19
  const waspCommonServerEnvSchema = z.object({
14
- PORT: z.coerce.number().default({= defaultServerPort =}),
20
+ {= serverPortEnvVarName =}: z.coerce.number({
21
+ error: '{= serverPortEnvVarName =} is required and must be a number',
22
+ }),
15
23
  {= databaseUrlEnvVarName =}: z.string({
16
24
  error: '{= databaseUrlEnvVarName =} is required',
17
25
  }),
@@ -152,10 +160,8 @@ const jwtTokenSchema = z
152
160
  // to make the development process easier.
153
161
  const waspDevServerEnvSchema = z.object({
154
162
  NODE_ENV: z.literal("development"),
155
- "{= serverUrlEnvVarName =}": serverUrlSchema
156
- .default("{= defaultServerUrl =}"),
157
- "{= clientUrlEnvVarName =}": clientUrlSchema
158
- .default("{= defaultClientUrl =}"),
163
+ "{= serverUrlEnvVarName =}": serverUrlSchema,
164
+ "{= clientUrlEnvVarName =}": clientUrlSchema,
159
165
  {=# isAuthEnabled =}
160
166
  "{= jwtSecretEnvVarName =}": jwtTokenSchema
161
167
  .default("DEVJWTSECRET"),
@@ -175,13 +181,16 @@ const waspServerEnvSchema = z.discriminatedUnion("NODE_ENV", [
175
181
  z.object({...waspCommonServerEnvSchema.shape, ...waspDevServerEnvSchema.shape}),
176
182
  z.object({...waspCommonServerEnvSchema.shape, ...waspProdServerEnvSchema.shape}),
177
183
  ]);
178
- const serverEnvSchema = userServerEnvSchema.and(waspServerEnvSchema);
184
+
185
+ type CompleteServerEnvSchema = z.ZodIntersection<UserServerEnvSchema, typeof waspServerEnvSchema>;
186
+
187
+ const serverEnvSchema: CompleteServerEnvSchema = userServerEnvSchema.and(waspServerEnvSchema);
179
188
 
180
189
  const defaultNodeEnvValue = waspDevServerEnvSchema.shape.NODE_ENV.value;
181
190
  const { NODE_ENV: inputNodeEnvValue, ...restEnv } = process.env;
182
191
 
183
192
  // PUBLIC API
184
- export const env = ensureEnvSchema(
193
+ export const env: z.infer<CompleteServerEnvSchema> = ensureEnvSchema(
185
194
  {
186
195
  NODE_ENV: inputNodeEnvValue ?? defaultNodeEnvValue,
187
196
  ...restEnv,