diff --git a/waspc/data/Generator/templates/sdk/package.json b/waspc/data/Generator/templates/sdk/package.json index e698999273..bf9db83f49 100644 --- a/waspc/data/Generator/templates/sdk/package.json +++ b/waspc/data/Generator/templates/sdk/package.json @@ -80,9 +80,8 @@ "./test/*": "./dist/test/*.js", {=! Used by our code, uncodumented (but accessible) for users. =} "./server/crud/*": "./dist/server/crud/*", - "./email": "./dist/email/index.js", {=! Used by our code, uncodumented (but accessible) for users. =} - "./email/core/types": "./dist/email/core/types.js", + "./server/email/core/types": "./dist/server/email/core/types.js", {=! Used by our code, uncodumented (but accessible) for users. =} "./server/auth/email/utils": "./dist/server/auth/email/utils.js", {=! Parts are used by users and documented (types), other parts are used by the framework code (entities). =} @@ -118,7 +117,8 @@ "./client/auth": "./dist/client/auth/index.js", "./server/auth": "./dist/server/auth/index.js", "./server/crud": "./dist/server/crud/index.js", - "./client/crud": "./dist/client/crud/index.js" + "./client/crud": "./dist/client/crud/index.js", + "./server/email": "./dist/server/email/index.js" }, {=! TypeScript doesn't care about the redirects we define above in "exports" field; those diff --git a/waspc/data/Generator/templates/sdk/server/auth/email/utils.ts b/waspc/data/Generator/templates/sdk/server/auth/email/utils.ts index 1270589940..5b2bfbee56 100644 --- a/waspc/data/Generator/templates/sdk/server/auth/email/utils.ts +++ b/waspc/data/Generator/templates/sdk/server/auth/email/utils.ts @@ -1,7 +1,7 @@ {{={= =}=}} import { signData } from 'wasp/auth/jwt' -import { emailSender } from 'wasp/email'; -import { Email } from 'wasp/email/core/types'; +import { emailSender } from 'wasp/server/email'; +import { Email } from 'wasp/server/email/core/types'; import { createProviderId, updateAuthIdentityProviderData, diff --git a/waspc/data/Generator/templates/sdk/email/core/helpers.ts b/waspc/data/Generator/templates/sdk/server/email/core/helpers.ts similarity index 90% rename from waspc/data/Generator/templates/sdk/email/core/helpers.ts rename to waspc/data/Generator/templates/sdk/server/email/core/helpers.ts index 9fc5652ba6..f7dc673d62 100644 --- a/waspc/data/Generator/templates/sdk/email/core/helpers.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/helpers.ts @@ -1,6 +1,7 @@ {{={= =}=}} -import { EmailFromField } from "wasp/email/core/types"; +import { EmailFromField } from "./types"; +// PRIVATE API // Formats an email address and an optional name into a string that can be used // as the "from" field in an email. // { email: "test@test.com, name: "Test" } -> "Test " @@ -18,6 +19,7 @@ export function formatFromField({ } {=# isDefaultFromFieldDefined =} +// PRIVATE API export function getDefaultFromField(): EmailFromField { return { email: "{= defaultFromField.email =}", @@ -28,6 +30,7 @@ export function getDefaultFromField(): EmailFromField { } {=/ isDefaultFromFieldDefined =} {=^ isDefaultFromFieldDefined =} +// PRIVATE API export function getDefaultFromField(): EmailFromField { return { email: "", diff --git a/waspc/data/Generator/templates/sdk/email/core/index.ts b/waspc/data/Generator/templates/sdk/server/email/core/index.ts similarity index 90% rename from waspc/data/Generator/templates/sdk/email/core/index.ts rename to waspc/data/Generator/templates/sdk/server/email/core/index.ts index 78430344b7..746cd023e3 100644 --- a/waspc/data/Generator/templates/sdk/email/core/index.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/index.ts @@ -1,13 +1,17 @@ {{={= =}=}} {=# isSmtpProviderUsed =} +// PRIVATE API export { initSmtpEmailSender as initEmailSender } from "./providers/smtp.js"; {=/ isSmtpProviderUsed =} {=# isSendGridProviderUsed =} +// PRIVATE API export { initSendGridEmailSender as initEmailSender } from "./providers/sendgrid.js"; {=/ isSendGridProviderUsed =} {=# isMailgunProviderUsed =} +// PRIVATE API export { initMailgunEmailSender as initEmailSender } from "./providers/mailgun.js"; {=/ isMailgunProviderUsed =} {=# isDummyProviderUsed =} +// PRIVATE API export { initDummyEmailSender as initEmailSender } from "./providers/dummy.js"; {=/ isDummyProviderUsed =} diff --git a/waspc/data/Generator/templates/sdk/email/core/providers/dummy.ts b/waspc/data/Generator/templates/sdk/server/email/core/providers/dummy.ts similarity index 94% rename from waspc/data/Generator/templates/sdk/email/core/providers/dummy.ts rename to waspc/data/Generator/templates/sdk/server/email/core/providers/dummy.ts index 48d0f08fe2..51b921b12f 100644 --- a/waspc/data/Generator/templates/sdk/email/core/providers/dummy.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/providers/dummy.ts @@ -1,8 +1,9 @@ -import { DummyEmailProvider, EmailSender } from "wasp/email/core/types"; +import { DummyEmailProvider, EmailSender } from "../types"; import { getDefaultFromField } from "../helpers.js"; const yellowColor = "\x1b[33m%s\x1b[0m"; +// PRIVATE API export function initDummyEmailSender( config?: DummyEmailProvider, ): EmailSender { diff --git a/waspc/data/Generator/templates/sdk/email/core/providers/mailgun.ts b/waspc/data/Generator/templates/sdk/server/email/core/providers/mailgun.ts similarity index 87% rename from waspc/data/Generator/templates/sdk/email/core/providers/mailgun.ts rename to waspc/data/Generator/templates/sdk/server/email/core/providers/mailgun.ts index 549b393589..7d008aa9f7 100644 --- a/waspc/data/Generator/templates/sdk/email/core/providers/mailgun.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/providers/mailgun.ts @@ -1,7 +1,8 @@ import { NodeMailgun } from "ts-mailgun"; import { getDefaultFromField } from "../helpers.js"; -import type { MailgunEmailProvider, EmailSender } from "wasp/email/core/types"; +import type { MailgunEmailProvider, EmailSender } from "../types"; +// PRIVATE API export function initMailgunEmailSender( config: MailgunEmailProvider ): EmailSender { diff --git a/waspc/data/Generator/templates/sdk/email/core/providers/sendgrid.ts b/waspc/data/Generator/templates/sdk/server/email/core/providers/sendgrid.ts similarity index 88% rename from waspc/data/Generator/templates/sdk/email/core/providers/sendgrid.ts rename to waspc/data/Generator/templates/sdk/server/email/core/providers/sendgrid.ts index 3afcc42bd1..60dd8feb80 100644 --- a/waspc/data/Generator/templates/sdk/email/core/providers/sendgrid.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/providers/sendgrid.ts @@ -1,7 +1,8 @@ import SendGrid from "@sendgrid/mail"; import { getDefaultFromField } from "../helpers.js"; -import type { SendGridProvider, EmailSender } from "wasp/email/core/types"; +import type { SendGridProvider, EmailSender } from from "../types"; +// PRIVATE API export function initSendGridEmailSender( provider: SendGridProvider ): EmailSender { diff --git a/waspc/data/Generator/templates/sdk/email/core/providers/smtp.ts b/waspc/data/Generator/templates/sdk/server/email/core/providers/smtp.ts similarity index 89% rename from waspc/data/Generator/templates/sdk/email/core/providers/smtp.ts rename to waspc/data/Generator/templates/sdk/server/email/core/providers/smtp.ts index 43d8d6c211..25194b2897 100644 --- a/waspc/data/Generator/templates/sdk/email/core/providers/smtp.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/providers/smtp.ts @@ -1,7 +1,8 @@ import { createTransport } from "nodemailer"; import { formatFromField, getDefaultFromField } from "../helpers.js"; -import type { SMTPEmailProvider, EmailSender } from "wasp/email/core/types"; +import type { SMTPEmailProvider, EmailSender } from "../types"; +// PRIVATE API export function initSmtpEmailSender(config: SMTPEmailProvider): EmailSender { const transporter = createTransport({ host: config.host, diff --git a/waspc/data/Generator/templates/sdk/email/core/types.ts b/waspc/data/Generator/templates/sdk/server/email/core/types.ts similarity index 87% rename from waspc/data/Generator/templates/sdk/email/core/types.ts rename to waspc/data/Generator/templates/sdk/server/email/core/types.ts index 8b2a984799..7da4e80c54 100644 --- a/waspc/data/Generator/templates/sdk/email/core/types.ts +++ b/waspc/data/Generator/templates/sdk/server/email/core/types.ts @@ -1,6 +1,8 @@ {{={= =}=}} +// PRIVATE API export type EmailProvider = SMTPEmailProvider | SendGridProvider | MailgunEmailProvider | DummyEmailProvider; +// PRIVATE API export type SMTPEmailProvider = { type: "smtp"; host: string; @@ -9,27 +11,33 @@ export type SMTPEmailProvider = { password: string; }; +// PRIVATE API export type SendGridProvider = { type: "sendgrid"; apiKey: string; }; +// PRIVATE API export type MailgunEmailProvider = { type: "mailgun"; apiKey: string; domain: string; }; +// PRIVATE API export type DummyEmailProvider = { type: "dummy"; } +// PRIVATE API export type EmailSender = { send: (email: Email) => Promise; }; +// PRIVATE API export type SentMessageInfo = any; +// PRIVATE API export type Email = { {=# isDefaultFromFieldDefined =} from?: EmailFromField; @@ -43,6 +51,7 @@ export type Email = { html: string; }; +// PRIVATE API export type EmailFromField = { name?: string; email: string; diff --git a/waspc/data/Generator/templates/sdk/email/index.ts b/waspc/data/Generator/templates/sdk/server/email/index.ts similarity index 98% rename from waspc/data/Generator/templates/sdk/email/index.ts rename to waspc/data/Generator/templates/sdk/server/email/index.ts index 3ed1f35b2b..9d83baf8cc 100644 --- a/waspc/data/Generator/templates/sdk/email/index.ts +++ b/waspc/data/Generator/templates/sdk/server/email/index.ts @@ -29,4 +29,5 @@ const emailProvider = { } as const; {=/ isDummyProviderUsed =} +// PUBLIC API export const emailSender = initEmailSender(emailProvider); diff --git a/waspc/data/Generator/templates/server/src/auth/providers/config/email.ts b/waspc/data/Generator/templates/server/src/auth/providers/config/email.ts index 0957768722..a350e07b00 100644 --- a/waspc/data/Generator/templates/server/src/auth/providers/config/email.ts +++ b/waspc/data/Generator/templates/server/src/auth/providers/config/email.ts @@ -2,7 +2,7 @@ import { Router, Request, Response, NextFunction } from "express"; import { ProviderConfig } from "wasp/auth/providers/types"; -import type { EmailFromField } from "wasp/email/core/types"; +import type { EmailFromField } from "wasp/server/email/core/types"; import { getLoginRoute } from "../email/login.js"; import { getSignupRoute } from "../email/signup.js"; diff --git a/waspc/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts b/waspc/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts index be0c685335..74b1168a26 100644 --- a/waspc/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts +++ b/waspc/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts @@ -11,7 +11,7 @@ import { isEmailResendAllowed, } from "wasp/server/auth/email/utils"; import { ensureValidEmail } from 'wasp/auth/validation'; -import type { EmailFromField } from 'wasp/email/core/types'; +import type { EmailFromField } from 'wasp/server/email/core/types'; import { GetPasswordResetEmailContentFn } from 'wasp/server/auth/email'; import { HttpError } from 'wasp/server'; diff --git a/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts b/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts index 8aab2e3019..a22a7efb66 100644 --- a/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts +++ b/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts @@ -1,5 +1,5 @@ import { Request, Response } from 'express'; -import { EmailFromField } from "wasp/email/core/types"; +import { EmailFromField } from "wasp/server/email/core/types"; import { createUser, createProviderId, diff --git a/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/utils.ts b/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/utils.ts index fc6847cb59..ba04768d7e 100644 --- a/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/utils.ts +++ b/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/utils.ts @@ -1,8 +1,6 @@ import { hashPassword } from './password.js' import { verify } from './jwt.js' -import AuthError from 'wasp/core/AuthError' -import HttpError from 'wasp/core/HttpError' -import { prisma } from 'wasp/server' +import { prisma, HttpError, AuthError } from 'wasp/server' import { sleep } from 'wasp/server/utils' import { type User, diff --git a/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/validation.ts b/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/validation.ts index d7cda4e29f..637f4203fd 100644 --- a/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/validation.ts +++ b/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/auth/validation.ts @@ -1,4 +1,4 @@ -import HttpError from 'wasp/core/HttpError'; +import { HttpError } from 'wasp/server'; export const PASSWORD_FIELD = 'password'; const USERNAME_FIELD = 'username'; diff --git a/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/package.json b/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/package.json index 5471c7a681..10857f880c 100644 --- a/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/package.json +++ b/waspc/examples/todo-typescript/.wasp/out/sdk/wasp/package.json @@ -8,8 +8,6 @@ "types": "tsc --declaration --emitDeclarationOnly --stripInternal --declarationDir dist" }, "exports": { - "./core/HttpError": "./dist/core/HttpError.js", - "./core/AuthError": "./dist/core/AuthError.js", "./core/config": "./dist/core/config.js", "./core/stitches.config": "./dist/core/stitches.config.js", "./core/storage": "./dist/core/storage.js", @@ -36,17 +34,14 @@ "./universal/url": "./dist/universal/url.js", "./universal/types": "./dist/universal/types.js", "./universal/validators": "./dist/universal/validators.js", - "./server/middleware": "./dist/server/middleware/index.js", "./server/utils": "./dist/server/utils.js", "./server/actions": "./dist/server/actions/index.js", "./server/queries": "./dist/server/queries/index.js", "./server/auth/email": "./dist/server/auth/email/index.js", - "./dbSeed/types": "./dist/dbSeed/types.js", "./test": "./dist/test/index.js", "./test/*": "./dist/test/*.js", "./server/crud/*": "./dist/server/crud/*", - "./email": "./dist/email/index.js", - "./email/core/types": "./dist/email/core/types.js", + "./server/email/core/types": "./dist/server/email/core/types.js", "./server/auth/email/utils": "./dist/server/auth/email/utils.js", "./jobs/*": "./dist/jobs/*.js", "./jobs/pgBoss/types": "./dist/jobs/pgBoss/types.js", @@ -56,6 +51,7 @@ "./webSocket/WebSocketProvider": "./dist/webSocket/WebSocketProvider.jsx", "./server/types": "./dist/server/types/index.js", + "./server/middleware": "./dist/server/middleware/index.js", "./server": "./dist/server/index.js", "./server/api": "./dist/server/api/index.js", @@ -64,7 +60,8 @@ "./client/auth": "./dist/client/auth/index.js", "./server/auth": "./dist/server/auth/index.js", "./server/crud": "./dist/server/crud/index.js", - "./client/crud": "./dist/client/crud/index.js" + "./client/crud": "./dist/client/crud/index.js", + "./server/email": "./dist/server/email/index.js" }, "typesVersions": { "*": { diff --git a/waspc/examples/todo-typescript/src/task/actions.ts b/waspc/examples/todo-typescript/src/task/actions.ts index 98a56e925a..fbeba40687 100644 --- a/waspc/examples/todo-typescript/src/task/actions.ts +++ b/waspc/examples/todo-typescript/src/task/actions.ts @@ -5,7 +5,7 @@ import type { DeleteTasks, } from 'wasp/server/actions/types' import type { Task } from 'wasp/entities' -import { emailSender } from 'wasp/email' +import { emailSender } from 'wasp/server/email' type CreateArgs = Pick diff --git a/waspc/src/Wasp/Generator/SdkGenerator.hs b/waspc/src/Wasp/Generator/SdkGenerator.hs index e1621de90a..3bd94f8d2e 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator.hs @@ -38,15 +38,15 @@ import Wasp.Generator.Monad (Generator) import qualified Wasp.Generator.NpmDependencies as N import Wasp.Generator.SdkGenerator.AuthG (genAuth) import Wasp.Generator.SdkGenerator.Client.AuthG (genNewClientAuth) -import Wasp.Generator.SdkGenerator.Client.CrudG (genNewClientrudApi) +import Wasp.Generator.SdkGenerator.Client.CrudG (genNewClientCrudApi) import qualified Wasp.Generator.SdkGenerator.Common as C import Wasp.Generator.SdkGenerator.CrudG (genCrud) -import Wasp.Generator.SdkGenerator.EmailSenderG (depsRequiredByEmail, genEmailSender) import Wasp.Generator.SdkGenerator.JobGenerator (genJobTypes) import Wasp.Generator.SdkGenerator.RouterGenerator (genRouter) import Wasp.Generator.SdkGenerator.RpcGenerator (genRpc) import Wasp.Generator.SdkGenerator.Server.AuthG (genNewServerApi) import Wasp.Generator.SdkGenerator.Server.CrudG (genNewServerCrudApi) +import Wasp.Generator.SdkGenerator.Server.EmailSenderG (depsRequiredByEmail, genNewEmailSenderApi) import Wasp.Generator.SdkGenerator.ServerApiG (genServerApi) import Wasp.Generator.SdkGenerator.ServerOpsGenerator (genOperations) import Wasp.Generator.SdkGenerator.WebSocketGenerator (depsRequiredByWebSockets, genWebSockets) @@ -114,12 +114,12 @@ genSdkReal spec = <++> genRouter spec <++> genMiddleware spec <++> genExportedTypesDir spec - <++> genEmailSender spec -- New API <++> genNewClientAuth spec <++> genNewServerApi spec <++> genNewServerCrudApi spec - <++> genNewClientrudApi spec + <++> genNewClientCrudApi spec + <++> genNewEmailSenderApi spec where genFileCopy = return . C.mkTmplFd diff --git a/waspc/src/Wasp/Generator/SdkGenerator/Client/CrudG.hs b/waspc/src/Wasp/Generator/SdkGenerator/Client/CrudG.hs index f73cf2c3ee..0819df3ee6 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator/Client/CrudG.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator/Client/CrudG.hs @@ -1,5 +1,5 @@ module Wasp.Generator.SdkGenerator.Client.CrudG - ( genNewClientrudApi, + ( genNewClientCrudApi, ) where @@ -17,8 +17,8 @@ import Wasp.Generator.Monad (Generator) import qualified Wasp.Generator.SdkGenerator.Common as C import Wasp.Util ((<++>)) -genNewClientrudApi :: AppSpec -> Generator [FileDraft] -genNewClientrudApi spec = +genNewClientCrudApi :: AppSpec -> Generator [FileDraft] +genNewClientCrudApi spec = if areThereAnyCruds then sequence diff --git a/waspc/src/Wasp/Generator/SdkGenerator/EmailSender/Providers.hs b/waspc/src/Wasp/Generator/SdkGenerator/EmailSender/Providers.hs index 6bb0e13cd2..0af2ae1656 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator/EmailSender/Providers.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator/EmailSender/Providers.hs @@ -25,7 +25,7 @@ data EmailSenderProvider = EmailSenderProvider data ProvidersDir providersDirInSdkTemplatesDir :: Path' (Rel C.SdkTemplatesDir) (Dir ProvidersDir) -providersDirInSdkTemplatesDir = [reldir|email/core/providers|] +providersDirInSdkTemplatesDir = [reldir|server/email/core/providers|] smtp :: EmailSenderProvider smtp = diff --git a/waspc/src/Wasp/Generator/SdkGenerator/EmailSenderG.hs b/waspc/src/Wasp/Generator/SdkGenerator/Server/EmailSenderG.hs similarity index 91% rename from waspc/src/Wasp/Generator/SdkGenerator/EmailSenderG.hs rename to waspc/src/Wasp/Generator/SdkGenerator/Server/EmailSenderG.hs index 9a669247c9..fa6cb2b315 100644 --- a/waspc/src/Wasp/Generator/SdkGenerator/EmailSenderG.hs +++ b/waspc/src/Wasp/Generator/SdkGenerator/Server/EmailSenderG.hs @@ -1,4 +1,4 @@ -module Wasp.Generator.SdkGenerator.EmailSenderG where +module Wasp.Generator.SdkGenerator.Server.EmailSenderG where import Data.Aeson (object, (.=)) import qualified Data.Aeson as Aeson @@ -17,8 +17,8 @@ import qualified Wasp.Generator.SdkGenerator.Common as C import qualified Wasp.Generator.SdkGenerator.EmailSender.Providers as Providers import Wasp.Util ((<++>)) -genEmailSender :: AppSpec -> Generator [FileDraft] -genEmailSender spec = case maybeEmailSender of +genNewEmailSenderApi :: AppSpec -> Generator [FileDraft] +genNewEmailSenderApi spec = case maybeEmailSender of Just emailSender -> sequence [ genIndex emailSender @@ -31,7 +31,7 @@ genEmailSender spec = case maybeEmailSender of genIndex :: EmailSender -> Generator FileDraft genIndex email = return $ C.mkTmplFdWithData tmplPath tmplData where - tmplPath = [relfile|email/index.ts|] + tmplPath = [relfile|server/email/index.ts|] tmplData = getEmailProvidersJson email genCore :: EmailSender -> Generator [FileDraft] @@ -46,13 +46,13 @@ genCore email = genCoreIndex :: EmailSender -> Generator FileDraft genCoreIndex email = return $ C.mkTmplFdWithData tmplPath tmplData where - tmplPath = [relfile|email/core/index.ts|] + tmplPath = [relfile|server/email/core/index.ts|] tmplData = getEmailProvidersJson email genCoreTypes :: EmailSender -> Generator FileDraft genCoreTypes email = return $ C.mkTmplFdWithData tmplPath tmplData where - tmplPath = [relfile|email/core/types.ts|] + tmplPath = [relfile|server/email/core/types.ts|] tmplData = object ["isDefaultFromFieldDefined" .= isDefaultFromFieldDefined] isDefaultFromFieldDefined = isJust defaultFromField @@ -61,7 +61,7 @@ genCoreTypes email = return $ C.mkTmplFdWithData tmplPath tmplData genCoreHelpers :: EmailSender -> Generator FileDraft genCoreHelpers email = return $ C.mkTmplFdWithData tmplPath tmplData where - tmplPath = [relfile|email/core/helpers.ts|] + tmplPath = [relfile|server/email/core/helpers.ts|] tmplData = object [ "defaultFromField" diff --git a/waspc/waspc.cabal b/waspc/waspc.cabal index fa227ff71c..a15a13f4dc 100644 --- a/waspc/waspc.cabal +++ b/waspc/waspc.cabal @@ -293,25 +293,25 @@ library Wasp.Generator.NpmInstall.Common Wasp.Generator.NpmInstall.InstalledNpmDepsLog Wasp.Generator.SdkGenerator - Wasp.Generator.SdkGenerator.ServerApiG Wasp.Generator.SdkGenerator.Auth.AuthFormsG Wasp.Generator.SdkGenerator.Auth.EmailAuthG - Wasp.Generator.SdkGenerator.CrudG Wasp.Generator.SdkGenerator.Auth.LocalAuthG Wasp.Generator.SdkGenerator.Auth.OAuthAuthG Wasp.Generator.SdkGenerator.AuthG + Wasp.Generator.SdkGenerator.Client.AuthG + Wasp.Generator.SdkGenerator.Client.CrudG Wasp.Generator.SdkGenerator.Common - Wasp.Generator.SdkGenerator.RpcGenerator - Wasp.Generator.SdkGenerator.JobGenerator - Wasp.Generator.SdkGenerator.ServerOpsGenerator - Wasp.Generator.SdkGenerator.EmailSenderG + Wasp.Generator.SdkGenerator.CrudG Wasp.Generator.SdkGenerator.EmailSender.Providers - Wasp.Generator.SdkGenerator.WebSocketGenerator + Wasp.Generator.SdkGenerator.JobGenerator Wasp.Generator.SdkGenerator.RouterGenerator - Wasp.Generator.SdkGenerator.Client.AuthG + Wasp.Generator.SdkGenerator.RpcGenerator Wasp.Generator.SdkGenerator.Server.AuthG Wasp.Generator.SdkGenerator.Server.CrudG - Wasp.Generator.SdkGenerator.Client.CrudG + Wasp.Generator.SdkGenerator.Server.EmailSenderG + Wasp.Generator.SdkGenerator.ServerApiG + Wasp.Generator.SdkGenerator.ServerOpsGenerator + Wasp.Generator.SdkGenerator.WebSocketGenerator Wasp.Generator.ServerGenerator Wasp.Generator.ServerGenerator.JsImport Wasp.Generator.ServerGenerator.ApiRoutesG