@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.
- package/data/Cli/starters/README.md +2 -0
- package/data/Cli/starters/basic/README.md +3 -3
- package/data/Cli/starters/basic/src/tags/components/CreateTagForm.tsx +2 -3
- package/data/Cli/starters/basic/vite.config.ts +0 -3
- package/data/Cli/starters/minimal/package.json +4 -1
- package/data/Cli/starters/minimal/vite.config.ts +0 -3
- package/data/Cli/starters/skeleton/AGENTS.md +6 -0
- package/data/Cli/starters/skeleton/CLAUDE.md +6 -0
- package/data/Cli/starters/skeleton/tsconfig.src.json +1 -11
- package/data/Generator/libs/auth/wasp.sh-lib-auth-0.26.0.tgz +0 -0
- package/data/Generator/libs/sdk-core/node_modules/@wasp.sh/lib-auth/wasp.sh-lib-auth-0.26.0.tgz +0 -0
- package/data/Generator/libs/sdk-core/wasp.sh-lib-sdk-core-0.26.0.tgz +0 -0
- 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
- package/data/Generator/templates/Dockerfile +1 -0
- package/data/Generator/templates/sdk/wasp/api/index.ts +5 -86
- package/data/Generator/templates/sdk/wasp/auth/email/actions/login.ts +2 -2
- package/data/Generator/templates/sdk/wasp/auth/email/actions/passwordReset.ts +1 -1
- package/data/Generator/templates/sdk/wasp/auth/email/actions/signup.ts +7 -6
- package/data/Generator/templates/sdk/wasp/auth/email/actions/verifyEmail.ts +1 -1
- package/data/Generator/templates/sdk/wasp/auth/forms/Auth.tsx +12 -6
- package/data/Generator/templates/sdk/wasp/auth/forms/ForgotPassword.tsx +2 -1
- package/data/Generator/templates/sdk/wasp/auth/forms/Login.tsx +2 -1
- package/data/Generator/templates/sdk/wasp/auth/forms/ResetPassword.tsx +2 -1
- package/data/Generator/templates/sdk/wasp/auth/forms/Signup.tsx +5 -5
- package/data/Generator/templates/sdk/wasp/auth/forms/VerifyEmail.tsx +2 -1
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/common/LoginSignupForm.tsx +34 -33
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/DummyEmailSenderNotice.module.css +11 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/DummyEmailSenderNotice.tsx +17 -0
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/ForgotPasswordForm.tsx +9 -13
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/ResetPasswordForm.tsx +8 -9
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/VerifyEmailForm.tsx +4 -8
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/email/useEmail.ts +5 -5
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/usernameAndPassword/useUsernameAndPassword.ts +6 -5
- package/data/Generator/templates/sdk/wasp/auth/forms/types.ts +0 -59
- package/data/Generator/templates/sdk/wasp/auth/helpers/_Provider.tsx +2 -2
- package/data/Generator/templates/sdk/wasp/auth/index.ts +1 -1
- package/data/Generator/templates/sdk/wasp/auth/logout.ts +1 -1
- package/data/Generator/templates/sdk/wasp/auth/providers/index.ts +4 -4
- package/data/Generator/templates/sdk/wasp/auth/providers/types.ts +20 -24
- package/data/Generator/templates/sdk/wasp/auth/useAuth.ts +5 -5
- package/data/Generator/templates/sdk/wasp/auth/user.ts +147 -14
- package/data/Generator/templates/sdk/wasp/auth/username/actions/login.ts +2 -2
- package/data/Generator/templates/sdk/wasp/auth/username/actions/signup.ts +6 -5
- package/data/Generator/templates/sdk/wasp/auth/validation.ts +1 -83
- package/data/Generator/templates/sdk/wasp/client/app/pages/OAuthCallback.tsx +8 -5
- package/data/Generator/templates/sdk/wasp/client/app/pages/createAuthRequiredPage.jsx +6 -4
- package/data/Generator/templates/sdk/wasp/client/app/router.tsx +2 -2
- package/data/Generator/templates/sdk/wasp/client/auth/ui.ts +2 -2
- package/data/Generator/templates/sdk/wasp/client/auth/username.ts +2 -2
- package/data/Generator/templates/sdk/wasp/client/config.ts +1 -6
- package/data/Generator/templates/sdk/wasp/client/crud/_crud.ts +129 -75
- package/data/Generator/templates/sdk/wasp/client/env/schema.ts +14 -7
- package/data/Generator/templates/sdk/wasp/client/env.ts +4 -3
- package/data/Generator/templates/sdk/wasp/client/index.ts +3 -12
- package/data/Generator/templates/sdk/wasp/client/operations/actions/core.ts +14 -10
- package/data/Generator/templates/sdk/wasp/client/operations/actions/index.ts +7 -4
- package/data/Generator/templates/sdk/wasp/client/operations/index.ts +5 -5
- package/data/Generator/templates/sdk/wasp/client/operations/internal/index.ts +1 -8
- package/data/Generator/templates/sdk/wasp/client/operations/queries/core.ts +13 -55
- package/data/Generator/templates/sdk/wasp/client/operations/queries/index.ts +7 -7
- package/data/Generator/templates/sdk/wasp/client/router/Link.tsx +8 -8
- package/data/Generator/templates/sdk/wasp/client/router/NavLink.tsx +8 -8
- package/data/Generator/templates/sdk/wasp/client/router/index.ts +15 -15
- package/data/Generator/templates/sdk/wasp/client/test/index.ts +2 -1
- package/data/Generator/templates/sdk/wasp/client/test/vitest/helpers.tsx +5 -36
- package/data/Generator/templates/sdk/wasp/client/vite/index.ts +2 -1
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/virtualUserModules.ts +43 -0
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/{virtualModules.ts → virtualWaspModules.ts} +4 -4
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/wasp.ts +17 -14
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/waspConfig.ts +60 -18
- package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/files/client-entry.tsx +1 -1
- package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/files/routes.tsx +1 -1
- package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/files/ssr-entry.tsx +1 -1
- package/data/Generator/templates/sdk/wasp/client/webSocket/WebSocketProvider.tsx +3 -3
- package/data/Generator/templates/sdk/wasp/client/webSocket/index.ts +1 -1
- package/data/Generator/templates/sdk/wasp/core/serialization/index.ts +2 -47
- package/data/Generator/templates/sdk/wasp/core/serialization/prisma.ts +0 -1
- package/data/Generator/templates/sdk/wasp/entities/index.ts +6 -6
- package/data/Generator/templates/sdk/wasp/env/index.ts +1 -9
- package/data/Generator/templates/sdk/wasp/package.json +150 -104
- package/data/Generator/templates/sdk/wasp/server/_types/index.ts +8 -10
- package/data/Generator/templates/sdk/wasp/server/_types/taggedEntities.ts +4 -4
- package/data/Generator/templates/sdk/wasp/server/api/index.ts +5 -5
- package/data/Generator/templates/sdk/wasp/server/auth/email/index.ts +2 -12
- package/data/Generator/templates/sdk/wasp/server/auth/email/utils.ts +8 -30
- package/data/Generator/templates/sdk/wasp/server/auth/hooks.ts +5 -2
- package/data/Generator/templates/sdk/wasp/server/auth/index.ts +3 -3
- package/data/Generator/templates/sdk/wasp/{auth → server/auth}/jwt.ts +1 -1
- package/data/Generator/templates/sdk/wasp/{auth → server/auth}/lucia.ts +4 -4
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/oneTimeCode.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/discord.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/github.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/google.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/keycloak.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/microsoft.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/providers/slack.ts +1 -1
- package/data/Generator/templates/sdk/wasp/{auth → server/auth}/session.ts +17 -6
- package/data/Generator/templates/sdk/wasp/{auth → server/auth}/utils.ts +40 -183
- package/data/Generator/templates/sdk/wasp/server/config.ts +1 -1
- package/data/Generator/templates/sdk/wasp/{core → server/core}/auth.ts +3 -3
- package/data/Generator/templates/sdk/wasp/server/crud/_operationTypes.ts +16 -63
- package/data/Generator/templates/sdk/wasp/server/dbClient.ts +15 -17
- package/data/Generator/templates/sdk/wasp/server/email/core/helpers.ts +3 -20
- package/data/Generator/templates/sdk/wasp/server/email/core/providers/dummy.ts +2 -2
- package/data/Generator/templates/sdk/wasp/server/email/core/providers/resend.ts +2 -1
- package/data/Generator/templates/sdk/wasp/server/email/core/providers/smtp.ts +2 -1
- package/data/Generator/templates/sdk/wasp/server/email/core/types.ts +2 -45
- package/data/Generator/templates/sdk/wasp/server/email/index.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/env.ts +20 -11
- package/data/Generator/templates/sdk/wasp/server/index.ts +3 -3
- package/data/Generator/templates/sdk/wasp/server/jobs/_job.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/index.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/pgBossJob.ts +4 -4
- package/data/Generator/templates/sdk/wasp/server/jobs/core/pgBoss/types.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/middleware/index.ts +1 -1
- package/data/Generator/templates/sdk/wasp/server/operations/actions/index.ts +14 -8
- package/data/Generator/templates/sdk/wasp/server/operations/actions/types.ts +5 -5
- package/data/Generator/templates/sdk/wasp/server/operations/queries/index.ts +14 -8
- package/data/Generator/templates/sdk/wasp/server/operations/queries/types.ts +5 -5
- package/data/Generator/templates/sdk/wasp/server/operations/wrappers.ts +40 -14
- package/data/Generator/templates/sdk/wasp/server/types/index.ts +1 -11
- package/data/Generator/templates/sdk/wasp/server/utils.ts +5 -20
- package/data/Generator/templates/sdk/wasp/server/webSocket/index.ts +7 -7
- package/data/Generator/templates/sdk/wasp/tsconfig.json +20 -46
- package/data/Generator/templates/sdk/wasp/types/index.ts +8 -0
- package/data/Generator/templates/sdk/wasp/types/register.ts +21 -0
- package/data/Generator/templates/sdk/wasp/vite-env.d.ts +0 -9
- package/data/Generator/templates/sdk/wasp/wasp-ssr.d.ts +8 -0
- package/data/Generator/templates/sdk/wasp/wasp-user-virtual-modules.d.ts +20 -0
- package/data/Generator/templates/server/package.json +2 -1
- package/data/Generator/templates/server/rollup.config.js +2 -43
- package/data/Generator/templates/server/rollup.dbSeed.config.js +3 -0
- package/data/Generator/templates/server/src/app.js +2 -2
- package/data/Generator/templates/server/src/auth/providers/config/email.ts +5 -5
- package/data/Generator/templates/server/src/auth/providers/email/login.ts +4 -4
- package/data/Generator/templates/server/src/auth/providers/email/requestPasswordReset.ts +4 -4
- package/data/Generator/templates/server/src/auth/providers/email/resetPassword.ts +13 -5
- package/data/Generator/templates/server/src/auth/providers/email/signup.ts +29 -18
- package/data/Generator/templates/server/src/auth/providers/email/verifyEmail.ts +7 -2
- package/data/Generator/templates/server/src/auth/providers/oauth/cookies.ts +5 -1
- package/data/Generator/templates/server/src/auth/providers/oauth/handler.ts +1 -1
- package/data/Generator/templates/server/src/auth/providers/oauth/oneTimeCode.ts +2 -2
- package/data/Generator/templates/server/src/auth/providers/oauth/state.ts +55 -13
- package/data/Generator/templates/server/src/auth/providers/oauth/user.ts +6 -3
- package/data/Generator/templates/server/src/auth/providers/username/login.ts +4 -4
- package/data/Generator/templates/server/src/auth/providers/username/signup.ts +12 -4
- package/data/Generator/templates/server/src/createRollupBundle.js +47 -0
- package/data/Generator/templates/server/src/crud/_operations.ts +16 -16
- package/data/Generator/templates/server/src/plugins/virtualUserModules.js +40 -0
- package/data/Generator/templates/server/src/routes/apis/index.ts +3 -3
- package/data/Generator/templates/server/src/routes/auth/index.js +1 -1
- package/data/Generator/templates/server/src/routes/auth/logout.ts +2 -2
- package/data/Generator/templates/server/src/routes/crud/_crud.ts +1 -1
- package/data/Generator/templates/server/src/routes/index.js +18 -18
- package/data/Generator/templates/server/src/routes/operations/index.js +1 -1
- package/data/Generator/templates/server/src/webSocket/initialization.ts +1 -1
- package/data/Generator/templates/server/tsconfig.json +7 -13
- package/data/Generator/templates/types/app/sdk/register.ts +57 -0
- package/data/packages/deploy/dist/common/cliVersion.js +17 -0
- package/data/packages/deploy/dist/common/waspProject.js +1 -1
- package/data/packages/deploy/dist/common/zx.js +24 -6
- package/data/packages/deploy/dist/providers/fly/commands/createDb/createDb.js +13 -5
- package/data/packages/deploy/dist/providers/fly/flyCli.js +29 -17
- package/data/packages/deploy/dist/providers/fly/index.js +16 -8
- package/data/packages/deploy/dist/providers/railway/commands/setup/setup.js +19 -31
- package/data/packages/deploy/dist/providers/railway/index.js +11 -2
- package/data/packages/deploy/dist/providers/railway/jsonOutputSchemas.js +19 -34
- package/data/packages/deploy/dist/providers/railway/railwayCli.js +11 -20
- package/data/packages/deploy/dist/providers/railway/railwayEnvironment/cli.js +20 -0
- package/data/packages/deploy/dist/providers/railway/railwayProject/RailwayProject.js +4 -1
- package/data/packages/deploy/dist/providers/railway/railwayProject/cli.js +6 -14
- package/data/packages/deploy/dist/providers/railway/railwayService/database.js +88 -0
- package/data/packages/deploy/dist/providers/railway/railwayService/deployment.js +12 -25
- package/data/packages/deploy/dist/providers/railway/railwayService/nameGenerator.js +5 -4
- package/data/packages/deploy/dist/providers/railway/railwayService/serviceInstance.js +48 -0
- package/data/packages/deploy/dist/providers/railway/railwayService/url.js +9 -30
- package/data/packages/deploy/package-lock.json +2 -2
- package/data/packages/deploy/package.json +1 -1
- package/data/packages/prisma/package-lock.json +2 -2
- package/data/packages/prisma/package.json +1 -1
- package/data/packages/spec/dist/__tests__/spec/mapApp.unit.test.js +19 -15
- package/data/packages/spec/dist/__tests__/spec/tsAppSpec.test-d.js +6 -0
- package/data/packages/spec/dist/src/appSpec.d.ts +15 -2
- package/data/packages/spec/dist/src/appSpec.d.ts.map +1 -1
- package/data/packages/spec/dist/src/spec/mapper/app.d.ts +1 -0
- package/data/packages/spec/dist/src/spec/mapper/app.d.ts.map +1 -1
- package/data/packages/spec/dist/src/spec/mapper/app.js +8 -2
- package/data/packages/spec/dist/src/spec/mapper/context.js +4 -4
- package/data/packages/spec/dist/src/spec/mapper/specElements.js +9 -9
- package/data/packages/spec/dist/src/spec/publicApi/constructors.d.ts +11 -11
- package/data/packages/spec/dist/src/spec/publicApi/constructors.js +11 -11
- package/data/packages/spec/dist/src/spec/publicApi/register.d.ts +1 -1
- package/data/packages/spec/dist/src/spec/publicApi/waspSpec.d.ts +58 -38
- package/data/packages/spec/dist/src/spec/publicApi/waspSpec.d.ts.map +1 -1
- package/data/packages/spec/package-lock.json +2 -2
- package/data/packages/spec/package.json +1 -1
- package/data/packages/studio/package-lock.json +15 -23
- package/data/packages/studio/package.json +2 -2
- package/package.json +1 -1
- package/wasp-bin +0 -0
- package/data/Generator/libs/auth/wasp.sh-lib-auth-0.25.0.tgz +0 -0
- package/data/Generator/templates/sdk/wasp/api/events.ts +0 -11
- package/data/Generator/templates/sdk/wasp/auth/email/index.ts +0 -5
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.module.css +0 -99
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Form.tsx +0 -74
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.module.css +0 -22
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/Message.tsx +0 -34
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/auth-styles.css +0 -30
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.module.css +0 -33
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialButton.tsx +0 -14
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.module.css +0 -4
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/social/SocialIcons.tsx +0 -85
- package/data/Generator/templates/sdk/wasp/auth/forms/internal/util.ts +0 -16
- package/data/Generator/templates/sdk/wasp/auth/helpers/user.ts +0 -15
- package/data/Generator/templates/sdk/wasp/auth/responseSchemas.ts +0 -10
- package/data/Generator/templates/sdk/wasp/auth/types.ts +0 -2
- package/data/Generator/templates/sdk/wasp/auth/username/index.ts +0 -2
- package/data/Generator/templates/sdk/wasp/client/app/components/DefaultRootErrorBoundary.tsx +0 -16
- package/data/Generator/templates/sdk/wasp/client/app/components/FullPageWrapper.tsx +0 -21
- package/data/Generator/templates/sdk/wasp/client/app/components/Loader.module.css +0 -37
- package/data/Generator/templates/sdk/wasp/client/app/components/Loader.tsx +0 -12
- package/data/Generator/templates/sdk/wasp/client/app/components/Message.tsx +0 -86
- package/data/Generator/templates/sdk/wasp/client/crud/operationsHelpers.ts +0 -21
- package/data/Generator/templates/sdk/wasp/client/hooks.ts +0 -19
- package/data/Generator/templates/sdk/wasp/client/operations/hooks.ts +0 -347
- package/data/Generator/templates/sdk/wasp/client/operations/internal/resources.js +0 -85
- package/data/Generator/templates/sdk/wasp/client/operations/internal/updateHandlersMap.js +0 -37
- package/data/Generator/templates/sdk/wasp/client/operations/queryClient.ts +0 -34
- package/data/Generator/templates/sdk/wasp/client/operations/rpc.ts +0 -96
- package/data/Generator/templates/sdk/wasp/client/router/linkHelpers.ts +0 -48
- package/data/Generator/templates/sdk/wasp/client/router/types.ts +0 -98
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/detectServerImports.ts +0 -50
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/envFile.ts +0 -112
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/typescriptCheck.ts +0 -36
- package/data/Generator/templates/sdk/wasp/client/vite/plugins/validateEnv.ts +0 -88
- package/data/Generator/templates/sdk/wasp/client/vite/virtual-files/resolver.ts +0 -35
- package/data/Generator/templates/sdk/wasp/core/serialization/custom-register.ts +0 -21
- package/data/Generator/templates/sdk/wasp/core/storage.ts +0 -73
- package/data/Generator/templates/sdk/wasp/env/validation.ts +0 -44
- package/data/Generator/templates/sdk/wasp/server/HttpError.ts +0 -30
- package/data/Generator/templates/sdk/wasp/server/auth/oauth/provider.ts +0 -20
- package/data/Generator/templates/sdk/wasp/server/auth/user.ts +0 -154
- package/data/Generator/templates/sdk/wasp/server/auth/username.ts +0 -1
- package/data/Generator/templates/sdk/wasp/server/jobs/core/job.ts +0 -28
- package/data/Generator/templates/sdk/wasp/server/middleware/globalMiddleware.ts +0 -8
- package/data/Generator/templates/sdk/wasp/universal/ansiColors.ts +0 -58
- package/data/Generator/templates/sdk/wasp/universal/predicates.ts +0 -3
- package/data/Generator/templates/sdk/wasp/universal/types.ts +0 -74
- package/data/Generator/templates/sdk/wasp/universal/url.ts +0 -9
- package/data/Generator/templates/sdk/wasp/universal/validators.ts +0 -21
- package/data/packages/ts-inspect/dist/exports.js +0 -82
- package/data/packages/ts-inspect/dist/index.js +0 -28
- package/data/packages/ts-inspect/package-lock.json +0 -4724
- package/data/packages/ts-inspect/package.json +0 -31
- /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
|
-
|
|
7
|
-
|
|
8
|
-
type
|
|
9
|
-
|
|
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 {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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:
|
|
64
|
-
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
|
|
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
|
import { getSessionAndUserFromBearerToken } from '../auth/session.js'
|
|
2
|
-
import { createInvalidCredentialsError } from '
|
|
3
|
-
import { defineHandler } from '../
|
|
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,
|
|
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
|
|
14
|
+
import type { Payload, SuperJSONObject } from "../../core/serialization/index";
|
|
15
15
|
import type {
|
|
16
16
|
{= crud.entityUpper =},
|
|
17
|
-
} from "
|
|
18
|
-
{
|
|
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
|
|
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
|
-
|
|
57
|
+
|
|
82
58
|
type GetInput = SuperJSONObject & Prisma.{= crud.entityUpper =}WhereUniqueInput
|
|
83
59
|
type GetOutput = _WaspEntity | null
|
|
84
|
-
export type
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
83
|
+
|
|
126
84
|
type DeleteInput = SuperJSONObject & Prisma.{= crud.entityUpper =}WhereUniqueInput
|
|
127
85
|
type DeleteOutput = _WaspEntity
|
|
128
|
-
export type
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
14
|
+
{=# prismaSetupFn.isDefined =}
|
|
15
|
+
const dbClient: PrismaClient = {= prismaSetupFn.importIdentifier =}();
|
|
9
16
|
{=/ prismaSetupFn.isDefined =}
|
|
10
17
|
{=^ prismaSetupFn.isDefined =}
|
|
11
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
8
|
+
email: {=& defaultFromField.email =},
|
|
26
9
|
{=# defaultFromField.isNameDefined =}
|
|
27
|
-
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 "
|
|
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
|
|
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
|
|
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
|
-
|
|
3
|
-
export type EmailProvider
|
|
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,17 +1,25 @@
|
|
|
1
1
|
{{={= =}=}}
|
|
2
2
|
import * as z from "zod"
|
|
3
|
-
|
|
4
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|