🧑💻 Improve env variables type safety and management (#718)
Closes #679
This commit is contained in:
@@ -10,7 +10,7 @@ import {
|
||||
import { CodeEditor } from '@/components/inputs/CodeEditor'
|
||||
import { SendEmailOptions, Variable } from '@typebot.io/schemas'
|
||||
import React from 'react'
|
||||
import { env, isNotEmpty } from '@typebot.io/lib'
|
||||
import { isNotEmpty } from '@typebot.io/lib'
|
||||
import { SmtpConfigModal } from './SmtpConfigModal'
|
||||
import { SwitchWithLabel } from '@/components/inputs/SwitchWithLabel'
|
||||
import { VariableSearchInput } from '@/components/inputs/VariableSearchInput'
|
||||
@@ -18,6 +18,7 @@ import { CredentialsDropdown } from '@/features/credentials/components/Credentia
|
||||
import { TextInput, Textarea } from '@/components/inputs'
|
||||
import { useWorkspace } from '@/features/workspace/WorkspaceProvider'
|
||||
import { MoreInfoTooltip } from '@/components/MoreInfoTooltip'
|
||||
import { env } from '@typebot.io/env'
|
||||
|
||||
type Props = {
|
||||
options: SendEmailOptions
|
||||
@@ -117,9 +118,9 @@ export const SendEmailSettings = ({ options, onOptionsChange }: Props) => {
|
||||
currentCredentialsId={options.credentialsId}
|
||||
onCredentialsSelect={handleCredentialsSelect}
|
||||
onCreateNewClick={onOpen}
|
||||
defaultCredentialLabel={env('SMTP_FROM')
|
||||
?.match(/<(.*)>/)
|
||||
?.pop()}
|
||||
defaultCredentialLabel={env.NEXT_PUBLIC_SMTP_FROM?.match(
|
||||
/<(.*)>/
|
||||
)?.pop()}
|
||||
/>
|
||||
)}
|
||||
</Stack>
|
||||
|
||||
@@ -2,17 +2,18 @@ import test, { expect } from '@playwright/test'
|
||||
import { importTypebotInDatabase } from '@typebot.io/lib/playwright/databaseActions'
|
||||
import { createId } from '@paralleldrive/cuid2'
|
||||
import { getTestAsset } from '@/test/utils/playwright'
|
||||
import { env } from '@typebot.io/env'
|
||||
|
||||
const typebotId = createId()
|
||||
|
||||
test.describe('Send email block', () => {
|
||||
test('its configuration should work', async ({ page }) => {
|
||||
if (
|
||||
!process.env.SMTP_USERNAME ||
|
||||
!process.env.SMTP_PORT ||
|
||||
!process.env.SMTP_HOST ||
|
||||
!process.env.SMTP_PASSWORD ||
|
||||
!process.env.NEXT_PUBLIC_SMTP_FROM
|
||||
!env.SMTP_USERNAME ||
|
||||
!env.SMTP_PORT ||
|
||||
!env.SMTP_HOST ||
|
||||
!env.SMTP_PASSWORD ||
|
||||
!env.NEXT_PUBLIC_SMTP_FROM
|
||||
)
|
||||
throw new Error('SMTP_ env vars are missing')
|
||||
await importTypebotInDatabase(
|
||||
@@ -30,21 +31,18 @@ test.describe('Send email block', () => {
|
||||
await expect(createButton).toBeDisabled()
|
||||
await page.fill(
|
||||
'[placeholder="notifications@provider.com"]',
|
||||
process.env.SMTP_USERNAME
|
||||
env.SMTP_USERNAME
|
||||
)
|
||||
await page.fill('[placeholder="John Smith"]', 'John Smith')
|
||||
await page.fill('[placeholder="mail.provider.com"]', process.env.SMTP_HOST)
|
||||
await page.fill(
|
||||
'[placeholder="user@provider.com"]',
|
||||
process.env.SMTP_USERNAME
|
||||
)
|
||||
await page.fill('[type="password"]', process.env.SMTP_PASSWORD)
|
||||
await page.fill('input[role="spinbutton"]', process.env.SMTP_PORT)
|
||||
await page.fill('[placeholder="mail.provider.com"]', env.SMTP_HOST)
|
||||
await page.fill('[placeholder="user@provider.com"]', env.SMTP_USERNAME)
|
||||
await page.fill('[type="password"]', env.SMTP_PASSWORD)
|
||||
await page.fill('input[role="spinbutton"]', env.SMTP_PORT.toString())
|
||||
await expect(createButton).toBeEnabled()
|
||||
await createButton.click()
|
||||
|
||||
await expect(
|
||||
page.locator(`button >> text=${process.env.SMTP_USERNAME}`)
|
||||
page.locator(`button >> text=${env.SMTP_USERNAME}`)
|
||||
).toBeVisible()
|
||||
|
||||
await page.fill(
|
||||
|
||||
Reference in New Issue
Block a user