From 7d57e8dd065c01b90c4eb03ccfdbc3b73da85c23 Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 20 Sep 2023 15:26:52 +0200 Subject: [PATCH] :recycle: Export bot-engine code into its own package --- .gitignore | 1 + apps/builder/package.json | 6 +- .../analytics/api/getTotalAnswersInBlocks.ts | 2 +- .../auth/helpers/getAuthenticatedUser.ts | 2 +- .../billing/api/createCheckoutSession.ts | 2 +- .../api/createCustomCheckoutSession.ts | 2 +- .../billing/api/getBillingPortalUrl.ts | 2 +- .../features/billing/api/getSubscription.ts | 2 +- .../src/features/billing/api/getUsage.ts | 2 +- .../src/features/billing/api/listInvoices.ts | 2 +- .../billing/api/updateSubscription.ts | 2 +- .../src/features/billing/billing.spec.ts | 15 -- .../inputs/fileUpload/fileUpload.spec.ts | 1 - .../integrations/openai/api/listModels.ts | 2 +- .../webhook/api/getResultExample.ts | 2 +- .../webhook/api/listWebhookBlocks.ts | 2 +- .../webhook/api/subscribeWebhook.ts | 2 +- .../webhook/api/unsubscribeWebhook.ts | 2 +- .../zemanticAi/api/listProjects.ts | 2 +- .../typebotLink/api/getLinkedTypebots.ts | 2 +- .../helpers/fetchLinkedTypebots.ts | 2 +- .../collaboration/api/getCollaborators.ts | 2 +- .../collaboration/collaboration.spec.ts | 2 +- .../credentials/api/createCredentials.ts | 2 +- .../credentials/api/deleteCredentials.ts | 2 +- .../credentials/api/listCredentials.ts | 2 +- .../customDomains/api/createCustomDomain.ts | 2 +- .../customDomains/api/deleteCustomDomain.ts | 2 +- .../customDomains/api/listCustomDomains.ts | 2 +- .../customDomains/api/verifyCustomDomain.ts | 2 +- .../src/features/results/api/deleteResults.ts | 2 +- .../src/features/results/api/getResult.ts | 2 +- .../src/features/results/api/getResultLogs.ts | 2 +- .../src/features/results/api/getResults.ts | 2 +- .../features/theme/api/deleteThemeTemplate.ts | 2 +- .../features/theme/api/listThemeTemplates.ts | 2 +- .../features/theme/api/saveThemeTemplate.ts | 2 +- .../src/features/typebot/api/createTypebot.ts | 2 +- .../src/features/typebot/api/deleteTypebot.ts | 2 +- .../typebot/api/getPublishedTypebot.ts | 2 +- .../src/features/typebot/api/getTypebot.ts | 2 +- .../src/features/typebot/api/listTypebots.ts | 2 +- .../features/typebot/api/publishTypebot.ts | 2 +- .../features/typebot/api/unpublishTypebot.ts | 2 +- .../src/features/typebot/api/updateTypebot.ts | 2 +- .../typebot/helpers/isReadTypebotForbidden.ts | 2 +- .../helpers/isWriteTypebotForbidden.ts | 2 +- .../features/typebot/helpers/sanitizers.ts | 2 +- .../features/upload/api/generateUploadUrl.ts | 2 +- .../whatsapp/generateVerificationToken.ts | 2 +- .../src/features/whatsapp/getPhoneNumber.ts | 2 +- .../features/whatsapp/getSystemTokenInfo.ts | 2 +- .../whatsapp/receiveMessagePreview.ts | 2 +- .../features/whatsapp/startWhatsAppPreview.ts | 12 +- .../whatsapp/verifyIfPhoneNumberAvailable.ts | 2 +- .../features/workspace/api/createWorkspace.ts | 2 +- .../features/workspace/api/deleteWorkspace.ts | 2 +- .../features/workspace/api/getWorkspace.ts | 2 +- .../api/listInvitationsInWorkspace.ts | 2 +- .../workspace/api/listMembersInWorkspace.ts | 2 +- .../features/workspace/api/listWorkspaces.ts | 2 +- .../features/workspace/api/updateWorkspace.ts | 2 +- apps/builder/src/helpers/databaseRules.ts | 2 +- apps/builder/src/lib/googleSheets.ts | 2 +- apps/builder/src/lib/prisma.ts | 22 -- .../src/pages/api/auth/[...nextauth].ts | 2 +- apps/builder/src/pages/api/credentials.ts | 2 +- .../pages/api/credentials/[credentialsId].ts | 2 +- .../api/credentials/google-sheets/callback.ts | 2 +- .../src/pages/api/customDomains/[domain].ts | 2 +- apps/builder/src/pages/api/folders.ts | 2 +- apps/builder/src/pages/api/folders/[id].ts | 2 +- .../src/pages/api/publicIdAvailable.ts | 2 +- apps/builder/src/pages/api/publicTypebots.ts | 2 +- .../src/pages/api/publicTypebots/[id].ts | 2 +- apps/builder/src/pages/api/stripe/webhook.ts | 2 +- .../typebots/[typebotId]/analytics/stats.ts | 2 +- .../pages/api/typebots/[typebotId]/blocks.ts | 2 +- .../api/typebots/[typebotId]/collaborators.ts | 2 +- .../[typebotId]/collaborators/[userId].ts | 2 +- .../api/typebots/[typebotId]/invitations.ts | 2 +- .../[typebotId]/invitations/[email].ts | 2 +- apps/builder/src/pages/api/users/[userId].ts | 2 +- .../pages/api/users/[userId]/api-tokens.ts | 2 +- .../users/[userId]/api-tokens/[tokenId].ts | 2 +- .../workspaces/[workspaceId]/invitations.ts | 2 +- .../[workspaceId]/invitations/[id].ts | 2 +- .../api/workspaces/[workspaceId]/members.ts | 2 +- .../workspaces/[workspaceId]/members/[id].ts | 2 +- apps/builder/tsconfig.json | 2 +- apps/docs/openapi/builder/_spec_.json | 26 +- apps/docs/openapi/chat/_spec_.json | 26 +- apps/viewer/package.json | 12 +- .../helpers/getAuthenticatedGoogleDoc.ts | 24 -- .../logic/typebotLink/fetchLinkedTypebots.ts | 34 --- .../src/features/chat/api/sendMessage.ts | 12 +- .../chat/api/updateTypebotInSession.ts | 4 +- .../fileUpload/api/deprecated/getUploadUrl.ts | 2 +- .../fileUpload/api/generateUploadUrl.ts | 2 +- .../api/receiveMessage.ts | 2 +- .../{whatsApp => whatsapp}/api/router.ts | 0 .../api/subscribeWebhook.ts | 2 +- apps/viewer/src/helpers/api/dbRules.ts | 58 ----- apps/viewer/src/helpers/api/isVercel.ts | 3 - apps/viewer/src/helpers/authenticateUser.ts | 2 +- apps/viewer/src/helpers/server/context.ts | 2 +- .../src/helpers/server/routers/v1/_app.ts | 6 +- apps/viewer/src/lib/google-sheets.ts | 2 +- apps/viewer/src/pages/[[...publicId]].tsx | 2 +- .../[spreadsheetId]/sheets/[sheetId].ts | 4 +- .../pages/api/integrations/openai/streamer.ts | 2 +- .../stripe/createPaymentIntent.ts | 4 +- .../pages/api/publicTypebots/[typebotId].ts | 2 +- apps/viewer/src/pages/api/typebots.ts | 2 +- .../blocks/[blockId]/executeWebhook.ts | 18 +- .../[typebotId]/integrations/email.tsx | 6 +- .../pages/api/typebots/[typebotId]/results.ts | 2 +- .../[typebotId]/results/[resultId].ts | 2 +- .../[typebotId]/results/[resultId]/answers.ts | 2 +- .../api/typebots/[typebotId]/webhookBlocks.ts | 2 +- .../api/typebots/[typebotId]/webhookSteps.ts | 2 +- apps/viewer/src/pages/old/[[...publicId]].tsx | 2 +- .../src/{features/chat => test}/chat.spec.ts | 2 +- .../chatwoot => test}/chatwoot.spec.ts | 0 .../fileUpload => test}/fileUpload.spec.ts | 0 .../results => test}/results.spec.ts | 0 .../sendEmail => test}/sendEmail.spec.ts | 2 +- .../settings => test}/settings.spec.ts | 0 .../typebotLink => test}/typebotLink.spec.ts | 0 .../variables => test}/variables.spec.ts | 0 .../webhook => test}/webhook.spec.ts | 0 apps/viewer/src/trpc/generateOpenApi.ts | 15 ++ .../bot-engine}/addEdgeToTypebot.ts | 0 .../inputs/buttons/filterChoiceItems.ts | 0 ...injectVariableValuesInButtonsInputBlock.ts | 8 +- .../inputs/buttons/parseButtonsReply.ts | 2 +- .../blocks/inputs/date/parseDateInput.ts | 6 +- .../blocks/inputs/date/parseDateReply.ts | 2 +- .../blocks/inputs/email/validateEmail.ts | 0 .../blocks/inputs/number/validateNumber.ts | 0 .../computePaymentInputRuntimeOptions.ts | 4 +- .../blocks/inputs/phone/formatPhoneNumber.ts | 0 .../pictureChoice/filterPictureChoiceItems.ts | 0 ...njectVariableValuesInPictureChoiceBlock.ts | 2 +- .../pictureChoice/parsePictureChoicesReply.ts | 2 +- .../inputs/rating/validateRatingReply.ts | 0 .../blocks/inputs/url/validateUrl.ts | 0 .../chatwoot/executeChatwootBlock.ts | 8 +- .../executeGoogleAnalyticsBlock.ts | 4 +- .../googleSheets/executeGoogleSheetBlock.ts | 2 +- .../integrations/googleSheets/getRow.ts | 8 +- .../helpers/getAuthenticatedGoogleDoc.ts | 75 ++++++ .../googleSheets/helpers/matchFilter.ts | 0 .../googleSheets/helpers/parseCellValues.ts | 2 +- .../integrations/googleSheets/insertRow.ts | 2 +- .../integrations/googleSheets/updateRow.ts | 4 +- .../openai/createChatCompletionOpenAI.ts | 14 +- .../executeChatCompletionOpenAIRequest.ts | 0 .../integrations/openai/executeOpenAIBlock.ts | 2 +- .../openai/getChatCompletionStream.ts | 2 +- .../openai/parseChatCompletionMessages.ts | 4 +- .../openai/resumeChatCompletion.ts | 4 +- .../integrations/pixel/executePixelBlock.ts | 4 +- .../integrations/sendEmail/constants.ts | 0 .../sendEmail/executeSendEmailBlock.tsx | 9 +- .../webhook/executeWebhookBlock.ts | 6 +- .../integrations/webhook/parseSampleResult.ts | 0 .../webhook/resumeWebhookExecution.ts | 8 +- .../zemanticAi/executeZemanticAiBlock.ts | 10 +- .../blocks/logic/abTest/executeAbTest.ts | 2 +- .../logic/condition/executeCondition.ts | 4 +- .../logic/condition/executeConditionBlock.ts | 2 +- .../blocks/logic/jump/executeJumpBlock.ts | 7 +- .../blocks/logic/redirect/executeRedirect.ts | 4 +- .../blocks/logic/script/executeScript.ts | 8 +- .../logic/setVariable/executeSetVariable.ts | 10 +- .../logic/typebotLink/executeTypebotLink.ts | 11 +- .../logic/typebotLink/fetchLinkedTypebots.ts | 45 ++++ .../getPreviouslyLinkedTypebots.ts | 0 .../blocks/logic/wait/executeWait.ts | 4 +- .../computeTypingDuration.ts | 0 .../bot-engine}/continueBotFlow.ts | 32 +-- .../bot-engine}/executeGroup.ts | 12 +- .../bot-engine}/executeIntegration.ts | 18 +- .../bot-engine}/executeLogic.ts | 18 +- .../bot-engine}/getNextGroup.ts | 5 +- .../bot-engine}/getPrefilledValue.ts | 0 .../logs/helpers/formatLogDetails.ts | 0 .../bot-engine}/logs/saveErrorLog.ts | 0 .../bot-engine}/logs/saveLog.ts | 2 +- .../bot-engine}/logs/saveSuccessLog.ts | 0 packages/bot-engine/package.json | 38 +++ .../bot-engine}/parseDynamicTheme.ts | 2 +- .../queries/createResultIfNotExist.ts | 2 +- .../bot-engine}/queries/createSession.ts | 2 +- .../bot-engine}/queries/deleteSession.ts | 2 +- .../bot-engine}/queries/findPublicTypebot.ts | 2 +- .../bot-engine}/queries/findResult.ts | 2 +- .../bot-engine}/queries/findTypebot.ts | 2 +- .../bot-engine}/queries/getSession.ts | 2 +- .../bot-engine}/queries/restartSession.ts | 2 +- .../bot-engine}/queries/saveLogs.ts | 2 +- .../bot-engine}/queries/updateSession.ts | 2 +- .../bot-engine}/queries/upsertAnswer.ts | 2 +- .../bot-engine}/queries/upsertResult.ts | 2 +- .../bot-engine}/saveStateToDatabase.ts | 12 +- .../bot-engine}/startBotFlow.ts | 0 .../bot-engine}/startSession.ts | 16 +- packages/bot-engine/tsconfig.json | 9 + .../chat => packages/bot-engine}/types.ts | 0 .../variables/deepParseVariables.ts | 0 .../variables/extractVariablesFromText.ts | 0 .../variables/findUniqueVariableValue.ts | 0 .../bot-engine}/variables/hasVariable.ts | 0 .../injectVariablesFromExistingResult.ts | 0 .../variables/parseGuessedTypeFromString.ts | 0 .../variables/parseGuessedValueType.ts | 0 .../variables/parseVariableNumber.ts | 0 .../bot-engine}/variables/parseVariables.ts | 4 +- .../bot-engine}/variables/prefillVariables.ts | 2 +- .../variables/transformVariablesToList.ts | 2 +- .../variables/updateVariablesInSession.ts | 4 +- .../convertInputToWhatsAppMessage.ts | 2 +- .../convertMessageToWhatsAppMessage.ts | 2 +- .../convertRichTextToWhatsAppText.ts | 0 .../bot-engine/whatsapp}/downloadMedia.ts | 0 .../whatsapp}/resumeWhatsAppFlow.ts | 16 +- .../whatsapp}/sendChatReplyToWhatsApp.ts | 2 +- .../whatsapp}/sendWhatsAppMessage.ts | 0 .../whatsapp}/startWhatsAppSession.ts | 6 +- packages/emails/src/index.ts | 1 + packages/embeds/js/package.json | 3 +- .../textBubble/components/TextBubble.tsx | 2 +- packages/embeds/js/tsconfig.json | 1 + .../api => packages/lib}/isPlanetScale.ts | 0 packages/lib/package.json | 1 + {apps/viewer/src => packages}/lib/prisma.ts | 0 packages/lib/tsconfig.json | 2 +- packages/prisma/tsconfig.json | 5 +- packages/tsconfig/base.json | 7 +- packages/tsconfig/nextjs.json | 3 - pnpm-lock.yaml | 225 ++++++++---------- 242 files changed, 645 insertions(+), 639 deletions(-) delete mode 100644 apps/builder/src/lib/prisma.ts delete mode 100644 apps/viewer/src/features/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts delete mode 100644 apps/viewer/src/features/blocks/logic/typebotLink/fetchLinkedTypebots.ts rename apps/viewer/src/features/{blocks/inputs => }/fileUpload/api/deprecated/getUploadUrl.ts (98%) rename apps/viewer/src/features/{blocks/inputs => }/fileUpload/api/generateUploadUrl.ts (98%) rename apps/viewer/src/features/{whatsApp => whatsapp}/api/receiveMessage.ts (93%) rename apps/viewer/src/features/{whatsApp => whatsapp}/api/router.ts (100%) rename apps/viewer/src/features/{whatsApp => whatsapp}/api/subscribeWebhook.ts (96%) delete mode 100644 apps/viewer/src/helpers/api/dbRules.ts delete mode 100644 apps/viewer/src/helpers/api/isVercel.ts rename apps/viewer/src/{features/chat => test}/chat.spec.ts (99%) rename apps/viewer/src/{features/blocks/integrations/chatwoot => test}/chatwoot.spec.ts (100%) rename apps/viewer/src/{features/blocks/inputs/fileUpload => test}/fileUpload.spec.ts (100%) rename apps/viewer/src/{features/results => test}/results.spec.ts (100%) rename apps/viewer/src/{features/blocks/integrations/sendEmail => test}/sendEmail.spec.ts (94%) rename apps/viewer/src/{features/settings => test}/settings.spec.ts (100%) rename apps/viewer/src/{features/blocks/logic/typebotLink => test}/typebotLink.spec.ts (100%) rename apps/viewer/src/{features/variables => test}/variables.spec.ts (100%) rename apps/viewer/src/{features/blocks/integrations/webhook => test}/webhook.spec.ts (100%) create mode 100644 apps/viewer/src/trpc/generateOpenApi.ts rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/addEdgeToTypebot.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/buttons/filterChoiceItems.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts (82%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/buttons/parseButtonsReply.ts (98%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/date/parseDateInput.ts (84%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/date/parseDateReply.ts (96%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/email/validateEmail.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/number/validateNumber.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts (96%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/phone/formatPhoneNumber.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/pictureChoice/filterPictureChoiceItems.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts (96%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts (98%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/rating/validateRatingReply.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/inputs/url/validateUrl.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/chatwoot/executeChatwootBlock.ts (91%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts (81%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts (93%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleSheets/getRow.ts (90%) create mode 100644 packages/bot-engine/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleSheets/helpers/matchFilter.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleSheets/helpers/parseCellValues.ts (84%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleSheets/insertRow.ts (94%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/googleSheets/updateRow.ts (93%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/openai/createChatCompletionOpenAI.ts (91%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/openai/executeOpenAIBlock.ts (90%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/openai/getChatCompletionStream.ts (96%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/openai/parseChatCompletionMessages.ts (95%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/openai/resumeChatCompletion.ts (90%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/pixel/executePixelBlock.ts (83%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/sendEmail/constants.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/sendEmail/executeSendEmailBlock.tsx (96%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/webhook/executeWebhookBlock.ts (97%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/webhook/parseSampleResult.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/webhook/resumeWebhookExecution.ts (87%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts (90%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/abTest/executeAbTest.ts (89%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/condition/executeCondition.ts (97%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/condition/executeConditionBlock.ts (89%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/jump/executeJumpBlock.ts (85%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/redirect/executeRedirect.ts (82%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/script/executeScript.ts (77%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/setVariable/executeSetVariable.ts (91%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/typebotLink/executeTypebotLink.ts (95%) create mode 100644 packages/bot-engine/blocks/logic/typebotLink/fetchLinkedTypebots.ts rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/typebotLink/getPreviouslyLinkedTypebots.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/blocks/logic/wait/executeWait.ts (86%) rename packages/{lib => bot-engine}/computeTypingDuration.ts (100%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/continueBotFlow.ts (89%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/executeGroup.ts (92%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/executeIntegration.ts (56%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/executeLogic.ts (55%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/getNextGroup.ts (95%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/getPrefilledValue.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/logs/helpers/formatLogDetails.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/logs/saveErrorLog.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/logs/saveLog.ts (91%) rename {apps/viewer/src/features => packages/bot-engine}/logs/saveSuccessLog.ts (100%) create mode 100644 packages/bot-engine/package.json rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/parseDynamicTheme.ts (87%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/createResultIfNotExist.ts (94%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/createSession.ts (84%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/deleteSession.ts (72%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/findPublicTypebot.ts (94%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/findResult.ts (92%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/findTypebot.ts (89%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/getSession.ts (90%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/restartSession.ts (89%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/saveLogs.ts (77%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/updateSession.ts (85%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/upsertAnswer.ts (95%) rename {apps/viewer/src/features/chat => packages/bot-engine}/queries/upsertResult.ts (95%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/saveStateToDatabase.ts (79%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/startBotFlow.ts (100%) rename {apps/viewer/src/features/chat/helpers => packages/bot-engine}/startSession.ts (96%) create mode 100644 packages/bot-engine/tsconfig.json rename {apps/viewer/src/features/chat => packages/bot-engine}/types.ts (100%) rename apps/viewer/src/features/variables/deepParseVariable.ts => packages/bot-engine/variables/deepParseVariables.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/extractVariablesFromText.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/findUniqueVariableValue.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/hasVariable.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/injectVariablesFromExistingResult.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/parseGuessedTypeFromString.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/parseGuessedValueType.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/parseVariableNumber.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/parseVariables.ts (97%) rename {apps/viewer/src/features => packages/bot-engine}/variables/prefillVariables.ts (100%) rename {apps/viewer/src/features => packages/bot-engine}/variables/transformVariablesToList.ts (92%) rename apps/viewer/src/features/variables/updateVariables.ts => packages/bot-engine/variables/updateVariablesInSession.ts (96%) rename packages/{lib/whatsApp => bot-engine/whatsapp}/convertInputToWhatsAppMessage.ts (98%) rename packages/{lib/whatsApp => bot-engine/whatsapp}/convertMessageToWhatsAppMessage.ts (97%) rename packages/{lib/whatsApp => bot-engine/whatsapp}/convertRichTextToWhatsAppText.ts (100%) rename {apps/viewer/src/features/whatsApp/helpers => packages/bot-engine/whatsapp}/downloadMedia.ts (100%) rename {apps/viewer/src/features/whatsApp/helpers => packages/bot-engine/whatsapp}/resumeWhatsAppFlow.ts (93%) rename packages/{lib/whatsApp => bot-engine/whatsapp}/sendChatReplyToWhatsApp.ts (98%) rename packages/{lib/whatsApp => bot-engine/whatsapp}/sendWhatsAppMessage.ts (100%) rename {apps/viewer/src/features/whatsApp/helpers => packages/bot-engine/whatsapp}/startWhatsAppSession.ts (97%) rename {apps/viewer/src/helpers/api => packages/lib}/isPlanetScale.ts (100%) rename {apps/viewer/src => packages}/lib/prisma.ts (100%) diff --git a/.gitignore b/.gitignore index e169eaef5..cb66c1c86 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ dump.sql dump.tar __env.js +__ENV.js typebotsToFix.json **/scripts/logs diff --git a/apps/builder/package.json b/apps/builder/package.json index e3c0fdcf7..865584da9 100644 --- a/apps/builder/package.json +++ b/apps/builder/package.json @@ -27,8 +27,6 @@ "@googleapis/drive": "8.0.0", "@paralleldrive/cuid2": "2.2.1", "@sentry/nextjs": "7.66.0", - "@stripe/stripe-js": "1.54.1", - "@t3-oss/env-nextjs": "^0.6.0", "@tanstack/react-query": "^4.29.19", "@tanstack/react-table": "8.9.3", "@trpc/client": "10.34.0", @@ -42,7 +40,6 @@ "@udecode/plate-common": "^21.1.5", "@udecode/plate-core": "21.1.5", "@udecode/plate-link": "21.2.0", - "@udecode/plate-serializer-html": "21.1.5", "@udecode/plate-ui-link": "21.2.0", "@udecode/plate-ui-toolbar": "21.1.5", "@uiw/codemirror-extensions-langs": "^4.21.7", @@ -85,7 +82,6 @@ "sharp": "^0.32.4", "slate": "0.94.1", "slate-history": "0.93.0", - "slate-hyperscript": "0.77.0", "slate-react": "0.94.2", "stripe": "12.13.0", "svg-round-corners": "0.4.1", @@ -94,7 +90,7 @@ "trpc-openapi": "1.2.0", "unsplash-js": "^7.0.18", "use-debounce": "9.0.4", - "@typebot.io/viewer": "workspace:*" + "@typebot.io/bot-engine": "workspace:*" }, "devDependencies": { "@chakra-ui/styled-system": "2.9.1", diff --git a/apps/builder/src/features/analytics/api/getTotalAnswersInBlocks.ts b/apps/builder/src/features/analytics/api/getTotalAnswersInBlocks.ts index 5b3df8c70..837336d01 100644 --- a/apps/builder/src/features/analytics/api/getTotalAnswersInBlocks.ts +++ b/apps/builder/src/features/analytics/api/getTotalAnswersInBlocks.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { PublicTypebot } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/auth/helpers/getAuthenticatedUser.ts b/apps/builder/src/features/auth/helpers/getAuthenticatedUser.ts index 99e48c704..593d0456a 100644 --- a/apps/builder/src/features/auth/helpers/getAuthenticatedUser.ts +++ b/apps/builder/src/features/auth/helpers/getAuthenticatedUser.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authOptions } from '@/pages/api/auth/[...nextauth]' import { setUser } from '@sentry/nextjs' import { User } from '@typebot.io/prisma' diff --git a/apps/builder/src/features/billing/api/createCheckoutSession.ts b/apps/builder/src/features/billing/api/createCheckoutSession.ts index de94a44aa..7b8f9958d 100644 --- a/apps/builder/src/features/billing/api/createCheckoutSession.ts +++ b/apps/builder/src/features/billing/api/createCheckoutSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Plan } from '@typebot.io/prisma' diff --git a/apps/builder/src/features/billing/api/createCustomCheckoutSession.ts b/apps/builder/src/features/billing/api/createCustomCheckoutSession.ts index 449870977..ffbf03b22 100644 --- a/apps/builder/src/features/billing/api/createCustomCheckoutSession.ts +++ b/apps/builder/src/features/billing/api/createCustomCheckoutSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Plan } from '@typebot.io/prisma' diff --git a/apps/builder/src/features/billing/api/getBillingPortalUrl.ts b/apps/builder/src/features/billing/api/getBillingPortalUrl.ts index b79b7a4d5..50b7a1d0c 100644 --- a/apps/builder/src/features/billing/api/getBillingPortalUrl.ts +++ b/apps/builder/src/features/billing/api/getBillingPortalUrl.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import Stripe from 'stripe' diff --git a/apps/builder/src/features/billing/api/getSubscription.ts b/apps/builder/src/features/billing/api/getSubscription.ts index 41ad02d7a..36707c608 100644 --- a/apps/builder/src/features/billing/api/getSubscription.ts +++ b/apps/builder/src/features/billing/api/getSubscription.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import Stripe from 'stripe' diff --git a/apps/builder/src/features/billing/api/getUsage.ts b/apps/builder/src/features/billing/api/getUsage.ts index d62bf370f..0877e35af 100644 --- a/apps/builder/src/features/billing/api/getUsage.ts +++ b/apps/builder/src/features/billing/api/getUsage.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/billing/api/listInvoices.ts b/apps/builder/src/features/billing/api/listInvoices.ts index 8e9ac082b..40f072b2f 100644 --- a/apps/builder/src/features/billing/api/listInvoices.ts +++ b/apps/builder/src/features/billing/api/listInvoices.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import Stripe from 'stripe' diff --git a/apps/builder/src/features/billing/api/updateSubscription.ts b/apps/builder/src/features/billing/api/updateSubscription.ts index 3f8dc575a..26abfad57 100644 --- a/apps/builder/src/features/billing/api/updateSubscription.ts +++ b/apps/builder/src/features/billing/api/updateSubscription.ts @@ -1,5 +1,5 @@ import { sendTelemetryEvents } from '@typebot.io/lib/telemetry/sendTelemetryEvent' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Plan } from '@typebot.io/prisma' diff --git a/apps/builder/src/features/billing/billing.spec.ts b/apps/builder/src/features/billing/billing.spec.ts index 107ef01f9..e04fb1a0e 100644 --- a/apps/builder/src/features/billing/billing.spec.ts +++ b/apps/builder/src/features/billing/billing.spec.ts @@ -51,7 +51,6 @@ test('should display valid usage', async ({ page }) => { await page.click('text=Settings & Members') await page.click('text=Billing & Usage') await expect(page.locator('text="/ 10,000"')).toBeVisible() - await expect(page.locator('text="/ 10 GB"')).toBeVisible() await page.getByText('Members', { exact: true }).click() await expect( page.getByRole('heading', { name: 'Members (1/5)' }) @@ -63,7 +62,6 @@ test('should display valid usage', async ({ page }) => { await page.click('text=Settings & Members') await page.click('text=Billing & Usage') await expect(page.locator('text="/ 100,000"')).toBeVisible() - await expect(page.locator('text="/ 50 GB"')).toBeVisible() await expect(page.getByText('Upgrade to Starter')).toBeHidden() await expect(page.getByText('Upgrade to Pro')).toBeHidden() await expect(page.getByText('Need custom limits?')).toBeHidden() @@ -78,7 +76,6 @@ test('should display valid usage', async ({ page }) => { await page.click('text=Settings & Members') await page.click('text=Billing & Usage') await expect(page.locator('text="/ 200"')).toBeVisible() - await expect(page.locator('text="Storage"')).toBeHidden() await page.getByText('Members', { exact: true }).click() await expect( page.getByRole('heading', { name: 'Members (1/1)' }) @@ -95,17 +92,11 @@ test('should display valid usage', async ({ page }) => { await page.click('text=Settings & Members') await page.click('text=Billing & Usage') await expect(page.locator('text="/ 2,000"')).toBeVisible() - await expect(page.locator('text="/ 2 GB"')).toBeVisible() await expect(page.locator('text="10" >> nth=0')).toBeVisible() await expect(page.locator('[role="progressbar"] >> nth=0')).toHaveAttribute( 'aria-valuenow', '1' ) - await expect(page.locator('text="1.07 GB"')).toBeVisible() - await expect(page.locator('[role="progressbar"] >> nth=1')).toHaveAttribute( - 'aria-valuenow', - '54' - ) await injectFakeResults({ typebotId: usageTypebotId, @@ -116,10 +107,7 @@ test('should display valid usage', async ({ page }) => { await page.click('text="Billing & Usage"') await expect(page.locator('text="/ 2,000"')).toBeVisible() await expect(page.locator('text="1,100"')).toBeVisible() - await expect(page.locator('text="/ 2 GB"')).toBeVisible() - await expect(page.locator('text="2.25 GB"')).toBeVisible() await expect(page.locator('[aria-valuenow="55"]')).toBeVisible() - await expect(page.locator('[aria-valuenow="112"]')).toBeVisible() }) test('plan changes should work', async ({ page }) => { @@ -160,9 +148,7 @@ test('plan changes should work', async ({ page }) => { await page.click('text=Settings & Members') await page.click('text=Billing & Usage') await expect(page.locator('text="/ 2,000"')).toBeVisible() - await expect(page.locator('text="/ 2 GB"')).toBeVisible() await expect(page.getByText('/ 2,000')).toBeVisible() - await expect(page.getByText('/ 2 GB')).toBeVisible() await page.click('button >> text="2,000"') await page.click('button >> text="3,500"') await page.click('button >> text="2"') @@ -178,7 +164,6 @@ test('plan changes should work', async ({ page }) => { await page.click('text="Billing & Usage"') await expect(page.locator('text="$73"')).toBeVisible() await expect(page.locator('text="/ 3,500"')).toBeVisible() - await expect(page.locator('text="/ 4 GB"')).toBeVisible() await expect(page.getByRole('button', { name: '3,500' })).toBeVisible() await expect(page.getByRole('button', { name: '4' })).toBeVisible() diff --git a/apps/builder/src/features/blocks/inputs/fileUpload/fileUpload.spec.ts b/apps/builder/src/features/blocks/inputs/fileUpload/fileUpload.spec.ts index 27a34b5ce..713224819 100644 --- a/apps/builder/src/features/blocks/inputs/fileUpload/fileUpload.spec.ts +++ b/apps/builder/src/features/blocks/inputs/fileUpload/fileUpload.spec.ts @@ -36,7 +36,6 @@ test('options should work', async ({ page }) => { await page.fill('[value="Upload"]', 'Go') await page.fill('[value="Clear"]', 'Reset') await page.fill('[value="Skip"]', 'Pass') - await page.fill('input[value="10"]', '20') await page.click('text="Restart"') await expect(page.locator(`text="Pass"`)).toBeVisible() await expect(page.locator(`text="Upload now!!"`)).toBeVisible() diff --git a/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts b/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts index 9a707d525..9a4a6dc90 100644 --- a/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts +++ b/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/blocks/integrations/webhook/api/getResultExample.ts b/apps/builder/src/features/blocks/integrations/webhook/api/getResultExample.ts index 4496f0197..54cf29b3d 100644 --- a/apps/builder/src/features/blocks/integrations/webhook/api/getResultExample.ts +++ b/apps/builder/src/features/blocks/integrations/webhook/api/getResultExample.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { canReadTypebots } from '@/helpers/databaseRules' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' diff --git a/apps/builder/src/features/blocks/integrations/webhook/api/listWebhookBlocks.ts b/apps/builder/src/features/blocks/integrations/webhook/api/listWebhookBlocks.ts index ea63628d0..15e8264de 100644 --- a/apps/builder/src/features/blocks/integrations/webhook/api/listWebhookBlocks.ts +++ b/apps/builder/src/features/blocks/integrations/webhook/api/listWebhookBlocks.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { canReadTypebots } from '@/helpers/databaseRules' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' diff --git a/apps/builder/src/features/blocks/integrations/webhook/api/subscribeWebhook.ts b/apps/builder/src/features/blocks/integrations/webhook/api/subscribeWebhook.ts index cdffab361..a3cb23388 100644 --- a/apps/builder/src/features/blocks/integrations/webhook/api/subscribeWebhook.ts +++ b/apps/builder/src/features/blocks/integrations/webhook/api/subscribeWebhook.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { canWriteTypebots } from '@/helpers/databaseRules' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' diff --git a/apps/builder/src/features/blocks/integrations/webhook/api/unsubscribeWebhook.ts b/apps/builder/src/features/blocks/integrations/webhook/api/unsubscribeWebhook.ts index 2f4b4a208..3829eb5ff 100644 --- a/apps/builder/src/features/blocks/integrations/webhook/api/unsubscribeWebhook.ts +++ b/apps/builder/src/features/blocks/integrations/webhook/api/unsubscribeWebhook.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { canWriteTypebots } from '@/helpers/databaseRules' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' diff --git a/apps/builder/src/features/blocks/integrations/zemanticAi/api/listProjects.ts b/apps/builder/src/features/blocks/integrations/zemanticAi/api/listProjects.ts index a8c2b33d1..2852acdeb 100644 --- a/apps/builder/src/features/blocks/integrations/zemanticAi/api/listProjects.ts +++ b/apps/builder/src/features/blocks/integrations/zemanticAi/api/listProjects.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/blocks/logic/typebotLink/api/getLinkedTypebots.ts b/apps/builder/src/features/blocks/logic/typebotLink/api/getLinkedTypebots.ts index 9bdfdfa18..d0483ea4c 100644 --- a/apps/builder/src/features/blocks/logic/typebotLink/api/getLinkedTypebots.ts +++ b/apps/builder/src/features/blocks/logic/typebotLink/api/getLinkedTypebots.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { LogicBlockType, typebotSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/blocks/logic/typebotLink/helpers/fetchLinkedTypebots.ts b/apps/builder/src/features/blocks/logic/typebotLink/helpers/fetchLinkedTypebots.ts index 93d393fae..7c3e94f49 100644 --- a/apps/builder/src/features/blocks/logic/typebotLink/helpers/fetchLinkedTypebots.ts +++ b/apps/builder/src/features/blocks/logic/typebotLink/helpers/fetchLinkedTypebots.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { canReadTypebots } from '@/helpers/databaseRules' import { User } from '@typebot.io/prisma' import { LogicBlockType, PublicTypebot, Typebot } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/collaboration/api/getCollaborators.ts b/apps/builder/src/features/collaboration/api/getCollaborators.ts index 9436e57e2..2a7954431 100644 --- a/apps/builder/src/features/collaboration/api/getCollaborators.ts +++ b/apps/builder/src/features/collaboration/api/getCollaborators.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/collaboration/collaboration.spec.ts b/apps/builder/src/features/collaboration/collaboration.spec.ts index cb8c130a3..e5ef1d2cb 100644 --- a/apps/builder/src/features/collaboration/collaboration.spec.ts +++ b/apps/builder/src/features/collaboration/collaboration.spec.ts @@ -1,7 +1,7 @@ import test, { expect } from '@playwright/test' import { createId } from '@paralleldrive/cuid2' import { CollaborationType, Plan, WorkspaceRole } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { InputBlockType, defaultTextInputOptions } from '@typebot.io/schemas' import { createTypebots, diff --git a/apps/builder/src/features/credentials/api/createCredentials.ts b/apps/builder/src/features/credentials/api/createCredentials.ts index b24e5a218..62047d980 100644 --- a/apps/builder/src/features/credentials/api/createCredentials.ts +++ b/apps/builder/src/features/credentials/api/createCredentials.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { stripeCredentialsSchema } from '@typebot.io/schemas/features/blocks/inputs/payment/schemas' diff --git a/apps/builder/src/features/credentials/api/deleteCredentials.ts b/apps/builder/src/features/credentials/api/deleteCredentials.ts index 14bd14ba3..f002906bb 100644 --- a/apps/builder/src/features/credentials/api/deleteCredentials.ts +++ b/apps/builder/src/features/credentials/api/deleteCredentials.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/credentials/api/listCredentials.ts b/apps/builder/src/features/credentials/api/listCredentials.ts index aa2a4c938..e60ff8d64 100644 --- a/apps/builder/src/features/credentials/api/listCredentials.ts +++ b/apps/builder/src/features/credentials/api/listCredentials.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { stripeCredentialsSchema } from '@typebot.io/schemas/features/blocks/inputs/payment/schemas' diff --git a/apps/builder/src/features/customDomains/api/createCustomDomain.ts b/apps/builder/src/features/customDomains/api/createCustomDomain.ts index 7f9d92935..9a1449ab7 100644 --- a/apps/builder/src/features/customDomains/api/createCustomDomain.ts +++ b/apps/builder/src/features/customDomains/api/createCustomDomain.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/customDomains/api/deleteCustomDomain.ts b/apps/builder/src/features/customDomains/api/deleteCustomDomain.ts index 6dc651407..6326ce221 100644 --- a/apps/builder/src/features/customDomains/api/deleteCustomDomain.ts +++ b/apps/builder/src/features/customDomains/api/deleteCustomDomain.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/customDomains/api/listCustomDomains.ts b/apps/builder/src/features/customDomains/api/listCustomDomains.ts index 94a25feaa..78774678c 100644 --- a/apps/builder/src/features/customDomains/api/listCustomDomains.ts +++ b/apps/builder/src/features/customDomains/api/listCustomDomains.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/customDomains/api/verifyCustomDomain.ts b/apps/builder/src/features/customDomains/api/verifyCustomDomain.ts index 91e32d435..432ac241c 100644 --- a/apps/builder/src/features/customDomains/api/verifyCustomDomain.ts +++ b/apps/builder/src/features/customDomains/api/verifyCustomDomain.ts @@ -7,7 +7,7 @@ import { domainResponseSchema, domainVerificationStatusSchema, } from '@typebot.io/schemas/features/customDomains' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { isWriteWorkspaceForbidden } from '@/features/workspace/helpers/isWriteWorkspaceForbidden' import { TRPCError } from '@trpc/server' import { env } from '@typebot.io/env' diff --git a/apps/builder/src/features/results/api/deleteResults.ts b/apps/builder/src/features/results/api/deleteResults.ts index 71ed74228..e99367d5e 100644 --- a/apps/builder/src/features/results/api/deleteResults.ts +++ b/apps/builder/src/features/results/api/deleteResults.ts @@ -3,7 +3,7 @@ import { TRPCError } from '@trpc/server' import { Group } from '@typebot.io/schemas' import { z } from 'zod' import { archiveResults } from '@typebot.io/lib/api/helpers/archiveResults' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { isWriteTypebotForbidden } from '@/features/typebot/helpers/isWriteTypebotForbidden' export const deleteResults = authenticatedProcedure diff --git a/apps/builder/src/features/results/api/getResult.ts b/apps/builder/src/features/results/api/getResult.ts index 0648c862d..f6e333eac 100644 --- a/apps/builder/src/features/results/api/getResult.ts +++ b/apps/builder/src/features/results/api/getResult.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { ResultWithAnswers, resultWithAnswersSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/results/api/getResultLogs.ts b/apps/builder/src/features/results/api/getResultLogs.ts index 2e19615c8..2e8a6b6de 100644 --- a/apps/builder/src/features/results/api/getResultLogs.ts +++ b/apps/builder/src/features/results/api/getResultLogs.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { logSchema } from '@typebot.io/schemas' import { z } from 'zod' diff --git a/apps/builder/src/features/results/api/getResults.ts b/apps/builder/src/features/results/api/getResults.ts index 532741364..7abf26799 100644 --- a/apps/builder/src/features/results/api/getResults.ts +++ b/apps/builder/src/features/results/api/getResults.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { ResultWithAnswers, resultWithAnswersSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/theme/api/deleteThemeTemplate.ts b/apps/builder/src/features/theme/api/deleteThemeTemplate.ts index d541389cc..bb8fd9f10 100644 --- a/apps/builder/src/features/theme/api/deleteThemeTemplate.ts +++ b/apps/builder/src/features/theme/api/deleteThemeTemplate.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { ThemeTemplate, themeTemplateSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/theme/api/listThemeTemplates.ts b/apps/builder/src/features/theme/api/listThemeTemplates.ts index b2e183af9..605d97119 100644 --- a/apps/builder/src/features/theme/api/listThemeTemplates.ts +++ b/apps/builder/src/features/theme/api/listThemeTemplates.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { ThemeTemplate, themeTemplateSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/theme/api/saveThemeTemplate.ts b/apps/builder/src/features/theme/api/saveThemeTemplate.ts index 10d0126a2..4f8f25c75 100644 --- a/apps/builder/src/features/theme/api/saveThemeTemplate.ts +++ b/apps/builder/src/features/theme/api/saveThemeTemplate.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { ThemeTemplate, themeTemplateSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/api/createTypebot.ts b/apps/builder/src/features/typebot/api/createTypebot.ts index 544b06e3c..ecdab7025 100644 --- a/apps/builder/src/features/typebot/api/createTypebot.ts +++ b/apps/builder/src/features/typebot/api/createTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Plan, WorkspaceRole } from '@typebot.io/prisma' diff --git a/apps/builder/src/features/typebot/api/deleteTypebot.ts b/apps/builder/src/features/typebot/api/deleteTypebot.ts index ae688e68d..14220ebbb 100644 --- a/apps/builder/src/features/typebot/api/deleteTypebot.ts +++ b/apps/builder/src/features/typebot/api/deleteTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Group } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/api/getPublishedTypebot.ts b/apps/builder/src/features/typebot/api/getPublishedTypebot.ts index dd5249d08..6f7fc5be6 100644 --- a/apps/builder/src/features/typebot/api/getPublishedTypebot.ts +++ b/apps/builder/src/features/typebot/api/getPublishedTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { publicTypebotSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/api/getTypebot.ts b/apps/builder/src/features/typebot/api/getTypebot.ts index 517e07c0f..34fe43424 100644 --- a/apps/builder/src/features/typebot/api/getTypebot.ts +++ b/apps/builder/src/features/typebot/api/getTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Typebot, typebotSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/api/listTypebots.ts b/apps/builder/src/features/typebot/api/listTypebots.ts index 31ce74db4..79dcc845e 100644 --- a/apps/builder/src/features/typebot/api/listTypebots.ts +++ b/apps/builder/src/features/typebot/api/listTypebots.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { WorkspaceRole } from '@typebot.io/prisma' diff --git a/apps/builder/src/features/typebot/api/publishTypebot.ts b/apps/builder/src/features/typebot/api/publishTypebot.ts index 912e6375e..cb853f449 100644 --- a/apps/builder/src/features/typebot/api/publishTypebot.ts +++ b/apps/builder/src/features/typebot/api/publishTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { InputBlockType, typebotSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/api/unpublishTypebot.ts b/apps/builder/src/features/typebot/api/unpublishTypebot.ts index d8e3f6b6b..d3c91ae7b 100644 --- a/apps/builder/src/features/typebot/api/unpublishTypebot.ts +++ b/apps/builder/src/features/typebot/api/unpublishTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/builder/src/features/typebot/api/updateTypebot.ts b/apps/builder/src/features/typebot/api/updateTypebot.ts index bf93a1f04..8c3c35634 100644 --- a/apps/builder/src/features/typebot/api/updateTypebot.ts +++ b/apps/builder/src/features/typebot/api/updateTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { typebotCreateSchema, typebotSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/helpers/isReadTypebotForbidden.ts b/apps/builder/src/features/typebot/helpers/isReadTypebotForbidden.ts index 7192e404c..0a4062854 100644 --- a/apps/builder/src/features/typebot/helpers/isReadTypebotForbidden.ts +++ b/apps/builder/src/features/typebot/helpers/isReadTypebotForbidden.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { env } from '@typebot.io/env' import { CollaboratorsOnTypebots, User } from '@typebot.io/prisma' import { Typebot } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/typebot/helpers/isWriteTypebotForbidden.ts b/apps/builder/src/features/typebot/helpers/isWriteTypebotForbidden.ts index d70a1160b..e6a4b72ea 100644 --- a/apps/builder/src/features/typebot/helpers/isWriteTypebotForbidden.ts +++ b/apps/builder/src/features/typebot/helpers/isWriteTypebotForbidden.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { CollaborationType, CollaboratorsOnTypebots, diff --git a/apps/builder/src/features/typebot/helpers/sanitizers.ts b/apps/builder/src/features/typebot/helpers/sanitizers.ts index da4613d5e..3e3b3c000 100644 --- a/apps/builder/src/features/typebot/helpers/sanitizers.ts +++ b/apps/builder/src/features/typebot/helpers/sanitizers.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Plan } from '@typebot.io/prisma' import { Block, diff --git a/apps/builder/src/features/upload/api/generateUploadUrl.ts b/apps/builder/src/features/upload/api/generateUploadUrl.ts index f568340df..f9c98633b 100644 --- a/apps/builder/src/features/upload/api/generateUploadUrl.ts +++ b/apps/builder/src/features/upload/api/generateUploadUrl.ts @@ -3,7 +3,7 @@ import { z } from 'zod' import { env } from '@typebot.io/env' import { TRPCError } from '@trpc/server' import { generatePresignedPostPolicy } from '@typebot.io/lib/s3/generatePresignedPostPolicy' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { isWriteWorkspaceForbidden } from '@/features/workspace/helpers/isWriteWorkspaceForbidden' import { isWriteTypebotForbidden } from '@/features/typebot/helpers/isWriteTypebotForbidden' diff --git a/apps/builder/src/features/whatsapp/generateVerificationToken.ts b/apps/builder/src/features/whatsapp/generateVerificationToken.ts index ce0b29549..ca53b371b 100644 --- a/apps/builder/src/features/whatsapp/generateVerificationToken.ts +++ b/apps/builder/src/features/whatsapp/generateVerificationToken.ts @@ -1,6 +1,6 @@ import { authenticatedProcedure } from '@/helpers/server/trpc' import { z } from 'zod' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { createId } from '@paralleldrive/cuid2' export const generateVerificationToken = authenticatedProcedure diff --git a/apps/builder/src/features/whatsapp/getPhoneNumber.ts b/apps/builder/src/features/whatsapp/getPhoneNumber.ts index 2fa5d5f7d..b54d46a03 100644 --- a/apps/builder/src/features/whatsapp/getPhoneNumber.ts +++ b/apps/builder/src/features/whatsapp/getPhoneNumber.ts @@ -1,7 +1,7 @@ import { authenticatedProcedure } from '@/helpers/server/trpc' import { z } from 'zod' import got from 'got' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { decrypt } from '@typebot.io/lib/api' import { TRPCError } from '@trpc/server' import { WhatsAppCredentials } from '@typebot.io/schemas/features/whatsapp' diff --git a/apps/builder/src/features/whatsapp/getSystemTokenInfo.ts b/apps/builder/src/features/whatsapp/getSystemTokenInfo.ts index f848905c5..b6bccc19c 100644 --- a/apps/builder/src/features/whatsapp/getSystemTokenInfo.ts +++ b/apps/builder/src/features/whatsapp/getSystemTokenInfo.ts @@ -3,7 +3,7 @@ import { z } from 'zod' import got from 'got' import { TRPCError } from '@trpc/server' import { WhatsAppCredentials } from '@typebot.io/schemas/features/whatsapp' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { decrypt } from '@typebot.io/lib/api/encryption' const inputSchema = z.object({ diff --git a/apps/builder/src/features/whatsapp/receiveMessagePreview.ts b/apps/builder/src/features/whatsapp/receiveMessagePreview.ts index 1141e505f..0d3585913 100644 --- a/apps/builder/src/features/whatsapp/receiveMessagePreview.ts +++ b/apps/builder/src/features/whatsapp/receiveMessagePreview.ts @@ -1,7 +1,7 @@ import { publicProcedure } from '@/helpers/server/trpc' import { whatsAppWebhookRequestBodySchema } from '@typebot.io/schemas/features/whatsapp' import { z } from 'zod' -import { resumeWhatsAppFlow } from '@typebot.io/viewer/src/features/whatsApp/helpers/resumeWhatsAppFlow' +import { resumeWhatsAppFlow } from '@typebot.io/bot-engine/whatsapp/resumeWhatsAppFlow' import { isNotDefined } from '@typebot.io/lib' import { TRPCError } from '@trpc/server' import { env } from '@typebot.io/env' diff --git a/apps/builder/src/features/whatsapp/startWhatsAppPreview.ts b/apps/builder/src/features/whatsapp/startWhatsAppPreview.ts index 02ea9f0d6..ebf78fc87 100644 --- a/apps/builder/src/features/whatsapp/startWhatsAppPreview.ts +++ b/apps/builder/src/features/whatsapp/startWhatsAppPreview.ts @@ -1,14 +1,14 @@ import { authenticatedProcedure } from '@/helpers/server/trpc' import { z } from 'zod' import { TRPCError } from '@trpc/server' -import { sendWhatsAppMessage } from '@typebot.io/lib/whatsApp/sendWhatsAppMessage' -import { startSession } from '@typebot.io/viewer/src/features/chat/helpers/startSession' +import { startSession } from '@typebot.io/bot-engine/startSession' import { env } from '@typebot.io/env' import { HTTPError } from 'got' -import prisma from '@/lib/prisma' -import { sendChatReplyToWhatsApp } from '@typebot.io/lib/whatsApp/sendChatReplyToWhatsApp' -import { saveStateToDatabase } from '@typebot.io/viewer/src/features/chat/helpers/saveStateToDatabase' -import { restartSession } from '@typebot.io/viewer/src/features/chat/queries/restartSession' +import prisma from '@typebot.io/lib/prisma' +import { saveStateToDatabase } from '@typebot.io/bot-engine/saveStateToDatabase' +import { restartSession } from '@typebot.io/bot-engine/queries/restartSession' +import { sendChatReplyToWhatsApp } from '@typebot.io/bot-engine/whatsapp/sendChatReplyToWhatsApp' +import { sendWhatsAppMessage } from '@typebot.io/bot-engine/whatsapp/sendWhatsAppMessage' import { isReadTypebotForbidden } from '../typebot/helpers/isReadTypebotForbidden' import { SessionState } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/whatsapp/verifyIfPhoneNumberAvailable.ts b/apps/builder/src/features/whatsapp/verifyIfPhoneNumberAvailable.ts index 0b14d6b6b..9c32186c0 100644 --- a/apps/builder/src/features/whatsapp/verifyIfPhoneNumberAvailable.ts +++ b/apps/builder/src/features/whatsapp/verifyIfPhoneNumberAvailable.ts @@ -1,6 +1,6 @@ import { authenticatedProcedure } from '@/helpers/server/trpc' import { z } from 'zod' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' export const verifyIfPhoneNumberAvailable = authenticatedProcedure .meta({ diff --git a/apps/builder/src/features/workspace/api/createWorkspace.ts b/apps/builder/src/features/workspace/api/createWorkspace.ts index 4d1061b83..c029d1bfb 100644 --- a/apps/builder/src/features/workspace/api/createWorkspace.ts +++ b/apps/builder/src/features/workspace/api/createWorkspace.ts @@ -1,5 +1,5 @@ import { sendTelemetryEvents } from '@typebot.io/lib/telemetry/sendTelemetryEvent' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { Workspace, workspaceSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/workspace/api/deleteWorkspace.ts b/apps/builder/src/features/workspace/api/deleteWorkspace.ts index 18f475051..ad456df5a 100644 --- a/apps/builder/src/features/workspace/api/deleteWorkspace.ts +++ b/apps/builder/src/features/workspace/api/deleteWorkspace.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { z } from 'zod' import { isAdminWriteWorkspaceForbidden } from '../helpers/isAdminWriteWorkspaceForbidden' diff --git a/apps/builder/src/features/workspace/api/getWorkspace.ts b/apps/builder/src/features/workspace/api/getWorkspace.ts index ee8114afc..0cf700aba 100644 --- a/apps/builder/src/features/workspace/api/getWorkspace.ts +++ b/apps/builder/src/features/workspace/api/getWorkspace.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { workspaceSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/workspace/api/listInvitationsInWorkspace.ts b/apps/builder/src/features/workspace/api/listInvitationsInWorkspace.ts index b4ff42488..751934bf1 100644 --- a/apps/builder/src/features/workspace/api/listInvitationsInWorkspace.ts +++ b/apps/builder/src/features/workspace/api/listInvitationsInWorkspace.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { workspaceInvitationSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/workspace/api/listMembersInWorkspace.ts b/apps/builder/src/features/workspace/api/listMembersInWorkspace.ts index 6800c1b34..048cf91ea 100644 --- a/apps/builder/src/features/workspace/api/listMembersInWorkspace.ts +++ b/apps/builder/src/features/workspace/api/listMembersInWorkspace.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { workspaceMemberSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/workspace/api/listWorkspaces.ts b/apps/builder/src/features/workspace/api/listWorkspaces.ts index 213e28504..6e3326bdc 100644 --- a/apps/builder/src/features/workspace/api/listWorkspaces.ts +++ b/apps/builder/src/features/workspace/api/listWorkspaces.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { workspaceSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/features/workspace/api/updateWorkspace.ts b/apps/builder/src/features/workspace/api/updateWorkspace.ts index 11b26a832..0a3889802 100644 --- a/apps/builder/src/features/workspace/api/updateWorkspace.ts +++ b/apps/builder/src/features/workspace/api/updateWorkspace.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { workspaceSchema } from '@typebot.io/schemas' diff --git a/apps/builder/src/helpers/databaseRules.ts b/apps/builder/src/helpers/databaseRules.ts index 11e5f327c..6a4aba67d 100644 --- a/apps/builder/src/helpers/databaseRules.ts +++ b/apps/builder/src/helpers/databaseRules.ts @@ -5,7 +5,7 @@ import { User, WorkspaceRole, } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiResponse } from 'next' import { forbidden } from '@typebot.io/lib/api' import { env } from '@typebot.io/env' diff --git a/apps/builder/src/lib/googleSheets.ts b/apps/builder/src/lib/googleSheets.ts index 580ccce58..694c0d6f1 100644 --- a/apps/builder/src/lib/googleSheets.ts +++ b/apps/builder/src/lib/googleSheets.ts @@ -3,8 +3,8 @@ import { OAuth2Client, Credentials } from 'google-auth-library' import { GoogleSheetsCredentials } from '@typebot.io/schemas' import { isDefined } from '@typebot.io/lib' import { decrypt, encrypt } from '@typebot.io/lib/api' -import prisma from './prisma' import { env } from '@typebot.io/env' +import prisma from '@typebot.io/lib/prisma' export const oauth2Client = new OAuth2Client( env.GOOGLE_CLIENT_ID, diff --git a/apps/builder/src/lib/prisma.ts b/apps/builder/src/lib/prisma.ts deleted file mode 100644 index d91fcca1e..000000000 --- a/apps/builder/src/lib/prisma.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Instantiates a single instance PrismaClient and save it on the global object. - * @link https://www.prisma.io/docs/support/help-articles/nextjs-prisma-client-dev-practices - */ -import { env } from '@typebot.io/env' -import { PrismaClient } from '@typebot.io/prisma' - -const prismaGlobal = global as typeof global & { - prisma?: PrismaClient -} - -const prisma: PrismaClient = - prismaGlobal.prisma || - new PrismaClient({ - log: env.NODE_ENV === 'development' ? ['error', 'warn'] : ['error'], - }) - -if (env.NODE_ENV !== 'production') { - prismaGlobal.prisma = prisma -} - -export default prisma diff --git a/apps/builder/src/pages/api/auth/[...nextauth].ts b/apps/builder/src/pages/api/auth/[...nextauth].ts index c5618df11..696fd5bfc 100644 --- a/apps/builder/src/pages/api/auth/[...nextauth].ts +++ b/apps/builder/src/pages/api/auth/[...nextauth].ts @@ -5,7 +5,7 @@ import GitlabProvider from 'next-auth/providers/gitlab' import GoogleProvider from 'next-auth/providers/google' import FacebookProvider from 'next-auth/providers/facebook' import AzureADProvider from 'next-auth/providers/azure-ad' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Provider } from 'next-auth/providers' import { NextApiRequest, NextApiResponse } from 'next' import { customAdapter } from '../../../features/auth/api/customAdapter' diff --git a/apps/builder/src/pages/api/credentials.ts b/apps/builder/src/pages/api/credentials.ts index 84187ad90..48ecd6b30 100644 --- a/apps/builder/src/pages/api/credentials.ts +++ b/apps/builder/src/pages/api/credentials.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Credentials } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/credentials/[credentialsId].ts b/apps/builder/src/pages/api/credentials/[credentialsId].ts index e738e4062..0458db426 100644 --- a/apps/builder/src/pages/api/credentials/[credentialsId].ts +++ b/apps/builder/src/pages/api/credentials/[credentialsId].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { badRequest, diff --git a/apps/builder/src/pages/api/credentials/google-sheets/callback.ts b/apps/builder/src/pages/api/credentials/google-sheets/callback.ts index b3d56ea4b..40e9a5716 100644 --- a/apps/builder/src/pages/api/credentials/google-sheets/callback.ts +++ b/apps/builder/src/pages/api/credentials/google-sheets/callback.ts @@ -1,6 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' import { Prisma } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { googleSheetsScopes } from './consent-url' import { stringify } from 'querystring' import { badRequest, encrypt, notAuthenticated } from '@typebot.io/lib/api' diff --git a/apps/builder/src/pages/api/customDomains/[domain].ts b/apps/builder/src/pages/api/customDomains/[domain].ts index c6480596d..faa5c353a 100644 --- a/apps/builder/src/pages/api/customDomains/[domain].ts +++ b/apps/builder/src/pages/api/customDomains/[domain].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { badRequest, diff --git a/apps/builder/src/pages/api/folders.ts b/apps/builder/src/pages/api/folders.ts index c9191c8ab..ed81fd86d 100644 --- a/apps/builder/src/pages/api/folders.ts +++ b/apps/builder/src/pages/api/folders.ts @@ -1,5 +1,5 @@ import { DashboardFolder, WorkspaceRole } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { badRequest, diff --git a/apps/builder/src/pages/api/folders/[id].ts b/apps/builder/src/pages/api/folders/[id].ts index 692f73ac8..d3c9fe85e 100644 --- a/apps/builder/src/pages/api/folders/[id].ts +++ b/apps/builder/src/pages/api/folders/[id].ts @@ -1,5 +1,5 @@ import { DashboardFolder } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { methodNotAllowed, notAuthenticated } from '@typebot.io/lib/api' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/publicIdAvailable.ts b/apps/builder/src/pages/api/publicIdAvailable.ts index b437df48b..2df82f721 100644 --- a/apps/builder/src/pages/api/publicIdAvailable.ts +++ b/apps/builder/src/pages/api/publicIdAvailable.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { methodNotAllowed, notAuthenticated } from '@typebot.io/lib/api' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/publicTypebots.ts b/apps/builder/src/pages/api/publicTypebots.ts index c51d9c3f2..ad7ba7bfa 100644 --- a/apps/builder/src/pages/api/publicTypebots.ts +++ b/apps/builder/src/pages/api/publicTypebots.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { InputBlockType, PublicTypebot } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { canPublishFileInput } from '@/helpers/databaseRules' diff --git a/apps/builder/src/pages/api/publicTypebots/[id].ts b/apps/builder/src/pages/api/publicTypebots/[id].ts index f925238f8..8e291cfba 100644 --- a/apps/builder/src/pages/api/publicTypebots/[id].ts +++ b/apps/builder/src/pages/api/publicTypebots/[id].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { InputBlockType, PublicTypebot } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { canPublishFileInput, canWriteTypebots } from '@/helpers/databaseRules' diff --git a/apps/builder/src/pages/api/stripe/webhook.ts b/apps/builder/src/pages/api/stripe/webhook.ts index 390afa857..e27969427 100644 --- a/apps/builder/src/pages/api/stripe/webhook.ts +++ b/apps/builder/src/pages/api/stripe/webhook.ts @@ -3,7 +3,7 @@ import { methodNotAllowed } from '@typebot.io/lib/api' import Stripe from 'stripe' import Cors from 'micro-cors' import { buffer } from 'micro' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Plan, WorkspaceRole } from '@typebot.io/prisma' import { RequestHandler } from 'next/dist/server/next' import { sendTelemetryEvents } from '@typebot.io/lib/telemetry/sendTelemetryEvent' diff --git a/apps/builder/src/pages/api/typebots/[typebotId]/analytics/stats.ts b/apps/builder/src/pages/api/typebots/[typebotId]/analytics/stats.ts index 246e77822..a367337d9 100644 --- a/apps/builder/src/pages/api/typebots/[typebotId]/analytics/stats.ts +++ b/apps/builder/src/pages/api/typebots/[typebotId]/analytics/stats.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Stats } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { canReadTypebots } from '@/helpers/databaseRules' diff --git a/apps/builder/src/pages/api/typebots/[typebotId]/blocks.ts b/apps/builder/src/pages/api/typebots/[typebotId]/blocks.ts index 5a1c19fef..c928b9d31 100644 --- a/apps/builder/src/pages/api/typebots/[typebotId]/blocks.ts +++ b/apps/builder/src/pages/api/typebots/[typebotId]/blocks.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { canReadTypebots } from '@/helpers/databaseRules' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/typebots/[typebotId]/collaborators.ts b/apps/builder/src/pages/api/typebots/[typebotId]/collaborators.ts index 370afd465..6c2da316f 100644 --- a/apps/builder/src/pages/api/typebots/[typebotId]/collaborators.ts +++ b/apps/builder/src/pages/api/typebots/[typebotId]/collaborators.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { canReadTypebots } from '@/helpers/databaseRules' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/typebots/[typebotId]/collaborators/[userId].ts b/apps/builder/src/pages/api/typebots/[typebotId]/collaborators/[userId].ts index e213cce10..97fa4e0d3 100644 --- a/apps/builder/src/pages/api/typebots/[typebotId]/collaborators/[userId].ts +++ b/apps/builder/src/pages/api/typebots/[typebotId]/collaborators/[userId].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { canEditGuests } from '@/helpers/databaseRules' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/typebots/[typebotId]/invitations.ts b/apps/builder/src/pages/api/typebots/[typebotId]/invitations.ts index c74ea9b4f..f7d614171 100644 --- a/apps/builder/src/pages/api/typebots/[typebotId]/invitations.ts +++ b/apps/builder/src/pages/api/typebots/[typebotId]/invitations.ts @@ -1,5 +1,5 @@ import { CollaborationType, WorkspaceRole } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { canReadTypebots, diff --git a/apps/builder/src/pages/api/typebots/[typebotId]/invitations/[email].ts b/apps/builder/src/pages/api/typebots/[typebotId]/invitations/[email].ts index c3f5d2322..3388186b2 100644 --- a/apps/builder/src/pages/api/typebots/[typebotId]/invitations/[email].ts +++ b/apps/builder/src/pages/api/typebots/[typebotId]/invitations/[email].ts @@ -1,5 +1,5 @@ import { Invitation } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { canEditGuests } from '@/helpers/databaseRules' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' diff --git a/apps/builder/src/pages/api/users/[userId].ts b/apps/builder/src/pages/api/users/[userId].ts index d5b2c4a94..2de569a65 100644 --- a/apps/builder/src/pages/api/users/[userId].ts +++ b/apps/builder/src/pages/api/users/[userId].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { methodNotAllowed, notAuthenticated } from '@typebot.io/lib/api' diff --git a/apps/builder/src/pages/api/users/[userId]/api-tokens.ts b/apps/builder/src/pages/api/users/[userId]/api-tokens.ts index 532a9842f..3f3357cd3 100644 --- a/apps/builder/src/pages/api/users/[userId]/api-tokens.ts +++ b/apps/builder/src/pages/api/users/[userId]/api-tokens.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { generateId } from '@typebot.io/lib' diff --git a/apps/builder/src/pages/api/users/[userId]/api-tokens/[tokenId].ts b/apps/builder/src/pages/api/users/[userId]/api-tokens/[tokenId].ts index 8ab544ee8..078234cd4 100644 --- a/apps/builder/src/pages/api/users/[userId]/api-tokens/[tokenId].ts +++ b/apps/builder/src/pages/api/users/[userId]/api-tokens/[tokenId].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { methodNotAllowed, notAuthenticated } from '@typebot.io/lib/api' diff --git a/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations.ts b/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations.ts index 4ffc058b6..79b9d80e4 100644 --- a/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations.ts +++ b/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations.ts @@ -1,5 +1,5 @@ import { WorkspaceInvitation, WorkspaceRole } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { forbidden, diff --git a/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations/[id].ts b/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations/[id].ts index 244e46df2..0a945e4ed 100644 --- a/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations/[id].ts +++ b/apps/builder/src/pages/api/workspaces/[workspaceId]/invitations/[id].ts @@ -1,5 +1,5 @@ import { WorkspaceInvitation, WorkspaceRole } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { methodNotAllowed, notAuthenticated } from '@typebot.io/lib/api' diff --git a/apps/builder/src/pages/api/workspaces/[workspaceId]/members.ts b/apps/builder/src/pages/api/workspaces/[workspaceId]/members.ts index 7645094d8..3eb541af7 100644 --- a/apps/builder/src/pages/api/workspaces/[workspaceId]/members.ts +++ b/apps/builder/src/pages/api/workspaces/[workspaceId]/members.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { diff --git a/apps/builder/src/pages/api/workspaces/[workspaceId]/members/[id].ts b/apps/builder/src/pages/api/workspaces/[workspaceId]/members/[id].ts index eb56b0ed6..9fde77c19 100644 --- a/apps/builder/src/pages/api/workspaces/[workspaceId]/members/[id].ts +++ b/apps/builder/src/pages/api/workspaces/[workspaceId]/members/[id].ts @@ -1,5 +1,5 @@ import { MemberInWorkspace, WorkspaceRole } from '@typebot.io/prisma' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { methodNotAllowed, notAuthenticated } from '@typebot.io/lib/api' diff --git a/apps/builder/tsconfig.json b/apps/builder/tsconfig.json index 5ec9b33e2..84e4ae1b4 100644 --- a/apps/builder/tsconfig.json +++ b/apps/builder/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@/*": ["src/*", "../viewer/src/*"] + "@/*": ["src/*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"] diff --git a/apps/docs/openapi/builder/_spec_.json b/apps/docs/openapi/builder/_spec_.json index c216a1364..f8c4fa53e 100644 --- a/apps/docs/openapi/builder/_spec_.json +++ b/apps/docs/openapi/builder/_spec_.json @@ -1565,7 +1565,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -5952,7 +5953,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -9974,7 +9976,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -14136,7 +14139,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -18178,7 +18182,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -22275,7 +22280,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -26435,7 +26441,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -33600,12 +33607,17 @@ "presignedUrl": { "type": "string" }, + "formData": { + "type": "object", + "additionalProperties": {} + }, "fileUrl": { "type": "string" } }, "required": [ "presignedUrl", + "formData", "fileUrl" ], "additionalProperties": false diff --git a/apps/docs/openapi/chat/_spec_.json b/apps/docs/openapi/chat/_spec_.json index 5adbd7f67..cc90077c2 100644 --- a/apps/docs/openapi/chat/_spec_.json +++ b/apps/docs/openapi/chat/_spec_.json @@ -1148,7 +1148,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -5075,7 +5076,8 @@ "additionalProperties": false }, "sizeLimit": { - "type": "number" + "type": "number", + "description": "Deprecated" } }, "required": [ @@ -6348,12 +6350,17 @@ "presignedUrl": { "type": "string" }, + "formData": { + "type": "object", + "additionalProperties": {} + }, "hasReachedStorageLimit": { "type": "boolean" } }, "required": [ "presignedUrl", + "formData", "hasReachedStorageLimit" ], "additionalProperties": false @@ -6428,12 +6435,17 @@ "presignedUrl": { "type": "string" }, + "formData": { + "type": "object", + "additionalProperties": {} + }, "fileUrl": { "type": "string" } }, "required": [ "presignedUrl", + "formData", "fileUrl" ], "additionalProperties": false @@ -6499,7 +6511,10 @@ "/workspaces/{workspaceId}/whatsapp/phoneNumbers/{phoneNumberId}/webhook": { "get": { "operationId": "whatsAppRouter-subscribeWebhook", - "summary": "Subscribe WhatsApp webhook", + "summary": "Subscribe webhook", + "tags": [ + "WhatsApp" + ], "security": [ { "Authorization": [] @@ -6557,7 +6572,10 @@ }, "post": { "operationId": "whatsAppRouter-receiveMessage", - "summary": "Receive WhatsApp Message", + "summary": "Message webhook", + "tags": [ + "WhatsApp" + ], "requestBody": { "required": true, "content": { diff --git a/apps/viewer/package.json b/apps/viewer/package.json index 4838840ca..8ef0aa53d 100644 --- a/apps/viewer/package.json +++ b/apps/viewer/package.json @@ -16,27 +16,21 @@ "@trpc/server": "10.34.0", "@typebot.io/nextjs": "workspace:*", "@typebot.io/prisma": "workspace:*", - "@udecode/plate-common": "^21.1.5", "ai": "2.1.32", "bot-engine": "workspace:*", - "chrono-node": "2.6.6", "cors": "2.8.5", - "date-fns": "^2.30.0", - "eventsource-parser": "^1.0.0", "google-spreadsheet": "4.0.2", "got": "12.6.0", - "libphonenumber-js": "1.10.37", "next": "13.4.3", "nextjs-cors": "2.1.2", - "node-html-parser": "^6.1.5", "nodemailer": "6.9.3", "openai-edge": "1.2.2", "qs": "6.11.2", "react": "18.2.0", "react-dom": "18.2.0", - "remark-slate": "^1.8.6", "stripe": "12.13.0", - "trpc-openapi": "1.2.0" + "trpc-openapi": "1.2.0", + "@typebot.io/bot-engine": "workspace:*" }, "devDependencies": { "@faire/mjml-react": "3.3.0", @@ -53,13 +47,11 @@ "@types/papaparse": "5.3.7", "@types/qs": "6.9.7", "@types/react": "18.2.15", - "@types/sanitize-html": "2.9.0", "dotenv-cli": "^7.2.1", "eslint": "8.44.0", "eslint-config-custom": "workspace:*", "google-auth-library": "8.9.0", "next-runtime-env": "^1.6.2", - "node-fetch": "3.3.1", "papaparse": "5.4.1", "superjson": "1.12.4", "typescript": "5.1.6", diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts b/apps/viewer/src/features/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts deleted file mode 100644 index b5eaea94f..000000000 --- a/apps/viewer/src/features/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { getAuthenticatedGoogleClient } from '@/lib/google-sheets' -import { TRPCError } from '@trpc/server' -import { GoogleSpreadsheet } from 'google-spreadsheet' - -export const getAuthenticatedGoogleDoc = async ({ - credentialsId, - spreadsheetId, -}: { - credentialsId?: string - spreadsheetId?: string -}) => { - if (!credentialsId || !spreadsheetId) - throw new TRPCError({ - code: 'BAD_REQUEST', - message: 'Missing credentialsId or spreadsheetId', - }) - const auth = await getAuthenticatedGoogleClient(credentialsId) - if (!auth) - throw new TRPCError({ - code: 'NOT_FOUND', - message: "Couldn't find credentials in database", - }) - return new GoogleSpreadsheet(spreadsheetId, auth) -} diff --git a/apps/viewer/src/features/blocks/logic/typebotLink/fetchLinkedTypebots.ts b/apps/viewer/src/features/blocks/logic/typebotLink/fetchLinkedTypebots.ts deleted file mode 100644 index 96b060f3e..000000000 --- a/apps/viewer/src/features/blocks/logic/typebotLink/fetchLinkedTypebots.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { canReadTypebots } from '@/helpers/api/dbRules' -import prisma from '@/lib/prisma' -import { User } from '@typebot.io/prisma' -import { PublicTypebot, Typebot } from '@typebot.io/schemas' - -type Props = { - isPreview?: boolean - typebotIds: string[] - user?: User -} - -export const fetchLinkedTypebots = async ({ - user, - isPreview, - typebotIds, -}: Props) => { - const linkedTypebots = ( - isPreview - ? await prisma.typebot.findMany({ - where: user - ? { - AND: [ - { id: { in: typebotIds } }, - canReadTypebots(typebotIds, user as User), - ], - } - : { id: { in: typebotIds } }, - }) - : await prisma.publicTypebot.findMany({ - where: { id: { in: typebotIds } }, - }) - ) as (Typebot | PublicTypebot)[] - return linkedTypebots -} diff --git a/apps/viewer/src/features/chat/api/sendMessage.ts b/apps/viewer/src/features/chat/api/sendMessage.ts index e79f00780..375ad04a4 100644 --- a/apps/viewer/src/features/chat/api/sendMessage.ts +++ b/apps/viewer/src/features/chat/api/sendMessage.ts @@ -1,15 +1,15 @@ import { publicProcedure } from '@/helpers/server/trpc' -import { saveStateToDatabase } from '../helpers/saveStateToDatabase' -import { getSession } from '../queries/getSession' -import { continueBotFlow } from '../helpers/continueBotFlow' -import { parseDynamicTheme } from '../helpers/parseDynamicTheme' -import { startSession } from '../helpers/startSession' -import { restartSession } from '../queries/restartSession' import { chatReplySchema, sendMessageInputSchema, } from '@typebot.io/schemas/features/chat/schema' import { TRPCError } from '@trpc/server' +import { getSession } from '@typebot.io/bot-engine/queries/getSession' +import { startSession } from '@typebot.io/bot-engine/startSession' +import { saveStateToDatabase } from '@typebot.io/bot-engine/saveStateToDatabase' +import { restartSession } from '@typebot.io/bot-engine/queries/restartSession' +import { continueBotFlow } from '@typebot.io/bot-engine/continueBotFlow' +import { parseDynamicTheme } from '@typebot.io/bot-engine/parseDynamicTheme' export const sendMessage = publicProcedure .meta({ diff --git a/apps/viewer/src/features/chat/api/updateTypebotInSession.ts b/apps/viewer/src/features/chat/api/updateTypebotInSession.ts index f199f4ce5..5986cc262 100644 --- a/apps/viewer/src/features/chat/api/updateTypebotInSession.ts +++ b/apps/viewer/src/features/chat/api/updateTypebotInSession.ts @@ -1,14 +1,14 @@ import { publicProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' -import { getSession } from '../queries/getSession' -import prisma from '@/lib/prisma' +import { getSession } from '@typebot.io/bot-engine/queries/getSession' import { PublicTypebot, SessionState, Typebot, Variable, } from '@typebot.io/schemas' +import prisma from '@typebot.io/lib/prisma' export const updateTypebotInSession = publicProcedure .meta({ diff --git a/apps/viewer/src/features/blocks/inputs/fileUpload/api/deprecated/getUploadUrl.ts b/apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts similarity index 98% rename from apps/viewer/src/features/blocks/inputs/fileUpload/api/deprecated/getUploadUrl.ts rename to apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts index b9b11582c..9de92b7c7 100644 --- a/apps/viewer/src/features/blocks/inputs/fileUpload/api/deprecated/getUploadUrl.ts +++ b/apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts @@ -1,5 +1,4 @@ import { publicProcedure } from '@/helpers/server/trpc' -import prisma from '@/lib/prisma' import { TRPCError } from '@trpc/server' import { FileInputBlock, @@ -12,6 +11,7 @@ import { byId, isDefined } from '@typebot.io/lib' import { z } from 'zod' import { generatePresignedPostPolicy } from '@typebot.io/lib/s3/generatePresignedPostPolicy' import { env } from '@typebot.io/env' +import prisma from '@typebot.io/lib/prisma' export const getUploadUrl = publicProcedure .meta({ diff --git a/apps/viewer/src/features/blocks/inputs/fileUpload/api/generateUploadUrl.ts b/apps/viewer/src/features/fileUpload/api/generateUploadUrl.ts similarity index 98% rename from apps/viewer/src/features/blocks/inputs/fileUpload/api/generateUploadUrl.ts rename to apps/viewer/src/features/fileUpload/api/generateUploadUrl.ts index 175f67939..d60d2a521 100644 --- a/apps/viewer/src/features/blocks/inputs/fileUpload/api/generateUploadUrl.ts +++ b/apps/viewer/src/features/fileUpload/api/generateUploadUrl.ts @@ -1,10 +1,10 @@ import { publicProcedure } from '@/helpers/server/trpc' -import prisma from '@/lib/prisma' import { TRPCError } from '@trpc/server' import { z } from 'zod' import { generatePresignedPostPolicy } from '@typebot.io/lib/s3/generatePresignedPostPolicy' import { env } from '@typebot.io/env' import { InputBlockType, publicTypebotSchema } from '@typebot.io/schemas' +import prisma from '@typebot.io/lib/prisma' export const generateUploadUrl = publicProcedure .meta({ diff --git a/apps/viewer/src/features/whatsApp/api/receiveMessage.ts b/apps/viewer/src/features/whatsapp/api/receiveMessage.ts similarity index 93% rename from apps/viewer/src/features/whatsApp/api/receiveMessage.ts rename to apps/viewer/src/features/whatsapp/api/receiveMessage.ts index ff0907e0a..7f6f99c19 100644 --- a/apps/viewer/src/features/whatsApp/api/receiveMessage.ts +++ b/apps/viewer/src/features/whatsapp/api/receiveMessage.ts @@ -1,8 +1,8 @@ import { publicProcedure } from '@/helpers/server/trpc' import { whatsAppWebhookRequestBodySchema } from '@typebot.io/schemas/features/whatsapp' -import { resumeWhatsAppFlow } from '../helpers/resumeWhatsAppFlow' import { z } from 'zod' import { isNotDefined } from '@typebot.io/lib' +import { resumeWhatsAppFlow } from '@typebot.io/bot-engine/whatsapp/resumeWhatsAppFlow' export const receiveMessage = publicProcedure .meta({ diff --git a/apps/viewer/src/features/whatsApp/api/router.ts b/apps/viewer/src/features/whatsapp/api/router.ts similarity index 100% rename from apps/viewer/src/features/whatsApp/api/router.ts rename to apps/viewer/src/features/whatsapp/api/router.ts diff --git a/apps/viewer/src/features/whatsApp/api/subscribeWebhook.ts b/apps/viewer/src/features/whatsapp/api/subscribeWebhook.ts similarity index 96% rename from apps/viewer/src/features/whatsApp/api/subscribeWebhook.ts rename to apps/viewer/src/features/whatsapp/api/subscribeWebhook.ts index b0e64b399..cf0f2a77d 100644 --- a/apps/viewer/src/features/whatsApp/api/subscribeWebhook.ts +++ b/apps/viewer/src/features/whatsapp/api/subscribeWebhook.ts @@ -1,5 +1,5 @@ import { publicProcedure } from '@/helpers/server/trpc' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { TRPCError } from '@trpc/server' import { z } from 'zod' diff --git a/apps/viewer/src/helpers/api/dbRules.ts b/apps/viewer/src/helpers/api/dbRules.ts deleted file mode 100644 index 4a006834f..000000000 --- a/apps/viewer/src/helpers/api/dbRules.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { - CollaborationType, - Prisma, - User, - WorkspaceRole, -} from '@typebot.io/prisma' -import { env } from '@typebot.io/env' - -const parseWhereFilter = ( - typebotIds: string[] | string, - user: User, - type: 'read' | 'write' -): Prisma.TypebotWhereInput => ({ - OR: [ - { - id: typeof typebotIds === 'string' ? typebotIds : { in: typebotIds }, - collaborators: { - some: { - userId: user.id, - type: type === 'write' ? CollaborationType.WRITE : undefined, - }, - }, - }, - { - id: typeof typebotIds === 'string' ? typebotIds : { in: typebotIds }, - workspace: - (type === 'read' && user.email === env.ADMIN_EMAIL) || - env.NEXT_PUBLIC_E2E_TEST - ? undefined - : { - members: { - some: { userId: user.id, role: { not: WorkspaceRole.GUEST } }, - }, - }, - }, - ], -}) - -export const canReadTypebot = (typebotId: string, user: User) => - parseWhereFilter(typebotId, user, 'read') - -export const canWriteTypebot = (typebotId: string, user: User) => - parseWhereFilter(typebotId, user, 'write') - -export const canReadTypebots = (typebotIds: string[], user: User) => - parseWhereFilter(typebotIds, user, 'read') - -export const canWriteTypebots = (typebotIds: string[], user: User) => - parseWhereFilter(typebotIds, user, 'write') - -export const canEditGuests = (user: User, typebotId: string) => ({ - id: typebotId, - workspace: { - members: { - some: { userId: user.id, role: { not: WorkspaceRole.GUEST } }, - }, - }, -}) diff --git a/apps/viewer/src/helpers/api/isVercel.ts b/apps/viewer/src/helpers/api/isVercel.ts deleted file mode 100644 index 64a882ff9..000000000 --- a/apps/viewer/src/helpers/api/isVercel.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { env } from '@typebot.io/env' - -export const isVercel = () => env.NEXT_PUBLIC_VERCEL_ENV diff --git a/apps/viewer/src/helpers/authenticateUser.ts b/apps/viewer/src/helpers/authenticateUser.ts index a029b2e93..3716be806 100644 --- a/apps/viewer/src/helpers/authenticateUser.ts +++ b/apps/viewer/src/helpers/authenticateUser.ts @@ -1,6 +1,6 @@ import { User } from '@typebot.io/prisma' import { NextApiRequest } from 'next' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' export const authenticateUser = async ( req: NextApiRequest diff --git a/apps/viewer/src/helpers/server/context.ts b/apps/viewer/src/helpers/server/context.ts index 2b5adc59f..e0a21ac1d 100644 --- a/apps/viewer/src/helpers/server/context.ts +++ b/apps/viewer/src/helpers/server/context.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { inferAsyncReturnType } from '@trpc/server' import * as trpcNext from '@trpc/server/adapters/next' import { User } from '@typebot.io/prisma' diff --git a/apps/viewer/src/helpers/server/routers/v1/_app.ts b/apps/viewer/src/helpers/server/routers/v1/_app.ts index df4d56d89..e1912aaef 100644 --- a/apps/viewer/src/helpers/server/routers/v1/_app.ts +++ b/apps/viewer/src/helpers/server/routers/v1/_app.ts @@ -1,9 +1,9 @@ -import { getUploadUrl } from '@/features/blocks/inputs/fileUpload/api/deprecated/getUploadUrl' -import { generateUploadUrl } from '@/features/blocks/inputs/fileUpload/api/generateUploadUrl' import { sendMessage } from '@/features/chat/api/sendMessage' -import { whatsAppRouter } from '@/features/whatsApp/api/router' +import { whatsAppRouter } from '@/features/whatsapp/api/router' import { router } from '../../trpc' import { updateTypebotInSession } from '@/features/chat/api/updateTypebotInSession' +import { getUploadUrl } from '@/features/fileUpload/api/deprecated/getUploadUrl' +import { generateUploadUrl } from '@/features/fileUpload/api/generateUploadUrl' export const appRouter = router({ sendMessage, diff --git a/apps/viewer/src/lib/google-sheets.ts b/apps/viewer/src/lib/google-sheets.ts index 0a573e7b1..3dd807650 100644 --- a/apps/viewer/src/lib/google-sheets.ts +++ b/apps/viewer/src/lib/google-sheets.ts @@ -3,8 +3,8 @@ import { OAuth2Client, Credentials } from 'google-auth-library' import { GoogleSheetsCredentials } from '@typebot.io/schemas' import { isDefined } from '@typebot.io/lib' import { decrypt, encrypt } from '@typebot.io/lib/api' -import prisma from './prisma' import { env } from '@typebot.io/env' +import prisma from '@typebot.io/lib/prisma' export const getAuthenticatedGoogleClient = async ( credentialsId: string diff --git a/apps/viewer/src/pages/[[...publicId]].tsx b/apps/viewer/src/pages/[[...publicId]].tsx index 2f6f2ae78..6cab44d98 100644 --- a/apps/viewer/src/pages/[[...publicId]].tsx +++ b/apps/viewer/src/pages/[[...publicId]].tsx @@ -3,10 +3,10 @@ import { ErrorPage } from '@/components/ErrorPage' import { NotFoundPage } from '@/components/NotFoundPage' import { GetServerSideProps, GetServerSidePropsContext } from 'next' import { isNotDefined } from '@typebot.io/lib' -import prisma from '../lib/prisma' import { TypebotPageProps, TypebotPageV2 } from '@/components/TypebotPageV2' import { TypebotPageV3, TypebotV3PageProps } from '@/components/TypebotPageV3' import { env } from '@typebot.io/env' +import prisma from '@typebot.io/lib/prisma' // Browsers that doesn't support ES modules and/or web components const incompatibleBrowsers = [ diff --git a/apps/viewer/src/pages/api/integrations/google-sheets/spreadsheets/[spreadsheetId]/sheets/[sheetId].ts b/apps/viewer/src/pages/api/integrations/google-sheets/spreadsheets/[spreadsheetId]/sheets/[sheetId].ts index de1fba480..c2e3f9db0 100644 --- a/apps/viewer/src/pages/api/integrations/google-sheets/spreadsheets/[spreadsheetId]/sheets/[sheetId].ts +++ b/apps/viewer/src/pages/api/integrations/google-sheets/spreadsheets/[spreadsheetId]/sheets/[sheetId].ts @@ -17,8 +17,8 @@ import { } from '@typebot.io/schemas' import Cors from 'cors' import { getAuthenticatedGoogleClient } from '@/lib/google-sheets' -import { saveErrorLog } from '@/features/logs/saveErrorLog' -import { saveSuccessLog } from '@/features/logs/saveSuccessLog' +import { saveErrorLog } from '@typebot.io/bot-engine/logs/saveErrorLog' +import { saveSuccessLog } from '@typebot.io/bot-engine/logs/saveSuccessLog' const cors = initMiddleware(Cors()) diff --git a/apps/viewer/src/pages/api/integrations/openai/streamer.ts b/apps/viewer/src/pages/api/integrations/openai/streamer.ts index 41bd46fd5..ad74f5329 100644 --- a/apps/viewer/src/pages/api/integrations/openai/streamer.ts +++ b/apps/viewer/src/pages/api/integrations/openai/streamer.ts @@ -1,9 +1,9 @@ -import { getChatCompletionStream } from '@/features/blocks/integrations/openai/getChatCompletionStream' import { connect } from '@planetscale/database' import { env } from '@typebot.io/env' import { IntegrationBlockType, SessionState } from '@typebot.io/schemas' import { StreamingTextResponse } from 'ai' import { ChatCompletionRequestMessage } from 'openai-edge' +import { getChatCompletionStream } from '@typebot.io/bot-engine/blocks/integrations/openai/getChatCompletionStream' export const config = { runtime: 'edge', diff --git a/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts b/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts index 164155719..615549754 100644 --- a/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts +++ b/apps/viewer/src/pages/api/integrations/stripe/createPaymentIntent.ts @@ -14,8 +14,8 @@ import { StripeCredentials, Variable, } from '@typebot.io/schemas' -import prisma from '@/lib/prisma' -import { parseVariables } from '@/features/variables/parseVariables' +import prisma from '@typebot.io/lib/prisma' +import { parseVariables } from '@typebot.io/bot-engine/variables/parseVariables' const cors = initMiddleware(Cors()) diff --git a/apps/viewer/src/pages/api/publicTypebots/[typebotId].ts b/apps/viewer/src/pages/api/publicTypebots/[typebotId].ts index c82075e07..460f23953 100644 --- a/apps/viewer/src/pages/api/publicTypebots/[typebotId].ts +++ b/apps/viewer/src/pages/api/publicTypebots/[typebotId].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import Cors from 'cors' import { initMiddleware, methodNotAllowed, notFound } from '@typebot.io/lib/api' diff --git a/apps/viewer/src/pages/api/typebots.ts b/apps/viewer/src/pages/api/typebots.ts index 9da5e5ac3..de1d01ae5 100644 --- a/apps/viewer/src/pages/api/typebots.ts +++ b/apps/viewer/src/pages/api/typebots.ts @@ -1,5 +1,5 @@ import { authenticateUser } from '@/helpers/authenticateUser' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { methodNotAllowed } from '@typebot.io/lib/api' diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts index 2087298d0..6b7b32894 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/executeWebhook.ts @@ -17,14 +17,14 @@ import { parseAnswers } from '@typebot.io/lib/results' import { initMiddleware, methodNotAllowed, notFound } from '@typebot.io/lib/api' import { stringify } from 'qs' import Cors from 'cors' -import prisma from '@/lib/prisma' -import { parseVariables } from '@/features/variables/parseVariables' -import { parseSampleResult } from '@/features/blocks/integrations/webhook/parseSampleResult' -import { fetchLinkedTypebots } from '@/features/blocks/logic/typebotLink/fetchLinkedTypebots' -import { getPreviouslyLinkedTypebots } from '@/features/blocks/logic/typebotLink/getPreviouslyLinkedTypebots' -import { saveErrorLog } from '@/features/logs/saveErrorLog' -import { saveSuccessLog } from '@/features/logs/saveSuccessLog' +import prisma from '@typebot.io/lib/prisma' import { HttpMethod } from '@typebot.io/schemas/features/blocks/integrations/webhook/enums' +import { fetchLinkedTypebots } from '@typebot.io/bot-engine/blocks/logic/typebotLink/fetchLinkedTypebots' +import { getPreviouslyLinkedTypebots } from '@typebot.io/bot-engine/blocks/logic/typebotLink/getPreviouslyLinkedTypebots' +import { parseVariables } from '@typebot.io/bot-engine/variables/parseVariables' +import { saveErrorLog } from '@typebot.io/bot-engine/logs/saveErrorLog' +import { saveSuccessLog } from '@typebot.io/bot-engine/logs/saveSuccessLog' +import { parseSampleResult } from '@typebot.io/bot-engine/blocks/integrations/webhook/parseSampleResult' const cors = initMiddleware(Cors()) @@ -128,10 +128,10 @@ export const executeWebhook = convertKeyValueTableToObject(webhook.queryParams, variables) ) const contentType = headers ? headers['Content-Type'] : undefined - const linkedTypebotsParents = await fetchLinkedTypebots({ + const linkedTypebotsParents = (await fetchLinkedTypebots({ isPreview: !('typebotId' in typebot), typebotIds: parentTypebotIds, - }) + })) as (Typebot | PublicTypebot)[] const linkedTypebotsChildren = await getPreviouslyLinkedTypebots({ isPreview: !('typebotId' in typebot), typebots: [typebot], diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx b/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx index 4c8d28d3a..0db54d953 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/integrations/email.tsx @@ -14,10 +14,10 @@ import Cors from 'cors' import Mail from 'nodemailer/lib/mailer' import { DefaultBotNotificationEmail } from '@typebot.io/emails' import { render } from '@faire/mjml-react/utils/render' -import prisma from '@/lib/prisma' -import { saveErrorLog } from '@/features/logs/saveErrorLog' -import { saveSuccessLog } from '@/features/logs/saveSuccessLog' +import prisma from '@typebot.io/lib/prisma' import { env } from '@typebot.io/env' +import { saveErrorLog } from '@typebot.io/bot-engine/logs/saveErrorLog' +import { saveSuccessLog } from '@typebot.io/bot-engine/logs/saveSuccessLog' const cors = initMiddleware(Cors()) diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts index d9fd0a299..740491446 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts @@ -1,5 +1,5 @@ import { authenticateUser } from '@/helpers/authenticateUser' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { ResultWithAnswers } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { methodNotAllowed } from '@typebot.io/lib/api' diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId].ts b/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId].ts index 750aa4508..1fd70e883 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId].ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId].ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Result } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { methodNotAllowed } from '@typebot.io/lib/api' diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId]/answers.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId]/answers.ts index 9763cd5bb..4affeeb31 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId]/answers.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/results/[resultId]/answers.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Answer } from '@typebot.io/prisma' import { got } from 'got' import { NextApiRequest, NextApiResponse } from 'next' diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/webhookBlocks.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/webhookBlocks.ts index 7831407ef..9ea9d21ce 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/webhookBlocks.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/webhookBlocks.ts @@ -1,5 +1,5 @@ import { authenticateUser } from '@/helpers/authenticateUser' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Group, WebhookBlock } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { byId, isWebhookBlock, parseGroupTitle } from '@typebot.io/lib' diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/webhookSteps.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/webhookSteps.ts index 3858c1fb4..ad2734330 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/webhookSteps.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/webhookSteps.ts @@ -1,5 +1,5 @@ import { authenticateUser } from '@/helpers/authenticateUser' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Group, WebhookBlock } from '@typebot.io/schemas' import { NextApiRequest, NextApiResponse } from 'next' import { diff --git a/apps/viewer/src/pages/old/[[...publicId]].tsx b/apps/viewer/src/pages/old/[[...publicId]].tsx index 083f94456..629b4c8de 100644 --- a/apps/viewer/src/pages/old/[[...publicId]].tsx +++ b/apps/viewer/src/pages/old/[[...publicId]].tsx @@ -3,8 +3,8 @@ import { ErrorPage } from '@/components/ErrorPage' import { NotFoundPage } from '@/components/NotFoundPage' import { GetServerSideProps, GetServerSidePropsContext } from 'next' import { isDefined, isNotDefined, omit } from '@typebot.io/lib' -import prisma from '../../lib/prisma' import { TypebotPageProps, TypebotPageV2 } from '@/components/TypebotPageV2' +import prisma from '@typebot.io/lib/prisma' export const getServerSideProps: GetServerSideProps = async ( context: GetServerSidePropsContext diff --git a/apps/viewer/src/features/chat/chat.spec.ts b/apps/viewer/src/test/chat.spec.ts similarity index 99% rename from apps/viewer/src/features/chat/chat.spec.ts rename to apps/viewer/src/test/chat.spec.ts index 99f034c7e..eee71307d 100644 --- a/apps/viewer/src/features/chat/chat.spec.ts +++ b/apps/viewer/src/test/chat.spec.ts @@ -1,7 +1,7 @@ import { getTestAsset } from '@/test/utils/playwright' import test, { expect } from '@playwright/test' import { createId } from '@paralleldrive/cuid2' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { SendMessageInput } from '@typebot.io/schemas' import { createWebhook, diff --git a/apps/viewer/src/features/blocks/integrations/chatwoot/chatwoot.spec.ts b/apps/viewer/src/test/chatwoot.spec.ts similarity index 100% rename from apps/viewer/src/features/blocks/integrations/chatwoot/chatwoot.spec.ts rename to apps/viewer/src/test/chatwoot.spec.ts diff --git a/apps/viewer/src/features/blocks/inputs/fileUpload/fileUpload.spec.ts b/apps/viewer/src/test/fileUpload.spec.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/fileUpload/fileUpload.spec.ts rename to apps/viewer/src/test/fileUpload.spec.ts diff --git a/apps/viewer/src/features/results/results.spec.ts b/apps/viewer/src/test/results.spec.ts similarity index 100% rename from apps/viewer/src/features/results/results.spec.ts rename to apps/viewer/src/test/results.spec.ts diff --git a/apps/viewer/src/features/blocks/integrations/sendEmail/sendEmail.spec.ts b/apps/viewer/src/test/sendEmail.spec.ts similarity index 94% rename from apps/viewer/src/features/blocks/integrations/sendEmail/sendEmail.spec.ts rename to apps/viewer/src/test/sendEmail.spec.ts index 0105897f7..f9e8dd16e 100644 --- a/apps/viewer/src/features/blocks/integrations/sendEmail/sendEmail.spec.ts +++ b/apps/viewer/src/test/sendEmail.spec.ts @@ -1,10 +1,10 @@ import test, { expect } from '@playwright/test' -import { createSmtpCredentials } from '../../../../test/utils/databaseActions' import { createId } from '@paralleldrive/cuid2' import { importTypebotInDatabase } from '@typebot.io/lib/playwright/databaseActions' import { getTestAsset } from '@/test/utils/playwright' import { SmtpCredentials } from '@typebot.io/schemas' import { env } from '@typebot.io/env' +import { createSmtpCredentials } from './utils/databaseActions' export const mockSmtpCredentials: SmtpCredentials['data'] = { from: { diff --git a/apps/viewer/src/features/settings/settings.spec.ts b/apps/viewer/src/test/settings.spec.ts similarity index 100% rename from apps/viewer/src/features/settings/settings.spec.ts rename to apps/viewer/src/test/settings.spec.ts diff --git a/apps/viewer/src/features/blocks/logic/typebotLink/typebotLink.spec.ts b/apps/viewer/src/test/typebotLink.spec.ts similarity index 100% rename from apps/viewer/src/features/blocks/logic/typebotLink/typebotLink.spec.ts rename to apps/viewer/src/test/typebotLink.spec.ts diff --git a/apps/viewer/src/features/variables/variables.spec.ts b/apps/viewer/src/test/variables.spec.ts similarity index 100% rename from apps/viewer/src/features/variables/variables.spec.ts rename to apps/viewer/src/test/variables.spec.ts diff --git a/apps/viewer/src/features/blocks/integrations/webhook/webhook.spec.ts b/apps/viewer/src/test/webhook.spec.ts similarity index 100% rename from apps/viewer/src/features/blocks/integrations/webhook/webhook.spec.ts rename to apps/viewer/src/test/webhook.spec.ts diff --git a/apps/viewer/src/trpc/generateOpenApi.ts b/apps/viewer/src/trpc/generateOpenApi.ts new file mode 100644 index 000000000..88cee9df0 --- /dev/null +++ b/apps/viewer/src/trpc/generateOpenApi.ts @@ -0,0 +1,15 @@ +import { generateOpenApiDocument } from 'trpc-openapi' +import { writeFileSync } from 'fs' +import { appRouter } from '@/helpers/server/routers/v1/_app' + +const openApiDocument = generateOpenApiDocument(appRouter, { + title: 'Chat API', + version: '1.0.0', + baseUrl: 'https://typebot.io/api/v1', + docsUrl: 'https://docs.typebot.io/api', +}) + +writeFileSync( + './openapi/chat/_spec_.json', + JSON.stringify(openApiDocument, null, 2) +) diff --git a/apps/viewer/src/features/chat/helpers/addEdgeToTypebot.ts b/packages/bot-engine/addEdgeToTypebot.ts similarity index 100% rename from apps/viewer/src/features/chat/helpers/addEdgeToTypebot.ts rename to packages/bot-engine/addEdgeToTypebot.ts diff --git a/apps/viewer/src/features/blocks/inputs/buttons/filterChoiceItems.ts b/packages/bot-engine/blocks/inputs/buttons/filterChoiceItems.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/buttons/filterChoiceItems.ts rename to packages/bot-engine/blocks/inputs/buttons/filterChoiceItems.ts diff --git a/apps/viewer/src/features/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts b/packages/bot-engine/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts similarity index 82% rename from apps/viewer/src/features/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts rename to packages/bot-engine/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts index 313fe5278..cc7cc69cf 100644 --- a/apps/viewer/src/features/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts +++ b/packages/bot-engine/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock.ts @@ -5,10 +5,10 @@ import { ItemType, } from '@typebot.io/schemas' import { isDefined } from '@typebot.io/lib' -import { deepParseVariables } from '@/features/variables/deepParseVariable' -import { transformStringVariablesToList } from '@/features/variables/transformVariablesToList' -import { updateVariables } from '@/features/variables/updateVariables' import { filterChoiceItems } from './filterChoiceItems' +import { deepParseVariables } from '../../../variables/deepParseVariables' +import { transformStringVariablesToList } from '../../../variables/transformVariablesToList' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' export const injectVariableValuesInButtonsInputBlock = (state: SessionState) => @@ -43,7 +43,7 @@ const getVariableValue = const [transformedVariable] = transformStringVariablesToList(variables)([ variable.id, ]) - updateVariables(state)([transformedVariable]) + updateVariablesInSession(state)([transformedVariable]) return transformedVariable.value as string[] } return variable.value diff --git a/apps/viewer/src/features/blocks/inputs/buttons/parseButtonsReply.ts b/packages/bot-engine/blocks/inputs/buttons/parseButtonsReply.ts similarity index 98% rename from apps/viewer/src/features/blocks/inputs/buttons/parseButtonsReply.ts rename to packages/bot-engine/blocks/inputs/buttons/parseButtonsReply.ts index 9d2ce5088..9624c1240 100644 --- a/apps/viewer/src/features/blocks/inputs/buttons/parseButtonsReply.ts +++ b/packages/bot-engine/blocks/inputs/buttons/parseButtonsReply.ts @@ -1,6 +1,6 @@ import { ChoiceInputBlock, SessionState } from '@typebot.io/schemas' import { injectVariableValuesInButtonsInputBlock } from './injectVariableValuesInButtonsInputBlock' -import { ParsedReply } from '@/features/chat/types' +import { ParsedReply } from '../../../types' export const parseButtonsReply = (state: SessionState) => diff --git a/apps/viewer/src/features/blocks/inputs/date/parseDateInput.ts b/packages/bot-engine/blocks/inputs/date/parseDateInput.ts similarity index 84% rename from apps/viewer/src/features/blocks/inputs/date/parseDateInput.ts rename to packages/bot-engine/blocks/inputs/date/parseDateInput.ts index d276da72e..861d80ecd 100644 --- a/apps/viewer/src/features/blocks/inputs/date/parseDateInput.ts +++ b/packages/bot-engine/blocks/inputs/date/parseDateInput.ts @@ -1,12 +1,12 @@ -import { getPrefilledInputValue } from '@/features/chat/helpers/getPrefilledValue' -import { deepParseVariables } from '@/features/variables/deepParseVariable' -import { parseVariables } from '@/features/variables/parseVariables' +import { getPrefilledInputValue } from '../../../getPrefilledValue' import { DateInputBlock, DateInputOptions, SessionState, Variable, } from '@typebot.io/schemas' +import { deepParseVariables } from '../../../variables/deepParseVariables' +import { parseVariables } from '../../../variables/parseVariables' export const parseDateInput = (state: SessionState) => (block: DateInputBlock) => { diff --git a/apps/viewer/src/features/blocks/inputs/date/parseDateReply.ts b/packages/bot-engine/blocks/inputs/date/parseDateReply.ts similarity index 96% rename from apps/viewer/src/features/blocks/inputs/date/parseDateReply.ts rename to packages/bot-engine/blocks/inputs/date/parseDateReply.ts index e669775f9..cc620093f 100644 --- a/apps/viewer/src/features/blocks/inputs/date/parseDateReply.ts +++ b/packages/bot-engine/blocks/inputs/date/parseDateReply.ts @@ -1,4 +1,4 @@ -import { ParsedReply } from '@/features/chat/types' +import { ParsedReply } from '../../../types' import { DateInputBlock } from '@typebot.io/schemas' import { parse as chronoParse } from 'chrono-node' import { format } from 'date-fns' diff --git a/apps/viewer/src/features/blocks/inputs/email/validateEmail.ts b/packages/bot-engine/blocks/inputs/email/validateEmail.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/email/validateEmail.ts rename to packages/bot-engine/blocks/inputs/email/validateEmail.ts diff --git a/apps/viewer/src/features/blocks/inputs/number/validateNumber.ts b/packages/bot-engine/blocks/inputs/number/validateNumber.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/number/validateNumber.ts rename to packages/bot-engine/blocks/inputs/number/validateNumber.ts diff --git a/apps/viewer/src/features/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts b/packages/bot-engine/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts similarity index 96% rename from apps/viewer/src/features/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts rename to packages/bot-engine/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts index 20549d27e..d9033fc19 100644 --- a/apps/viewer/src/features/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts +++ b/packages/bot-engine/blocks/inputs/payment/computePaymentInputRuntimeOptions.ts @@ -1,5 +1,3 @@ -import { parseVariables } from '@/features/variables/parseVariables' -import prisma from '@/lib/prisma' import { TRPCError } from '@trpc/server' import { PaymentInputOptions, @@ -9,6 +7,8 @@ import { } from '@typebot.io/schemas' import Stripe from 'stripe' import { decrypt } from '@typebot.io/lib/api/encryption' +import { parseVariables } from '../../../variables/parseVariables' +import prisma from '@typebot.io/lib/prisma' export const computePaymentInputRuntimeOptions = (state: SessionState) => (options: PaymentInputOptions) => diff --git a/apps/viewer/src/features/blocks/inputs/phone/formatPhoneNumber.ts b/packages/bot-engine/blocks/inputs/phone/formatPhoneNumber.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/phone/formatPhoneNumber.ts rename to packages/bot-engine/blocks/inputs/phone/formatPhoneNumber.ts diff --git a/apps/viewer/src/features/blocks/inputs/pictureChoice/filterPictureChoiceItems.ts b/packages/bot-engine/blocks/inputs/pictureChoice/filterPictureChoiceItems.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/pictureChoice/filterPictureChoiceItems.ts rename to packages/bot-engine/blocks/inputs/pictureChoice/filterPictureChoiceItems.ts diff --git a/apps/viewer/src/features/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts b/packages/bot-engine/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts similarity index 96% rename from apps/viewer/src/features/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts rename to packages/bot-engine/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts index d5fd257ce..8d29496ea 100644 --- a/apps/viewer/src/features/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts +++ b/packages/bot-engine/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts @@ -5,8 +5,8 @@ import { Variable, } from '@typebot.io/schemas' import { isDefined } from '@typebot.io/lib' -import { deepParseVariables } from '@/features/variables/deepParseVariable' import { filterPictureChoiceItems } from './filterPictureChoiceItems' +import { deepParseVariables } from '../../../variables/deepParseVariables' export const injectVariableValuesInPictureChoiceBlock = (variables: Variable[]) => diff --git a/apps/viewer/src/features/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts b/packages/bot-engine/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts similarity index 98% rename from apps/viewer/src/features/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts rename to packages/bot-engine/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts index 956edcc35..f98a4ff0e 100644 --- a/apps/viewer/src/features/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts +++ b/packages/bot-engine/blocks/inputs/pictureChoice/parsePictureChoicesReply.ts @@ -1,5 +1,5 @@ import { PictureChoiceBlock, SessionState } from '@typebot.io/schemas' -import { ParsedReply } from '@/features/chat/types' +import { ParsedReply } from '../../../types' import { injectVariableValuesInPictureChoiceBlock } from './injectVariableValuesInPictureChoiceBlock' export const parsePictureChoicesReply = diff --git a/apps/viewer/src/features/blocks/inputs/rating/validateRatingReply.ts b/packages/bot-engine/blocks/inputs/rating/validateRatingReply.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/rating/validateRatingReply.ts rename to packages/bot-engine/blocks/inputs/rating/validateRatingReply.ts diff --git a/apps/viewer/src/features/blocks/inputs/url/validateUrl.ts b/packages/bot-engine/blocks/inputs/url/validateUrl.ts similarity index 100% rename from apps/viewer/src/features/blocks/inputs/url/validateUrl.ts rename to packages/bot-engine/blocks/inputs/url/validateUrl.ts diff --git a/apps/viewer/src/features/blocks/integrations/chatwoot/executeChatwootBlock.ts b/packages/bot-engine/blocks/integrations/chatwoot/executeChatwootBlock.ts similarity index 91% rename from apps/viewer/src/features/blocks/integrations/chatwoot/executeChatwootBlock.ts rename to packages/bot-engine/blocks/integrations/chatwoot/executeChatwootBlock.ts index 0e167ba45..a5a87c22f 100644 --- a/apps/viewer/src/features/blocks/integrations/chatwoot/executeChatwootBlock.ts +++ b/packages/bot-engine/blocks/integrations/chatwoot/executeChatwootBlock.ts @@ -1,7 +1,4 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import { extractVariablesFromText } from '@/features/variables/extractVariablesFromText' -import { parseGuessedValueType } from '@/features/variables/parseGuessedValueType' -import { parseVariables } from '@/features/variables/parseVariables' +import { ExecuteIntegrationResponse } from '../../../types' import { env } from '@typebot.io/env' import { isDefined } from '@typebot.io/lib' import { @@ -9,6 +6,9 @@ import { ChatwootOptions, SessionState, } from '@typebot.io/schemas' +import { extractVariablesFromText } from '../../../variables/extractVariablesFromText' +import { parseGuessedValueType } from '../../../variables/parseGuessedValueType' +import { parseVariables } from '../../../variables/parseVariables' const parseSetUserCode = (user: ChatwootOptions['user'], resultId: string) => user?.email || user?.id diff --git a/apps/viewer/src/features/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts b/packages/bot-engine/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts similarity index 81% rename from apps/viewer/src/features/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts rename to packages/bot-engine/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts index 9ccc87abd..33b6383a7 100644 --- a/apps/viewer/src/features/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts +++ b/packages/bot-engine/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock.ts @@ -1,6 +1,6 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import { deepParseVariables } from '@/features/variables/deepParseVariable' +import { ExecuteIntegrationResponse } from '../../../types' import { GoogleAnalyticsBlock, SessionState } from '@typebot.io/schemas' +import { deepParseVariables } from '../../../variables/deepParseVariables' export const executeGoogleAnalyticsBlock = ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts b/packages/bot-engine/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts similarity index 93% rename from apps/viewer/src/features/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts rename to packages/bot-engine/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts index aa9989e1d..cbef8e2a2 100644 --- a/apps/viewer/src/features/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts +++ b/packages/bot-engine/blocks/integrations/googleSheets/executeGoogleSheetBlock.ts @@ -6,7 +6,7 @@ import { import { insertRow } from './insertRow' import { updateRow } from './updateRow' import { getRow } from './getRow' -import { ExecuteIntegrationResponse } from '@/features/chat/types' +import { ExecuteIntegrationResponse } from '../../../types' export const executeGoogleSheetBlock = async ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/getRow.ts b/packages/bot-engine/blocks/integrations/googleSheets/getRow.ts similarity index 90% rename from apps/viewer/src/features/blocks/integrations/googleSheets/getRow.ts rename to packages/bot-engine/blocks/integrations/googleSheets/getRow.ts index 82b67ea12..b693256cd 100644 --- a/apps/viewer/src/features/blocks/integrations/googleSheets/getRow.ts +++ b/packages/bot-engine/blocks/integrations/googleSheets/getRow.ts @@ -6,10 +6,10 @@ import { } from '@typebot.io/schemas' import { isNotEmpty, byId } from '@typebot.io/lib' import { getAuthenticatedGoogleDoc } from './helpers/getAuthenticatedGoogleDoc' -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import { updateVariables } from '@/features/variables/updateVariables' -import { deepParseVariables } from '@/features/variables/deepParseVariable' +import { ExecuteIntegrationResponse } from '../../../types' import { matchFilter } from './helpers/matchFilter' +import { deepParseVariables } from '../../../variables/deepParseVariables' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' export const getRow = async ( state: SessionState, @@ -75,7 +75,7 @@ export const getRow = async ( }, [] ) - const newSessionState = updateVariables(state)(newVariables) + const newSessionState = updateVariablesInSession(state)(newVariables) return { outgoingEdgeId, newSessionState, diff --git a/packages/bot-engine/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts b/packages/bot-engine/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts new file mode 100644 index 000000000..560283168 --- /dev/null +++ b/packages/bot-engine/blocks/integrations/googleSheets/helpers/getAuthenticatedGoogleDoc.ts @@ -0,0 +1,75 @@ +import { TRPCError } from '@trpc/server' +import { env } from '@typebot.io/env' +import { decrypt, encrypt } from '@typebot.io/lib/api/encryption' +import { isDefined } from '@typebot.io/lib/utils' +import { GoogleSheetsCredentials } from '@typebot.io/schemas/features/blocks/integrations/googleSheets/schemas' +import { Credentials as CredentialsFromDb } from '@typebot.io/prisma' +import { GoogleSpreadsheet } from 'google-spreadsheet' +import { OAuth2Client, Credentials } from 'google-auth-library' +import prisma from '@typebot.io/lib/prisma' + +export const getAuthenticatedGoogleDoc = async ({ + credentialsId, + spreadsheetId, +}: { + credentialsId?: string + spreadsheetId?: string +}) => { + if (!credentialsId || !spreadsheetId) + throw new TRPCError({ + code: 'BAD_REQUEST', + message: 'Missing credentialsId or spreadsheetId', + }) + const auth = await getAuthenticatedGoogleClient(credentialsId) + if (!auth) + throw new TRPCError({ + code: 'NOT_FOUND', + message: "Couldn't find credentials in database", + }) + return new GoogleSpreadsheet(spreadsheetId, auth) +} + +const getAuthenticatedGoogleClient = async ( + credentialsId: string +): Promise => { + const credentials = (await prisma.credentials.findFirst({ + where: { id: credentialsId }, + })) as CredentialsFromDb | undefined + if (!credentials) return + const data = (await decrypt( + credentials.data, + credentials.iv + )) as GoogleSheetsCredentials['data'] + + const oauth2Client = new OAuth2Client( + env.GOOGLE_CLIENT_ID, + env.GOOGLE_CLIENT_SECRET, + `${env.NEXTAUTH_URL}/api/credentials/google-sheets/callback` + ) + oauth2Client.setCredentials(data) + oauth2Client.on('tokens', updateTokens(credentialsId, data)) + return oauth2Client +} + +const updateTokens = + ( + credentialsId: string, + existingCredentials: GoogleSheetsCredentials['data'] + ) => + async (credentials: Credentials) => { + if ( + isDefined(existingCredentials.id_token) && + credentials.id_token !== existingCredentials.id_token + ) + return + const newCredentials: GoogleSheetsCredentials['data'] = { + ...existingCredentials, + expiry_date: credentials.expiry_date, + access_token: credentials.access_token, + } + const { encryptedData, iv } = await encrypt(newCredentials) + await prisma.credentials.updateMany({ + where: { id: credentialsId }, + data: { data: encryptedData, iv }, + }) + } diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/helpers/matchFilter.ts b/packages/bot-engine/blocks/integrations/googleSheets/helpers/matchFilter.ts similarity index 100% rename from apps/viewer/src/features/blocks/integrations/googleSheets/helpers/matchFilter.ts rename to packages/bot-engine/blocks/integrations/googleSheets/helpers/matchFilter.ts diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/helpers/parseCellValues.ts b/packages/bot-engine/blocks/integrations/googleSheets/helpers/parseCellValues.ts similarity index 84% rename from apps/viewer/src/features/blocks/integrations/googleSheets/helpers/parseCellValues.ts rename to packages/bot-engine/blocks/integrations/googleSheets/helpers/parseCellValues.ts index f5bc60450..e93ca3a75 100644 --- a/apps/viewer/src/features/blocks/integrations/googleSheets/helpers/parseCellValues.ts +++ b/packages/bot-engine/blocks/integrations/googleSheets/helpers/parseCellValues.ts @@ -1,5 +1,5 @@ -import { parseVariables } from '@/features/variables/parseVariables' import { Variable, Cell } from '@typebot.io/schemas' +import { parseVariables } from '../../../../variables/parseVariables' export const parseCellValues = (variables: Variable[]) => diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/insertRow.ts b/packages/bot-engine/blocks/integrations/googleSheets/insertRow.ts similarity index 94% rename from apps/viewer/src/features/blocks/integrations/googleSheets/insertRow.ts rename to packages/bot-engine/blocks/integrations/googleSheets/insertRow.ts index bbdff7216..59f16c148 100644 --- a/apps/viewer/src/features/blocks/integrations/googleSheets/insertRow.ts +++ b/packages/bot-engine/blocks/integrations/googleSheets/insertRow.ts @@ -5,7 +5,7 @@ import { } from '@typebot.io/schemas' import { parseCellValues } from './helpers/parseCellValues' import { getAuthenticatedGoogleDoc } from './helpers/getAuthenticatedGoogleDoc' -import { ExecuteIntegrationResponse } from '@/features/chat/types' +import { ExecuteIntegrationResponse } from '../../../types' export const insertRow = async ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/googleSheets/updateRow.ts b/packages/bot-engine/blocks/integrations/googleSheets/updateRow.ts similarity index 93% rename from apps/viewer/src/features/blocks/integrations/googleSheets/updateRow.ts rename to packages/bot-engine/blocks/integrations/googleSheets/updateRow.ts index 6b5f16052..f2094ecc5 100644 --- a/apps/viewer/src/features/blocks/integrations/googleSheets/updateRow.ts +++ b/packages/bot-engine/blocks/integrations/googleSheets/updateRow.ts @@ -5,9 +5,9 @@ import { } from '@typebot.io/schemas' import { parseCellValues } from './helpers/parseCellValues' import { getAuthenticatedGoogleDoc } from './helpers/getAuthenticatedGoogleDoc' -import { deepParseVariables } from '@/features/variables/deepParseVariable' -import { ExecuteIntegrationResponse } from '@/features/chat/types' +import { ExecuteIntegrationResponse } from '../../../types' import { matchFilter } from './helpers/matchFilter' +import { deepParseVariables } from '../../../variables/deepParseVariables' export const updateRow = async ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/openai/createChatCompletionOpenAI.ts b/packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts similarity index 91% rename from apps/viewer/src/features/blocks/integrations/openai/createChatCompletionOpenAI.ts rename to packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts index c6c4a71d5..01366c1df 100644 --- a/apps/viewer/src/features/blocks/integrations/openai/createChatCompletionOpenAI.ts +++ b/packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts @@ -1,5 +1,3 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import prisma from '@/lib/prisma' import { Block, BubbleBlockType, @@ -13,12 +11,14 @@ import { } from '@typebot.io/schemas/features/blocks/integrations/openai' import { byId, isEmpty } from '@typebot.io/lib' import { decrypt, isCredentialsV2 } from '@typebot.io/lib/api/encryption' -import { updateVariables } from '@/features/variables/updateVariables' -import { parseVariableNumber } from '@/features/variables/parseVariableNumber' import { resumeChatCompletion } from './resumeChatCompletion' import { parseChatCompletionMessages } from './parseChatCompletionMessages' import { executeChatCompletionOpenAIRequest } from './executeChatCompletionOpenAIRequest' -import { isPlaneteScale } from '@/helpers/api/isPlanetScale' +import { isPlaneteScale } from '@typebot.io/lib/isPlanetScale' +import prisma from '@typebot.io/lib/prisma' +import { ExecuteIntegrationResponse } from '../../../types' +import { parseVariableNumber } from '../../../variables/parseVariableNumber' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' export const createChatCompletionOpenAI = async ( state: SessionState, @@ -63,7 +63,9 @@ export const createChatCompletionOpenAI = async ( typebot.variables )(options.messages) if (variablesTransformedToList.length > 0) - newSessionState = updateVariables(state)(variablesTransformedToList) + newSessionState = updateVariablesInSession(state)( + variablesTransformedToList + ) const temperature = parseVariableNumber(typebot.variables)( options.advancedSettings?.temperature diff --git a/apps/viewer/src/features/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts b/packages/bot-engine/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts similarity index 100% rename from apps/viewer/src/features/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts rename to packages/bot-engine/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts diff --git a/apps/viewer/src/features/blocks/integrations/openai/executeOpenAIBlock.ts b/packages/bot-engine/blocks/integrations/openai/executeOpenAIBlock.ts similarity index 90% rename from apps/viewer/src/features/blocks/integrations/openai/executeOpenAIBlock.ts rename to packages/bot-engine/blocks/integrations/openai/executeOpenAIBlock.ts index 9bab97818..ac9a7805d 100644 --- a/apps/viewer/src/features/blocks/integrations/openai/executeOpenAIBlock.ts +++ b/packages/bot-engine/blocks/integrations/openai/executeOpenAIBlock.ts @@ -1,7 +1,7 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' import { SessionState } from '@typebot.io/schemas' import { OpenAIBlock } from '@typebot.io/schemas/features/blocks/integrations/openai' import { createChatCompletionOpenAI } from './createChatCompletionOpenAI' +import { ExecuteIntegrationResponse } from '../../../types' export const executeOpenAIBlock = async ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/openai/getChatCompletionStream.ts b/packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts similarity index 96% rename from apps/viewer/src/features/blocks/integrations/openai/getChatCompletionStream.ts rename to packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts index b64f039b9..f1c61620a 100644 --- a/apps/viewer/src/features/blocks/integrations/openai/getChatCompletionStream.ts +++ b/packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts @@ -1,4 +1,3 @@ -import { parseVariableNumber } from '@/features/variables/parseVariableNumber' import { Connection } from '@planetscale/database' import { decrypt } from '@typebot.io/lib/api/encryption' import { isNotEmpty } from '@typebot.io/lib/utils' @@ -13,6 +12,7 @@ import { Configuration, OpenAIApi, } from 'openai-edge' +import { parseVariableNumber } from '../../../variables/parseVariableNumber' export const getChatCompletionStream = (conn: Connection) => diff --git a/apps/viewer/src/features/blocks/integrations/openai/parseChatCompletionMessages.ts b/packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts similarity index 95% rename from apps/viewer/src/features/blocks/integrations/openai/parseChatCompletionMessages.ts rename to packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts index d427d233e..07e8069e4 100644 --- a/apps/viewer/src/features/blocks/integrations/openai/parseChatCompletionMessages.ts +++ b/packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts @@ -1,9 +1,9 @@ -import { parseVariables } from '@/features/variables/parseVariables' -import { transformStringVariablesToList } from '@/features/variables/transformVariablesToList' import { byId, isNotEmpty } from '@typebot.io/lib' import { Variable, VariableWithValue } from '@typebot.io/schemas' import { ChatCompletionOpenAIOptions } from '@typebot.io/schemas/features/blocks/integrations/openai' import type { ChatCompletionRequestMessage } from 'openai-edge' +import { parseVariables } from '../../../variables/parseVariables' +import { transformStringVariablesToList } from '../../../variables/transformVariablesToList' export const parseChatCompletionMessages = (variables: Variable[]) => diff --git a/apps/viewer/src/features/blocks/integrations/openai/resumeChatCompletion.ts b/packages/bot-engine/blocks/integrations/openai/resumeChatCompletion.ts similarity index 90% rename from apps/viewer/src/features/blocks/integrations/openai/resumeChatCompletion.ts rename to packages/bot-engine/blocks/integrations/openai/resumeChatCompletion.ts index 79eb99038..dbf17b8c9 100644 --- a/apps/viewer/src/features/blocks/integrations/openai/resumeChatCompletion.ts +++ b/packages/bot-engine/blocks/integrations/openai/resumeChatCompletion.ts @@ -1,8 +1,8 @@ -import { updateVariables } from '@/features/variables/updateVariables' import { byId, isDefined } from '@typebot.io/lib' import { ChatReply, SessionState } from '@typebot.io/schemas' import { ChatCompletionOpenAIOptions } from '@typebot.io/schemas/features/blocks/integrations/openai' import { VariableWithUnknowValue } from '@typebot.io/schemas/features/typebot/variable' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' export const resumeChatCompletion = ( @@ -42,7 +42,7 @@ export const resumeChatCompletion = return newVariables }, []) if (newVariables.length > 0) - newSessionState = updateVariables(newSessionState)(newVariables) + newSessionState = updateVariablesInSession(newSessionState)(newVariables) return { outgoingEdgeId, newSessionState, diff --git a/apps/viewer/src/features/blocks/integrations/pixel/executePixelBlock.ts b/packages/bot-engine/blocks/integrations/pixel/executePixelBlock.ts similarity index 83% rename from apps/viewer/src/features/blocks/integrations/pixel/executePixelBlock.ts rename to packages/bot-engine/blocks/integrations/pixel/executePixelBlock.ts index 68730c0fa..d877b88ee 100644 --- a/apps/viewer/src/features/blocks/integrations/pixel/executePixelBlock.ts +++ b/packages/bot-engine/blocks/integrations/pixel/executePixelBlock.ts @@ -1,6 +1,6 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import { deepParseVariables } from '@/features/variables/deepParseVariable' import { PixelBlock, SessionState } from '@typebot.io/schemas' +import { ExecuteIntegrationResponse } from '../../../types' +import { deepParseVariables } from '../../../variables/deepParseVariables' export const executePixelBlock = ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/sendEmail/constants.ts b/packages/bot-engine/blocks/integrations/sendEmail/constants.ts similarity index 100% rename from apps/viewer/src/features/blocks/integrations/sendEmail/constants.ts rename to packages/bot-engine/blocks/integrations/sendEmail/constants.ts diff --git a/apps/viewer/src/features/blocks/integrations/sendEmail/executeSendEmailBlock.tsx b/packages/bot-engine/blocks/integrations/sendEmail/executeSendEmailBlock.tsx similarity index 96% rename from apps/viewer/src/features/blocks/integrations/sendEmail/executeSendEmailBlock.tsx rename to packages/bot-engine/blocks/integrations/sendEmail/executeSendEmailBlock.tsx index 53cb5a85e..b37b9dd74 100644 --- a/apps/viewer/src/features/blocks/integrations/sendEmail/executeSendEmailBlock.tsx +++ b/packages/bot-engine/blocks/integrations/sendEmail/executeSendEmailBlock.tsx @@ -1,7 +1,4 @@ -import { parseVariables } from '@/features/variables/parseVariables' -import prisma from '@/lib/prisma' -import { render } from '@faire/mjml-react/utils/render' -import { DefaultBotNotificationEmail } from '@typebot.io/emails' +import { DefaultBotNotificationEmail, render } from '@typebot.io/emails' import { AnswerInSessionState, ReplyLog, @@ -18,9 +15,11 @@ import { byId, isDefined, isEmpty, isNotDefined, omit } from '@typebot.io/lib' import { getDefinedVariables, parseAnswers } from '@typebot.io/lib/results' import { decrypt } from '@typebot.io/lib/api' import { defaultFrom, defaultTransportOptions } from './constants' -import { ExecuteIntegrationResponse } from '@/features/chat/types' import { findUniqueVariableValue } from '../../../variables/findUniqueVariableValue' import { env } from '@typebot.io/env' +import { ExecuteIntegrationResponse } from '../../../types' +import prisma from '@typebot.io/lib/prisma' +import { parseVariables } from '../../../variables/parseVariables' export const executeSendEmailBlock = async ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/integrations/webhook/executeWebhookBlock.ts b/packages/bot-engine/blocks/integrations/webhook/executeWebhookBlock.ts similarity index 97% rename from apps/viewer/src/features/blocks/integrations/webhook/executeWebhookBlock.ts rename to packages/bot-engine/blocks/integrations/webhook/executeWebhookBlock.ts index 7e1151852..c25fbfa0b 100644 --- a/apps/viewer/src/features/blocks/integrations/webhook/executeWebhookBlock.ts +++ b/packages/bot-engine/blocks/integrations/webhook/executeWebhookBlock.ts @@ -1,4 +1,3 @@ -import prisma from '@/lib/prisma' import { WebhookBlock, ZapierBlock, @@ -19,10 +18,11 @@ import { stringify } from 'qs' import { omit } from '@typebot.io/lib' import { getDefinedVariables, parseAnswers } from '@typebot.io/lib/results' import got, { Method, HTTPError, OptionsInit } from 'got' -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import { parseVariables } from '@/features/variables/parseVariables' import { resumeWebhookExecution } from './resumeWebhookExecution' import { HttpMethod } from '@typebot.io/schemas/features/blocks/integrations/webhook/enums' +import { ExecuteIntegrationResponse } from '../../../types' +import { parseVariables } from '../../../variables/parseVariables' +import prisma from '@typebot.io/lib/prisma' type ParsedWebhook = ExecutableWebhook & { basicAuth: { username?: string; password?: string } diff --git a/apps/viewer/src/features/blocks/integrations/webhook/parseSampleResult.ts b/packages/bot-engine/blocks/integrations/webhook/parseSampleResult.ts similarity index 100% rename from apps/viewer/src/features/blocks/integrations/webhook/parseSampleResult.ts rename to packages/bot-engine/blocks/integrations/webhook/parseSampleResult.ts diff --git a/apps/viewer/src/features/blocks/integrations/webhook/resumeWebhookExecution.ts b/packages/bot-engine/blocks/integrations/webhook/resumeWebhookExecution.ts similarity index 87% rename from apps/viewer/src/features/blocks/integrations/webhook/resumeWebhookExecution.ts rename to packages/bot-engine/blocks/integrations/webhook/resumeWebhookExecution.ts index 295ab2321..85f6faffa 100644 --- a/apps/viewer/src/features/blocks/integrations/webhook/resumeWebhookExecution.ts +++ b/packages/bot-engine/blocks/integrations/webhook/resumeWebhookExecution.ts @@ -1,6 +1,3 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import { parseVariables } from '@/features/variables/parseVariables' -import { updateVariables } from '@/features/variables/updateVariables' import { byId } from '@typebot.io/lib' import { MakeComBlock, @@ -11,6 +8,9 @@ import { ZapierBlock, } from '@typebot.io/schemas' import { SessionState } from '@typebot.io/schemas/features/chat/sessionState' +import { ExecuteIntegrationResponse } from '../../../types' +import { parseVariables } from '../../../variables/parseVariables' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' type Props = { state: SessionState @@ -67,7 +67,7 @@ export const resumeWebhookExecution = ({ } }, []) if (newVariables.length > 0) { - const newSessionState = updateVariables(state)(newVariables) + const newSessionState = updateVariablesInSession(state)(newVariables) return { outgoingEdgeId: block.outgoingEdgeId, newSessionState, diff --git a/apps/viewer/src/features/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts b/packages/bot-engine/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts similarity index 90% rename from apps/viewer/src/features/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts rename to packages/bot-engine/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts index a0079af74..95f4881ae 100644 --- a/apps/viewer/src/features/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts +++ b/packages/bot-engine/blocks/integrations/zemanticAi/executeZemanticAiBlock.ts @@ -1,5 +1,3 @@ -import { ExecuteIntegrationResponse } from '@/features/chat/types' -import prisma from '@/lib/prisma' import { SessionState } from '@typebot.io/schemas' import { ZemanticAiBlock, @@ -9,8 +7,10 @@ import { import got from 'got' import { decrypt } from '@typebot.io/lib/api/encryption' import { byId, isDefined, isEmpty } from '@typebot.io/lib' -import { updateVariables } from '@/features/variables/updateVariables' import { getDefinedVariables, parseAnswers } from '@typebot.io/lib/results' +import prisma from '@typebot.io/lib/prisma' +import { ExecuteIntegrationResponse } from '../../../types' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' const URL = 'https://api.zemantic.ai/v1/search-documents' @@ -89,14 +89,14 @@ export const executeZemanticAiBlock = async ( switch (r.valueToExtract) { case 'Summary': if (isDefined(variable) && !isEmpty(res.summary)) { - newSessionState = updateVariables(newSessionState)([ + newSessionState = updateVariablesInSession(newSessionState)([ { ...variable, value: res.summary }, ]) } break case 'Results': if (isDefined(variable) && res.results.length) { - newSessionState = updateVariables(newSessionState)([ + newSessionState = updateVariablesInSession(newSessionState)([ { ...variable, value: JSON.stringify(res.results) }, ]) } diff --git a/apps/viewer/src/features/blocks/logic/abTest/executeAbTest.ts b/packages/bot-engine/blocks/logic/abTest/executeAbTest.ts similarity index 89% rename from apps/viewer/src/features/blocks/logic/abTest/executeAbTest.ts rename to packages/bot-engine/blocks/logic/abTest/executeAbTest.ts index 1b321eb10..a6ba7db38 100644 --- a/apps/viewer/src/features/blocks/logic/abTest/executeAbTest.ts +++ b/packages/bot-engine/blocks/logic/abTest/executeAbTest.ts @@ -1,5 +1,5 @@ import { AbTestBlock, SessionState } from '@typebot.io/schemas' -import { ExecuteLogicResponse } from '@/features/chat/types' +import { ExecuteLogicResponse } from '../../../types' export const executeAbTest = ( _: SessionState, diff --git a/apps/viewer/src/features/blocks/logic/condition/executeCondition.ts b/packages/bot-engine/blocks/logic/condition/executeCondition.ts similarity index 97% rename from apps/viewer/src/features/blocks/logic/condition/executeCondition.ts rename to packages/bot-engine/blocks/logic/condition/executeCondition.ts index 2a97b8a05..241efefb1 100644 --- a/apps/viewer/src/features/blocks/logic/condition/executeCondition.ts +++ b/packages/bot-engine/blocks/logic/condition/executeCondition.ts @@ -1,5 +1,3 @@ -import { findUniqueVariableValue } from '@/features/variables/findUniqueVariableValue' -import { parseVariables } from '@/features/variables/parseVariables' import { isNotDefined, isDefined } from '@typebot.io/lib' import { Comparison, @@ -8,6 +6,8 @@ import { LogicalOperator, Variable, } from '@typebot.io/schemas' +import { findUniqueVariableValue } from '../../../variables/findUniqueVariableValue' +import { parseVariables } from '../../../variables/parseVariables' export const executeCondition = (variables: Variable[]) => diff --git a/apps/viewer/src/features/blocks/logic/condition/executeConditionBlock.ts b/packages/bot-engine/blocks/logic/condition/executeConditionBlock.ts similarity index 89% rename from apps/viewer/src/features/blocks/logic/condition/executeConditionBlock.ts rename to packages/bot-engine/blocks/logic/condition/executeConditionBlock.ts index 289541086..7f626e326 100644 --- a/apps/viewer/src/features/blocks/logic/condition/executeConditionBlock.ts +++ b/packages/bot-engine/blocks/logic/condition/executeConditionBlock.ts @@ -1,5 +1,5 @@ import { ConditionBlock, SessionState } from '@typebot.io/schemas' -import { ExecuteLogicResponse } from '@/features/chat/types' +import { ExecuteLogicResponse } from '../../../types' import { executeCondition } from './executeCondition' export const executeConditionBlock = ( diff --git a/apps/viewer/src/features/blocks/logic/jump/executeJumpBlock.ts b/packages/bot-engine/blocks/logic/jump/executeJumpBlock.ts similarity index 85% rename from apps/viewer/src/features/blocks/logic/jump/executeJumpBlock.ts rename to packages/bot-engine/blocks/logic/jump/executeJumpBlock.ts index f46d0ab17..69a9281b0 100644 --- a/apps/viewer/src/features/blocks/logic/jump/executeJumpBlock.ts +++ b/packages/bot-engine/blocks/logic/jump/executeJumpBlock.ts @@ -1,8 +1,5 @@ -import { - addEdgeToTypebot, - createPortalEdge, -} from '@/features/chat/helpers/addEdgeToTypebot' -import { ExecuteLogicResponse } from '@/features/chat/types' +import { addEdgeToTypebot, createPortalEdge } from '../../../addEdgeToTypebot' +import { ExecuteLogicResponse } from '../../../types' import { TRPCError } from '@trpc/server' import { SessionState } from '@typebot.io/schemas' import { JumpBlock } from '@typebot.io/schemas/features/blocks/logic/jump' diff --git a/apps/viewer/src/features/blocks/logic/redirect/executeRedirect.ts b/packages/bot-engine/blocks/logic/redirect/executeRedirect.ts similarity index 82% rename from apps/viewer/src/features/blocks/logic/redirect/executeRedirect.ts rename to packages/bot-engine/blocks/logic/redirect/executeRedirect.ts index 96a2a842a..1abc08a83 100644 --- a/apps/viewer/src/features/blocks/logic/redirect/executeRedirect.ts +++ b/packages/bot-engine/blocks/logic/redirect/executeRedirect.ts @@ -1,7 +1,7 @@ -import { parseVariables } from '@/features/variables/parseVariables' import { RedirectBlock, SessionState } from '@typebot.io/schemas' import { sanitizeUrl } from '@typebot.io/lib' -import { ExecuteLogicResponse } from '@/features/chat/types' +import { ExecuteLogicResponse } from '../../../types' +import { parseVariables } from '../../../variables/parseVariables' export const executeRedirect = ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/logic/script/executeScript.ts b/packages/bot-engine/blocks/logic/script/executeScript.ts similarity index 77% rename from apps/viewer/src/features/blocks/logic/script/executeScript.ts rename to packages/bot-engine/blocks/logic/script/executeScript.ts index 2ed0b38ac..e97e7385f 100644 --- a/apps/viewer/src/features/blocks/logic/script/executeScript.ts +++ b/packages/bot-engine/blocks/logic/script/executeScript.ts @@ -1,8 +1,8 @@ -import { ExecuteLogicResponse } from '@/features/chat/types' -import { extractVariablesFromText } from '@/features/variables/extractVariablesFromText' -import { parseGuessedValueType } from '@/features/variables/parseGuessedValueType' -import { parseVariables } from '@/features/variables/parseVariables' +import { ExecuteLogicResponse } from '../../../types' import { ScriptBlock, SessionState, Variable } from '@typebot.io/schemas' +import { extractVariablesFromText } from '../../../variables/extractVariablesFromText' +import { parseGuessedValueType } from '../../../variables/parseGuessedValueType' +import { parseVariables } from '../../../variables/parseVariables' export const executeScript = ( state: SessionState, diff --git a/apps/viewer/src/features/blocks/logic/setVariable/executeSetVariable.ts b/packages/bot-engine/blocks/logic/setVariable/executeSetVariable.ts similarity index 91% rename from apps/viewer/src/features/blocks/logic/setVariable/executeSetVariable.ts rename to packages/bot-engine/blocks/logic/setVariable/executeSetVariable.ts index 1462e3185..891ed35a1 100644 --- a/apps/viewer/src/features/blocks/logic/setVariable/executeSetVariable.ts +++ b/packages/bot-engine/blocks/logic/setVariable/executeSetVariable.ts @@ -1,10 +1,10 @@ import { SessionState, SetVariableBlock, Variable } from '@typebot.io/schemas' import { byId } from '@typebot.io/lib' -import { ExecuteLogicResponse } from '@/features/chat/types' -import { updateVariables } from '@/features/variables/updateVariables' -import { parseVariables } from '@/features/variables/parseVariables' -import { parseGuessedValueType } from '@/features/variables/parseGuessedValueType' +import { ExecuteLogicResponse } from '../../../types' import { parseScriptToExecuteClientSideAction } from '../script/executeScript' +import { parseGuessedValueType } from '../../../variables/parseGuessedValueType' +import { parseVariables } from '../../../variables/parseVariables' +import { updateVariablesInSession } from '../../../variables/updateVariablesInSession' export const executeSetVariable = ( state: SessionState, @@ -48,7 +48,7 @@ export const executeSetVariable = ( ...existingVariable, value: evaluatedExpression, } - const newSessionState = updateVariables(state)([newVariable]) + const newSessionState = updateVariablesInSession(state)([newVariable]) return { outgoingEdgeId: block.outgoingEdgeId, newSessionState, diff --git a/apps/viewer/src/features/blocks/logic/typebotLink/executeTypebotLink.ts b/packages/bot-engine/blocks/logic/typebotLink/executeTypebotLink.ts similarity index 95% rename from apps/viewer/src/features/blocks/logic/typebotLink/executeTypebotLink.ts rename to packages/bot-engine/blocks/logic/typebotLink/executeTypebotLink.ts index 5bd96942b..ea67c39a4 100644 --- a/apps/viewer/src/features/blocks/logic/typebotLink/executeTypebotLink.ts +++ b/packages/bot-engine/blocks/logic/typebotLink/executeTypebotLink.ts @@ -1,8 +1,4 @@ -import { - addEdgeToTypebot, - createPortalEdge, -} from '@/features/chat/helpers/addEdgeToTypebot' -import prisma from '@/lib/prisma' +import { addEdgeToTypebot, createPortalEdge } from '../../../addEdgeToTypebot' import { TypebotLinkBlock, SessionState, @@ -12,11 +8,12 @@ import { typebotInSessionStateSchema, TypebotInSession, } from '@typebot.io/schemas' -import { ExecuteLogicResponse } from '@/features/chat/types' +import { ExecuteLogicResponse } from '../../../types' import { createId } from '@paralleldrive/cuid2' import { isNotDefined } from '@typebot.io/lib/utils' -import { createResultIfNotExist } from '@/features/chat/queries/createResultIfNotExist' +import { createResultIfNotExist } from '../../../queries/createResultIfNotExist' import { executeJumpBlock } from '../jump/executeJumpBlock' +import prisma from '@typebot.io/lib/prisma' export const executeTypebotLink = async ( state: SessionState, diff --git a/packages/bot-engine/blocks/logic/typebotLink/fetchLinkedTypebots.ts b/packages/bot-engine/blocks/logic/typebotLink/fetchLinkedTypebots.ts new file mode 100644 index 000000000..d41b788b1 --- /dev/null +++ b/packages/bot-engine/blocks/logic/typebotLink/fetchLinkedTypebots.ts @@ -0,0 +1,45 @@ +import prisma from '@typebot.io/lib/prisma' +import { User } from '@typebot.io/prisma' + +type Props = { + isPreview?: boolean + typebotIds: string[] + user?: User +} + +export const fetchLinkedTypebots = async ({ + user, + isPreview, + typebotIds, +}: Props) => { + if (!user || !isPreview) + return prisma.publicTypebot.findMany({ + where: { id: { in: typebotIds } }, + }) + const linkedTypebots = await prisma.typebot.findMany({ + where: { id: { in: typebotIds } }, + include: { + collaborators: { + select: { + userId: true, + }, + }, + workspace: { + select: { + members: { + select: { + userId: true, + }, + }, + }, + }, + }, + }) + + return linkedTypebots.filter( + (typebot) => + typebot.collaborators.some( + (collaborator) => collaborator.userId === user.id + ) || typebot.workspace.members.some((member) => member.userId === user.id) + ) +} diff --git a/apps/viewer/src/features/blocks/logic/typebotLink/getPreviouslyLinkedTypebots.ts b/packages/bot-engine/blocks/logic/typebotLink/getPreviouslyLinkedTypebots.ts similarity index 100% rename from apps/viewer/src/features/blocks/logic/typebotLink/getPreviouslyLinkedTypebots.ts rename to packages/bot-engine/blocks/logic/typebotLink/getPreviouslyLinkedTypebots.ts diff --git a/apps/viewer/src/features/blocks/logic/wait/executeWait.ts b/packages/bot-engine/blocks/logic/wait/executeWait.ts similarity index 86% rename from apps/viewer/src/features/blocks/logic/wait/executeWait.ts rename to packages/bot-engine/blocks/logic/wait/executeWait.ts index b8b7999b7..55cf11a72 100644 --- a/apps/viewer/src/features/blocks/logic/wait/executeWait.ts +++ b/packages/bot-engine/blocks/logic/wait/executeWait.ts @@ -1,6 +1,6 @@ -import { ExecuteLogicResponse } from '@/features/chat/types' -import { parseVariables } from '@/features/variables/parseVariables' +import { ExecuteLogicResponse } from '../../../types' import { SessionState, WaitBlock } from '@typebot.io/schemas' +import { parseVariables } from '../../../variables/parseVariables' export const executeWait = ( state: SessionState, diff --git a/packages/lib/computeTypingDuration.ts b/packages/bot-engine/computeTypingDuration.ts similarity index 100% rename from packages/lib/computeTypingDuration.ts rename to packages/bot-engine/computeTypingDuration.ts diff --git a/apps/viewer/src/features/chat/helpers/continueBotFlow.ts b/packages/bot-engine/continueBotFlow.ts similarity index 89% rename from apps/viewer/src/features/chat/helpers/continueBotFlow.ts rename to packages/bot-engine/continueBotFlow.ts index 595e09ff5..5988f34ce 100644 --- a/apps/viewer/src/features/chat/helpers/continueBotFlow.ts +++ b/packages/bot-engine/continueBotFlow.ts @@ -14,21 +14,21 @@ import { import { isInputBlock, byId } from '@typebot.io/lib' import { executeGroup, parseInput } from './executeGroup' import { getNextGroup } from './getNextGroup' -import { validateEmail } from '@/features/blocks/inputs/email/validateEmail' -import { formatPhoneNumber } from '@/features/blocks/inputs/phone/formatPhoneNumber' -import { validateUrl } from '@/features/blocks/inputs/url/validateUrl' -import { updateVariables } from '@/features/variables/updateVariables' -import { parseVariables } from '@/features/variables/parseVariables' -import { resumeChatCompletion } from '@/features/blocks/integrations/openai/resumeChatCompletion' -import { resumeWebhookExecution } from '@/features/blocks/integrations/webhook/resumeWebhookExecution' -import { upsertAnswer } from '../queries/upsertAnswer' +import { validateEmail } from './blocks/inputs/email/validateEmail' +import { formatPhoneNumber } from './blocks/inputs/phone/formatPhoneNumber' +import { validateUrl } from './blocks/inputs/url/validateUrl' +import { resumeChatCompletion } from './blocks/integrations/openai/resumeChatCompletion' +import { resumeWebhookExecution } from './blocks/integrations/webhook/resumeWebhookExecution' +import { upsertAnswer } from './queries/upsertAnswer' import { startBotFlow } from './startBotFlow' -import { parseButtonsReply } from '@/features/blocks/inputs/buttons/parseButtonsReply' -import { ParsedReply } from '../types' -import { validateNumber } from '@/features/blocks/inputs/number/validateNumber' -import { parseDateReply } from '@/features/blocks/inputs/date/parseDateReply' -import { validateRatingReply } from '@/features/blocks/inputs/rating/validateRatingReply' -import { parsePictureChoicesReply } from '@/features/blocks/inputs/pictureChoice/parsePictureChoicesReply' +import { parseButtonsReply } from './blocks/inputs/buttons/parseButtonsReply' +import { ParsedReply } from './types' +import { validateNumber } from './blocks/inputs/number/validateNumber' +import { parseDateReply } from './blocks/inputs/date/parseDateReply' +import { validateRatingReply } from './blocks/inputs/rating/validateRatingReply' +import { parsePictureChoicesReply } from './blocks/inputs/pictureChoice/parsePictureChoicesReply' +import { parseVariables } from './variables/parseVariables' +import { updateVariablesInSession } from './variables/updateVariablesInSession' export const continueBotFlow = (state: SessionState) => @@ -57,7 +57,7 @@ export const continueBotFlow = ...existingVariable, value: safeJsonParse(reply), } - newSessionState = updateVariables(state)([newVariable]) + newSessionState = updateVariablesInSession(state)([newVariable]) } } else if (reply && block.type === IntegrationBlockType.WEBHOOK) { const result = resumeWebhookExecution({ @@ -170,7 +170,7 @@ const saveVariableValueIfAny = ) if (!foundVariable) return state - const newSessionState = updateVariables(state)([ + const newSessionState = updateVariablesInSession(state)([ { ...foundVariable, value: Array.isArray(foundVariable.value) diff --git a/apps/viewer/src/features/chat/helpers/executeGroup.ts b/packages/bot-engine/executeGroup.ts similarity index 92% rename from apps/viewer/src/features/chat/helpers/executeGroup.ts rename to packages/bot-engine/executeGroup.ts index 9d1f7bdd2..821c7b636 100644 --- a/apps/viewer/src/features/chat/helpers/executeGroup.ts +++ b/packages/bot-engine/executeGroup.ts @@ -16,15 +16,15 @@ import { isLogicBlock, isNotEmpty, } from '@typebot.io/lib' -import { executeLogic } from './executeLogic' import { getNextGroup } from './getNextGroup' +import { executeLogic } from './executeLogic' import { executeIntegration } from './executeIntegration' -import { injectVariableValuesInButtonsInputBlock } from '@/features/blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock' -import { deepParseVariables } from '@/features/variables/deepParseVariable' -import { computePaymentInputRuntimeOptions } from '@/features/blocks/inputs/payment/computePaymentInputRuntimeOptions' -import { injectVariableValuesInPictureChoiceBlock } from '@/features/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock' -import { parseDateInput } from '@/features/blocks/inputs/date/parseDateInput' +import { computePaymentInputRuntimeOptions } from './blocks/inputs/payment/computePaymentInputRuntimeOptions' +import { injectVariableValuesInButtonsInputBlock } from './blocks/inputs/buttons/injectVariableValuesInButtonsInputBlock' +import { injectVariableValuesInPictureChoiceBlock } from './blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock' import { getPrefilledInputValue } from './getPrefilledValue' +import { parseDateInput } from './blocks/inputs/date/parseDateInput' +import { deepParseVariables } from './variables/deepParseVariables' export const executeGroup = ( diff --git a/apps/viewer/src/features/chat/helpers/executeIntegration.ts b/packages/bot-engine/executeIntegration.ts similarity index 56% rename from apps/viewer/src/features/chat/helpers/executeIntegration.ts rename to packages/bot-engine/executeIntegration.ts index e0e0484ca..a5262655f 100644 --- a/apps/viewer/src/features/chat/helpers/executeIntegration.ts +++ b/packages/bot-engine/executeIntegration.ts @@ -1,17 +1,17 @@ -import { executeOpenAIBlock } from '@/features/blocks/integrations/openai/executeOpenAIBlock' -import { executeSendEmailBlock } from '@/features/blocks/integrations/sendEmail/executeSendEmailBlock' -import { executeWebhookBlock } from '@/features/blocks/integrations/webhook/executeWebhookBlock' -import { executeChatwootBlock } from '@/features/blocks/integrations/chatwoot/executeChatwootBlock' -import { executeGoogleAnalyticsBlock } from '@/features/blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock' -import { executeGoogleSheetBlock } from '@/features/blocks/integrations/googleSheets/executeGoogleSheetBlock' -import { executePixelBlock } from '@/features/blocks/integrations/pixel/executePixelBlock' -import { executeZemanticAiBlock } from '@/features/blocks/integrations/zemanticAi/executeZemanticAiBlock' +import { executeOpenAIBlock } from './blocks/integrations/openai/executeOpenAIBlock' +import { executeSendEmailBlock } from './blocks/integrations/sendEmail/executeSendEmailBlock' +import { executeWebhookBlock } from './blocks/integrations/webhook/executeWebhookBlock' +import { executeChatwootBlock } from './blocks/integrations/chatwoot/executeChatwootBlock' +import { executeGoogleAnalyticsBlock } from './blocks/integrations/googleAnalytics/executeGoogleAnalyticsBlock' +import { executeGoogleSheetBlock } from './blocks/integrations/googleSheets/executeGoogleSheetBlock' +import { executePixelBlock } from './blocks/integrations/pixel/executePixelBlock' +import { executeZemanticAiBlock } from './blocks/integrations/zemanticAi/executeZemanticAiBlock' import { IntegrationBlock, IntegrationBlockType, SessionState, } from '@typebot.io/schemas' -import { ExecuteIntegrationResponse } from '../types' +import { ExecuteIntegrationResponse } from './types' export const executeIntegration = (state: SessionState) => diff --git a/apps/viewer/src/features/chat/helpers/executeLogic.ts b/packages/bot-engine/executeLogic.ts similarity index 55% rename from apps/viewer/src/features/chat/helpers/executeLogic.ts rename to packages/bot-engine/executeLogic.ts index 818f93ad2..d8ba4cb6c 100644 --- a/apps/viewer/src/features/chat/helpers/executeLogic.ts +++ b/packages/bot-engine/executeLogic.ts @@ -1,13 +1,13 @@ -import { executeWait } from '@/features/blocks/logic/wait/executeWait' +import { executeWait } from './blocks/logic/wait/executeWait' import { LogicBlock, LogicBlockType, SessionState } from '@typebot.io/schemas' -import { ExecuteLogicResponse } from '../types' -import { executeScript } from '@/features/blocks/logic/script/executeScript' -import { executeJumpBlock } from '@/features/blocks/logic/jump/executeJumpBlock' -import { executeRedirect } from '@/features/blocks/logic/redirect/executeRedirect' -import { executeConditionBlock } from '@/features/blocks/logic/condition/executeConditionBlock' -import { executeSetVariable } from '@/features/blocks/logic/setVariable/executeSetVariable' -import { executeTypebotLink } from '@/features/blocks/logic/typebotLink/executeTypebotLink' -import { executeAbTest } from '@/features/blocks/logic/abTest/executeAbTest' +import { ExecuteLogicResponse } from './types' +import { executeScript } from './blocks/logic/script/executeScript' +import { executeJumpBlock } from './blocks/logic/jump/executeJumpBlock' +import { executeRedirect } from './blocks/logic/redirect/executeRedirect' +import { executeConditionBlock } from './blocks/logic/condition/executeConditionBlock' +import { executeSetVariable } from './blocks/logic/setVariable/executeSetVariable' +import { executeTypebotLink } from './blocks/logic/typebotLink/executeTypebotLink' +import { executeAbTest } from './blocks/logic/abTest/executeAbTest' export const executeLogic = (state: SessionState) => diff --git a/apps/viewer/src/features/chat/helpers/getNextGroup.ts b/packages/bot-engine/getNextGroup.ts similarity index 95% rename from apps/viewer/src/features/chat/helpers/getNextGroup.ts rename to packages/bot-engine/getNextGroup.ts index b2c81eb16..b3826bf8b 100644 --- a/apps/viewer/src/features/chat/helpers/getNextGroup.ts +++ b/packages/bot-engine/getNextGroup.ts @@ -1,7 +1,6 @@ -import { byId, isNotDefined } from '@typebot.io/lib' +import { byId, isDefined, isNotDefined } from '@typebot.io/lib' import { Group, SessionState, VariableWithValue } from '@typebot.io/schemas' -import { upsertResult } from '../queries/upsertResult' -import { isDefined } from '@udecode/plate-common' +import { upsertResult } from './queries/upsertResult' export type NextGroup = { group?: Group diff --git a/apps/viewer/src/features/chat/helpers/getPrefilledValue.ts b/packages/bot-engine/getPrefilledValue.ts similarity index 100% rename from apps/viewer/src/features/chat/helpers/getPrefilledValue.ts rename to packages/bot-engine/getPrefilledValue.ts diff --git a/apps/viewer/src/features/logs/helpers/formatLogDetails.ts b/packages/bot-engine/logs/helpers/formatLogDetails.ts similarity index 100% rename from apps/viewer/src/features/logs/helpers/formatLogDetails.ts rename to packages/bot-engine/logs/helpers/formatLogDetails.ts diff --git a/apps/viewer/src/features/logs/saveErrorLog.ts b/packages/bot-engine/logs/saveErrorLog.ts similarity index 100% rename from apps/viewer/src/features/logs/saveErrorLog.ts rename to packages/bot-engine/logs/saveErrorLog.ts diff --git a/apps/viewer/src/features/logs/saveLog.ts b/packages/bot-engine/logs/saveLog.ts similarity index 91% rename from apps/viewer/src/features/logs/saveLog.ts rename to packages/bot-engine/logs/saveLog.ts index 5e989c693..c7e80b27a 100644 --- a/apps/viewer/src/features/logs/saveLog.ts +++ b/packages/bot-engine/logs/saveLog.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { formatLogDetails } from './helpers/formatLogDetails' type Props = { diff --git a/apps/viewer/src/features/logs/saveSuccessLog.ts b/packages/bot-engine/logs/saveSuccessLog.ts similarity index 100% rename from apps/viewer/src/features/logs/saveSuccessLog.ts rename to packages/bot-engine/logs/saveSuccessLog.ts diff --git a/packages/bot-engine/package.json b/packages/bot-engine/package.json new file mode 100644 index 000000000..1fcf84f08 --- /dev/null +++ b/packages/bot-engine/package.json @@ -0,0 +1,38 @@ +{ + "name": "@typebot.io/bot-engine", + "version": "1.0.0", + "license": "AGPL-3.0-or-later", + "private": true, + "main": "./index.ts", + "types": "./index.ts", + "dependencies": { + "@paralleldrive/cuid2": "2.2.1", + "@planetscale/database": "^1.8.0", + "@sentry/nextjs": "7.66.0", + "@trpc/server": "10.34.0", + "@typebot.io/emails": "workspace:*", + "@typebot.io/env": "workspace:*", + "@typebot.io/lib": "workspace:*", + "@typebot.io/prisma": "workspace:*", + "@typebot.io/schemas": "workspace:*", + "@typebot.io/tsconfig": "workspace:*", + "@udecode/plate-common": "^21.1.5", + "ai": "2.1.32", + "chrono-node": "2.6.6", + "date-fns": "^2.30.0", + "google-auth-library": "8.9.0", + "google-spreadsheet": "4.0.2", + "got": "12.6.0", + "libphonenumber-js": "1.10.37", + "node-html-parser": "^6.1.5", + "nodemailer": "6.9.3", + "openai-edge": "1.2.2", + "qs": "^6.11.2", + "remark-slate": "^1.8.6", + "stripe": "12.13.0" + }, + "devDependencies": { + "@types/nodemailer": "6.4.8", + "@types/qs": "6.9.7" + } +} diff --git a/apps/viewer/src/features/chat/helpers/parseDynamicTheme.ts b/packages/bot-engine/parseDynamicTheme.ts similarity index 87% rename from apps/viewer/src/features/chat/helpers/parseDynamicTheme.ts rename to packages/bot-engine/parseDynamicTheme.ts index 491690299..8f1b291ba 100644 --- a/apps/viewer/src/features/chat/helpers/parseDynamicTheme.ts +++ b/packages/bot-engine/parseDynamicTheme.ts @@ -1,5 +1,5 @@ -import { parseVariables } from '@/features/variables/parseVariables' import { SessionState, ChatReply } from '@typebot.io/schemas' +import { parseVariables } from './variables/parseVariables' export const parseDynamicTheme = ( state: SessionState | undefined diff --git a/apps/viewer/src/features/chat/queries/createResultIfNotExist.ts b/packages/bot-engine/queries/createResultIfNotExist.ts similarity index 94% rename from apps/viewer/src/features/chat/queries/createResultIfNotExist.ts rename to packages/bot-engine/queries/createResultIfNotExist.ts index ffc087b67..7d6ba6573 100644 --- a/apps/viewer/src/features/chat/queries/createResultIfNotExist.ts +++ b/packages/bot-engine/queries/createResultIfNotExist.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { getDefinedVariables } from '@typebot.io/lib/results' import { TypebotInSession } from '@typebot.io/schemas' diff --git a/apps/viewer/src/features/chat/queries/createSession.ts b/packages/bot-engine/queries/createSession.ts similarity index 84% rename from apps/viewer/src/features/chat/queries/createSession.ts rename to packages/bot-engine/queries/createSession.ts index 0ad2f03e2..3551dbd1e 100644 --- a/apps/viewer/src/features/chat/queries/createSession.ts +++ b/packages/bot-engine/queries/createSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { SessionState } from '@typebot.io/schemas' type Props = { diff --git a/apps/viewer/src/features/chat/queries/deleteSession.ts b/packages/bot-engine/queries/deleteSession.ts similarity index 72% rename from apps/viewer/src/features/chat/queries/deleteSession.ts rename to packages/bot-engine/queries/deleteSession.ts index 7d190066e..7e8531a51 100644 --- a/apps/viewer/src/features/chat/queries/deleteSession.ts +++ b/packages/bot-engine/queries/deleteSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' export const deleteSession = (id: string) => prisma.chatSession.deleteMany({ diff --git a/apps/viewer/src/features/chat/queries/findPublicTypebot.ts b/packages/bot-engine/queries/findPublicTypebot.ts similarity index 94% rename from apps/viewer/src/features/chat/queries/findPublicTypebot.ts rename to packages/bot-engine/queries/findPublicTypebot.ts index 2ca7fc36b..f616cedc0 100644 --- a/apps/viewer/src/features/chat/queries/findPublicTypebot.ts +++ b/packages/bot-engine/queries/findPublicTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' type Props = { publicId: string diff --git a/apps/viewer/src/features/chat/queries/findResult.ts b/packages/bot-engine/queries/findResult.ts similarity index 92% rename from apps/viewer/src/features/chat/queries/findResult.ts rename to packages/bot-engine/queries/findResult.ts index b0ace7ed9..37487ab88 100644 --- a/apps/viewer/src/features/chat/queries/findResult.ts +++ b/packages/bot-engine/queries/findResult.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Answer, Result } from '@typebot.io/schemas' type Props = { diff --git a/apps/viewer/src/features/chat/queries/findTypebot.ts b/packages/bot-engine/queries/findTypebot.ts similarity index 89% rename from apps/viewer/src/features/chat/queries/findTypebot.ts rename to packages/bot-engine/queries/findTypebot.ts index 1f05245b3..721eade5d 100644 --- a/apps/viewer/src/features/chat/queries/findTypebot.ts +++ b/packages/bot-engine/queries/findTypebot.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' type Props = { id: string diff --git a/apps/viewer/src/features/chat/queries/getSession.ts b/packages/bot-engine/queries/getSession.ts similarity index 90% rename from apps/viewer/src/features/chat/queries/getSession.ts rename to packages/bot-engine/queries/getSession.ts index ef20425e6..c7a00bc9c 100644 --- a/apps/viewer/src/features/chat/queries/getSession.ts +++ b/packages/bot-engine/queries/getSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { ChatSession, sessionStateSchema } from '@typebot.io/schemas' export const getSession = async ( diff --git a/apps/viewer/src/features/chat/queries/restartSession.ts b/packages/bot-engine/queries/restartSession.ts similarity index 89% rename from apps/viewer/src/features/chat/queries/restartSession.ts rename to packages/bot-engine/queries/restartSession.ts index dddac7ee6..ec5d619dc 100644 --- a/apps/viewer/src/features/chat/queries/restartSession.ts +++ b/packages/bot-engine/queries/restartSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { SessionState } from '@typebot.io/schemas' type Props = { diff --git a/apps/viewer/src/features/chat/queries/saveLogs.ts b/packages/bot-engine/queries/saveLogs.ts similarity index 77% rename from apps/viewer/src/features/chat/queries/saveLogs.ts rename to packages/bot-engine/queries/saveLogs.ts index aefdd740f..5ce54e266 100644 --- a/apps/viewer/src/features/chat/queries/saveLogs.ts +++ b/packages/bot-engine/queries/saveLogs.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Log } from '@typebot.io/schemas' export const saveLogs = (logs: Omit[]) => diff --git a/apps/viewer/src/features/chat/queries/updateSession.ts b/packages/bot-engine/queries/updateSession.ts similarity index 85% rename from apps/viewer/src/features/chat/queries/updateSession.ts rename to packages/bot-engine/queries/updateSession.ts index 0c5da4a7e..8d60e0a6b 100644 --- a/apps/viewer/src/features/chat/queries/updateSession.ts +++ b/packages/bot-engine/queries/updateSession.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { SessionState } from '@typebot.io/schemas' type Props = { diff --git a/apps/viewer/src/features/chat/queries/upsertAnswer.ts b/packages/bot-engine/queries/upsertAnswer.ts similarity index 95% rename from apps/viewer/src/features/chat/queries/upsertAnswer.ts rename to packages/bot-engine/queries/upsertAnswer.ts index 49a359a93..78c5e2d16 100644 --- a/apps/viewer/src/features/chat/queries/upsertAnswer.ts +++ b/packages/bot-engine/queries/upsertAnswer.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { Prisma } from '@typebot.io/prisma' import { InputBlock, SessionState } from '@typebot.io/schemas' diff --git a/apps/viewer/src/features/chat/queries/upsertResult.ts b/packages/bot-engine/queries/upsertResult.ts similarity index 95% rename from apps/viewer/src/features/chat/queries/upsertResult.ts rename to packages/bot-engine/queries/upsertResult.ts index 88a713686..65a464365 100644 --- a/apps/viewer/src/features/chat/queries/upsertResult.ts +++ b/packages/bot-engine/queries/upsertResult.ts @@ -1,4 +1,4 @@ -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { getDefinedVariables } from '@typebot.io/lib/results' import { TypebotInSession } from '@typebot.io/schemas' diff --git a/apps/viewer/src/features/chat/helpers/saveStateToDatabase.ts b/packages/bot-engine/saveStateToDatabase.ts similarity index 79% rename from apps/viewer/src/features/chat/helpers/saveStateToDatabase.ts rename to packages/bot-engine/saveStateToDatabase.ts index b27ca1db8..e384dea36 100644 --- a/apps/viewer/src/features/chat/helpers/saveStateToDatabase.ts +++ b/packages/bot-engine/saveStateToDatabase.ts @@ -1,10 +1,10 @@ import { ChatReply, ChatSession } from '@typebot.io/schemas' -import { upsertResult } from '../queries/upsertResult' -import { saveLogs } from '../queries/saveLogs' -import { updateSession } from '../queries/updateSession' -import { formatLogDetails } from '@/features/logs/helpers/formatLogDetails' -import { createSession } from '../queries/createSession' -import { deleteSession } from '../queries/deleteSession' +import { upsertResult } from './queries/upsertResult' +import { saveLogs } from './queries/saveLogs' +import { updateSession } from './queries/updateSession' +import { formatLogDetails } from './logs/helpers/formatLogDetails' +import { createSession } from './queries/createSession' +import { deleteSession } from './queries/deleteSession' type Props = { isFirstSave?: boolean diff --git a/apps/viewer/src/features/chat/helpers/startBotFlow.ts b/packages/bot-engine/startBotFlow.ts similarity index 100% rename from apps/viewer/src/features/chat/helpers/startBotFlow.ts rename to packages/bot-engine/startBotFlow.ts diff --git a/apps/viewer/src/features/chat/helpers/startSession.ts b/packages/bot-engine/startSession.ts similarity index 96% rename from apps/viewer/src/features/chat/helpers/startSession.ts rename to packages/bot-engine/startSession.ts index e23e983c1..16748422d 100644 --- a/apps/viewer/src/features/chat/helpers/startSession.ts +++ b/packages/bot-engine/startSession.ts @@ -1,6 +1,3 @@ -import { deepParseVariables } from '@/features/variables/deepParseVariable' -import { injectVariablesFromExistingResult } from '@/features/variables/injectVariablesFromExistingResult' -import { prefillVariables } from '@/features/variables/prefillVariables' import { createId } from '@paralleldrive/cuid2' import { TRPCError } from '@trpc/server' import { isDefined, omit, isNotEmpty, isInputBlock } from '@typebot.io/lib' @@ -19,13 +16,16 @@ import { StartTypebot, startTypebotSchema, } from '@typebot.io/schemas/features/chat/schema' -import { findPublicTypebot } from '../queries/findPublicTypebot' -import { findResult } from '../queries/findResult' -import { findTypebot } from '../queries/findTypebot' -import { startBotFlow } from './startBotFlow' import parse, { NodeType } from 'node-html-parser' -import { parseDynamicTheme } from './parseDynamicTheme' import { env } from '@typebot.io/env' +import { parseDynamicTheme } from './parseDynamicTheme' +import { findTypebot } from './queries/findTypebot' +import { findPublicTypebot } from './queries/findPublicTypebot' +import { findResult } from './queries/findResult' +import { startBotFlow } from './startBotFlow' +import { prefillVariables } from './variables/prefillVariables' +import { deepParseVariables } from './variables/deepParseVariables' +import { injectVariablesFromExistingResult } from './variables/injectVariablesFromExistingResult' type Props = { startParams: StartParams diff --git a/packages/bot-engine/tsconfig.json b/packages/bot-engine/tsconfig.json new file mode 100644 index 000000000..f1c734a16 --- /dev/null +++ b/packages/bot-engine/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@typebot.io/tsconfig/base.json", + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"], + "compilerOptions": { + "jsx": "preserve", + "lib": ["ES2021"] + } +} diff --git a/apps/viewer/src/features/chat/types.ts b/packages/bot-engine/types.ts similarity index 100% rename from apps/viewer/src/features/chat/types.ts rename to packages/bot-engine/types.ts diff --git a/apps/viewer/src/features/variables/deepParseVariable.ts b/packages/bot-engine/variables/deepParseVariables.ts similarity index 100% rename from apps/viewer/src/features/variables/deepParseVariable.ts rename to packages/bot-engine/variables/deepParseVariables.ts diff --git a/apps/viewer/src/features/variables/extractVariablesFromText.ts b/packages/bot-engine/variables/extractVariablesFromText.ts similarity index 100% rename from apps/viewer/src/features/variables/extractVariablesFromText.ts rename to packages/bot-engine/variables/extractVariablesFromText.ts diff --git a/apps/viewer/src/features/variables/findUniqueVariableValue.ts b/packages/bot-engine/variables/findUniqueVariableValue.ts similarity index 100% rename from apps/viewer/src/features/variables/findUniqueVariableValue.ts rename to packages/bot-engine/variables/findUniqueVariableValue.ts diff --git a/apps/viewer/src/features/variables/hasVariable.ts b/packages/bot-engine/variables/hasVariable.ts similarity index 100% rename from apps/viewer/src/features/variables/hasVariable.ts rename to packages/bot-engine/variables/hasVariable.ts diff --git a/apps/viewer/src/features/variables/injectVariablesFromExistingResult.ts b/packages/bot-engine/variables/injectVariablesFromExistingResult.ts similarity index 100% rename from apps/viewer/src/features/variables/injectVariablesFromExistingResult.ts rename to packages/bot-engine/variables/injectVariablesFromExistingResult.ts diff --git a/apps/viewer/src/features/variables/parseGuessedTypeFromString.ts b/packages/bot-engine/variables/parseGuessedTypeFromString.ts similarity index 100% rename from apps/viewer/src/features/variables/parseGuessedTypeFromString.ts rename to packages/bot-engine/variables/parseGuessedTypeFromString.ts diff --git a/apps/viewer/src/features/variables/parseGuessedValueType.ts b/packages/bot-engine/variables/parseGuessedValueType.ts similarity index 100% rename from apps/viewer/src/features/variables/parseGuessedValueType.ts rename to packages/bot-engine/variables/parseGuessedValueType.ts diff --git a/apps/viewer/src/features/variables/parseVariableNumber.ts b/packages/bot-engine/variables/parseVariableNumber.ts similarity index 100% rename from apps/viewer/src/features/variables/parseVariableNumber.ts rename to packages/bot-engine/variables/parseVariableNumber.ts diff --git a/apps/viewer/src/features/variables/parseVariables.ts b/packages/bot-engine/variables/parseVariables.ts similarity index 97% rename from apps/viewer/src/features/variables/parseVariables.ts rename to packages/bot-engine/variables/parseVariables.ts index 612ec89e3..bea4450f6 100644 --- a/apps/viewer/src/features/variables/parseVariables.ts +++ b/packages/bot-engine/variables/parseVariables.ts @@ -1,6 +1,6 @@ -import { isDefined } from '@typebot.io/lib' -import { Variable, VariableWithValue } from '@typebot.io/schemas' import { safeStringify } from '@typebot.io/lib/safeStringify' +import { isDefined } from '@typebot.io/lib/utils' +import { Variable, VariableWithValue } from '@typebot.io/schemas' export type ParseVariablesOptions = { fieldToParse?: 'value' | 'id' diff --git a/apps/viewer/src/features/variables/prefillVariables.ts b/packages/bot-engine/variables/prefillVariables.ts similarity index 100% rename from apps/viewer/src/features/variables/prefillVariables.ts rename to packages/bot-engine/variables/prefillVariables.ts index 47d32c571..0c06ab590 100644 --- a/apps/viewer/src/features/variables/prefillVariables.ts +++ b/packages/bot-engine/variables/prefillVariables.ts @@ -1,5 +1,5 @@ -import { StartParams, Variable } from '@typebot.io/schemas' import { safeStringify } from '@typebot.io/lib/safeStringify' +import { StartParams, Variable } from '@typebot.io/schemas' export const prefillVariables = ( variables: Variable[], diff --git a/apps/viewer/src/features/variables/transformVariablesToList.ts b/packages/bot-engine/variables/transformVariablesToList.ts similarity index 92% rename from apps/viewer/src/features/variables/transformVariablesToList.ts rename to packages/bot-engine/variables/transformVariablesToList.ts index 4f46e12c8..9166ce598 100644 --- a/apps/viewer/src/features/variables/transformVariablesToList.ts +++ b/packages/bot-engine/variables/transformVariablesToList.ts @@ -1,5 +1,5 @@ +import { isNotDefined } from '@typebot.io/lib/utils' import { Variable, VariableWithValue } from '@typebot.io/schemas' -import { isNotDefined } from '@typebot.io/lib' export const transformStringVariablesToList = (variables: Variable[]) => diff --git a/apps/viewer/src/features/variables/updateVariables.ts b/packages/bot-engine/variables/updateVariablesInSession.ts similarity index 96% rename from apps/viewer/src/features/variables/updateVariables.ts rename to packages/bot-engine/variables/updateVariablesInSession.ts index 6bfab1934..308c6e5f0 100644 --- a/apps/viewer/src/features/variables/updateVariables.ts +++ b/packages/bot-engine/variables/updateVariablesInSession.ts @@ -1,11 +1,11 @@ +import { safeStringify } from '@typebot.io/lib/safeStringify' import { SessionState, VariableWithUnknowValue, Variable, } from '@typebot.io/schemas' -import { safeStringify } from '@typebot.io/lib/safeStringify' -export const updateVariables = +export const updateVariablesInSession = (state: SessionState) => (newVariables: VariableWithUnknowValue[]): SessionState => ({ ...state, diff --git a/packages/lib/whatsApp/convertInputToWhatsAppMessage.ts b/packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts similarity index 98% rename from packages/lib/whatsApp/convertInputToWhatsAppMessage.ts rename to packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts index bf17774d7..64ceacf99 100644 --- a/packages/lib/whatsApp/convertInputToWhatsAppMessage.ts +++ b/packages/bot-engine/whatsapp/convertInputToWhatsAppMessage.ts @@ -6,7 +6,7 @@ import { } from '@typebot.io/schemas' import { WhatsAppSendingMessage } from '@typebot.io/schemas/features/whatsapp' import { convertRichTextToWhatsAppText } from './convertRichTextToWhatsAppText' -import { isDefined, isEmpty } from '../utils' +import { isDefined, isEmpty } from '@typebot.io/lib/utils' export const convertInputToWhatsAppMessages = ( input: NonNullable, diff --git a/packages/lib/whatsApp/convertMessageToWhatsAppMessage.ts b/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts similarity index 97% rename from packages/lib/whatsApp/convertMessageToWhatsAppMessage.ts rename to packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts index e2ec2cf6f..0f49c955f 100644 --- a/packages/lib/whatsApp/convertMessageToWhatsAppMessage.ts +++ b/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts @@ -5,7 +5,7 @@ import { } from '@typebot.io/schemas' import { WhatsAppSendingMessage } from '@typebot.io/schemas/features/whatsapp' import { convertRichTextToWhatsAppText } from './convertRichTextToWhatsAppText' -import { isSvgSrc } from '../utils' +import { isSvgSrc } from '@typebot.io/lib/utils' const mp4HttpsUrlRegex = /^https:\/\/.*\.mp4$/ diff --git a/packages/lib/whatsApp/convertRichTextToWhatsAppText.ts b/packages/bot-engine/whatsapp/convertRichTextToWhatsAppText.ts similarity index 100% rename from packages/lib/whatsApp/convertRichTextToWhatsAppText.ts rename to packages/bot-engine/whatsapp/convertRichTextToWhatsAppText.ts diff --git a/apps/viewer/src/features/whatsApp/helpers/downloadMedia.ts b/packages/bot-engine/whatsapp/downloadMedia.ts similarity index 100% rename from apps/viewer/src/features/whatsApp/helpers/downloadMedia.ts rename to packages/bot-engine/whatsapp/downloadMedia.ts diff --git a/apps/viewer/src/features/whatsApp/helpers/resumeWhatsAppFlow.ts b/packages/bot-engine/whatsapp/resumeWhatsAppFlow.ts similarity index 93% rename from apps/viewer/src/features/whatsApp/helpers/resumeWhatsAppFlow.ts rename to packages/bot-engine/whatsapp/resumeWhatsAppFlow.ts index fcb14a824..8c0603b8f 100644 --- a/apps/viewer/src/features/whatsApp/helpers/resumeWhatsAppFlow.ts +++ b/packages/bot-engine/whatsapp/resumeWhatsAppFlow.ts @@ -1,17 +1,17 @@ -import { continueBotFlow } from '@/features/chat/helpers/continueBotFlow' -import { saveStateToDatabase } from '@/features/chat/helpers/saveStateToDatabase' -import { getSession } from '@/features/chat/queries/getSession' import { SessionState } from '@typebot.io/schemas' import { WhatsAppCredentials, WhatsAppIncomingMessage, } from '@typebot.io/schemas/features/whatsapp' -import { startWhatsAppSession } from './startWhatsAppSession' -import prisma from '@/lib/prisma' -import { decrypt } from '@typebot.io/lib/api' -import { downloadMedia } from './downloadMedia' import { env } from '@typebot.io/env' -import { sendChatReplyToWhatsApp } from '@typebot.io/lib/whatsApp/sendChatReplyToWhatsApp' +import { sendChatReplyToWhatsApp } from './sendChatReplyToWhatsApp' +import { startWhatsAppSession } from './startWhatsAppSession' +import { downloadMedia } from './downloadMedia' +import { getSession } from '../queries/getSession' +import { continueBotFlow } from '../continueBotFlow' +import { decrypt } from '@typebot.io/lib/api' +import { saveStateToDatabase } from '../saveStateToDatabase' +import prisma from '@typebot.io/lib/prisma' export const resumeWhatsAppFlow = async ({ receivedMessage, diff --git a/packages/lib/whatsApp/sendChatReplyToWhatsApp.ts b/packages/bot-engine/whatsapp/sendChatReplyToWhatsApp.ts similarity index 98% rename from packages/lib/whatsApp/sendChatReplyToWhatsApp.ts rename to packages/bot-engine/whatsapp/sendChatReplyToWhatsApp.ts index b8d8cb584..dbcf743c9 100644 --- a/packages/lib/whatsApp/sendChatReplyToWhatsApp.ts +++ b/packages/bot-engine/whatsapp/sendChatReplyToWhatsApp.ts @@ -13,7 +13,7 @@ import { sendWhatsAppMessage } from './sendWhatsAppMessage' import { captureException } from '@sentry/nextjs' import { HTTPError } from 'got' import { convertInputToWhatsAppMessages } from './convertInputToWhatsAppMessage' -import { isNotDefined } from '../utils' +import { isNotDefined } from '@typebot.io/lib/utils' import { computeTypingDuration } from '../computeTypingDuration' // Media can take some time to be delivered. This make sure we don't send a message before the media is delivered. diff --git a/packages/lib/whatsApp/sendWhatsAppMessage.ts b/packages/bot-engine/whatsapp/sendWhatsAppMessage.ts similarity index 100% rename from packages/lib/whatsApp/sendWhatsAppMessage.ts rename to packages/bot-engine/whatsapp/sendWhatsAppMessage.ts diff --git a/apps/viewer/src/features/whatsApp/helpers/startWhatsAppSession.ts b/packages/bot-engine/whatsapp/startWhatsAppSession.ts similarity index 97% rename from apps/viewer/src/features/whatsApp/helpers/startWhatsAppSession.ts rename to packages/bot-engine/whatsapp/startWhatsAppSession.ts index d47bc7e05..64ddbbc1e 100644 --- a/apps/viewer/src/features/whatsApp/helpers/startWhatsAppSession.ts +++ b/packages/bot-engine/whatsapp/startWhatsAppSession.ts @@ -1,5 +1,4 @@ -import { startSession } from '@/features/chat/helpers/startSession' -import prisma from '@/lib/prisma' +import prisma from '@typebot.io/lib/prisma' import { ChatReply, ComparisonOperators, @@ -13,8 +12,9 @@ import { WhatsAppCredentials, WhatsAppIncomingMessage, } from '@typebot.io/schemas/features/whatsapp' -import { isNotDefined } from '@typebot.io/lib' +import { isNotDefined } from '@typebot.io/lib/utils' import { decrypt } from '@typebot.io/lib/api/encryption' +import { startSession } from '../startSession' type Props = { message: WhatsAppIncomingMessage diff --git a/packages/emails/src/index.ts b/packages/emails/src/index.ts index b6107af86..078177093 100644 --- a/packages/emails/src/index.ts +++ b/packages/emails/src/index.ts @@ -1 +1,2 @@ export * from './emails' +export { render } from '@faire/mjml-react/utils/render' diff --git a/packages/embeds/js/package.json b/packages/embeds/js/package.json index 021a7edb4..f439eb89b 100644 --- a/packages/embeds/js/package.json +++ b/packages/embeds/js/package.json @@ -16,7 +16,8 @@ "@udecode/plate-common": "^21.1.5", "eventsource-parser": "^1.0.0", "solid-element": "1.7.1", - "solid-js": "1.7.8" + "solid-js": "1.7.8", + "@typebot.io/bot-engine": "workspace:*" }, "devDependencies": { "@babel/preset-typescript": "7.22.5", diff --git a/packages/embeds/js/src/features/blocks/bubbles/textBubble/components/TextBubble.tsx b/packages/embeds/js/src/features/blocks/bubbles/textBubble/components/TextBubble.tsx index a4b537c3f..f7b7bbe3c 100644 --- a/packages/embeds/js/src/features/blocks/bubbles/textBubble/components/TextBubble.tsx +++ b/packages/embeds/js/src/features/blocks/bubbles/textBubble/components/TextBubble.tsx @@ -5,7 +5,7 @@ import { PlateBlock } from './plate/PlateBlock' import { computePlainText } from '../helpers/convertRichTextToPlainText' import { clsx } from 'clsx' import { isMobile } from '@/utils/isMobileSignal' -import { computeTypingDuration } from '@typebot.io/lib/computeTypingDuration' +import { computeTypingDuration } from '@typebot.io/bot-engine/computeTypingDuration' type Props = { content: TextBubbleContent diff --git a/packages/embeds/js/tsconfig.json b/packages/embeds/js/tsconfig.json index 2b74782cc..1c583257e 100644 --- a/packages/embeds/js/tsconfig.json +++ b/packages/embeds/js/tsconfig.json @@ -14,6 +14,7 @@ "declaration": true, "declarationMap": true, "outDir": "dist", + "noEmit": false, "emitDeclarationOnly": true } } diff --git a/apps/viewer/src/helpers/api/isPlanetScale.ts b/packages/lib/isPlanetScale.ts similarity index 100% rename from apps/viewer/src/helpers/api/isPlanetScale.ts rename to packages/lib/isPlanetScale.ts diff --git a/packages/lib/package.json b/packages/lib/package.json index d27e833b5..e665d78c3 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@sentry/nextjs": "7.66.0", + "@trpc/server": "10.34.0", "@udecode/plate-common": "^21.1.5", "got": "12.6.0", "minio": "7.1.3", diff --git a/apps/viewer/src/lib/prisma.ts b/packages/lib/prisma.ts similarity index 100% rename from apps/viewer/src/lib/prisma.ts rename to packages/lib/prisma.ts diff --git a/packages/lib/tsconfig.json b/packages/lib/tsconfig.json index ce77240db..075fbaa1f 100644 --- a/packages/lib/tsconfig.json +++ b/packages/lib/tsconfig.json @@ -3,6 +3,6 @@ "include": ["**/*.ts"], "exclude": ["node_modules"], "compilerOptions": { - "target": "ES2021" + "lib": ["ES2021", "DOM"] } } diff --git a/packages/prisma/tsconfig.json b/packages/prisma/tsconfig.json index 57c1b5237..67f1988ce 100644 --- a/packages/prisma/tsconfig.json +++ b/packages/prisma/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "@typebot.io/tsconfig/base.json", "include": ["**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules"], + "compilerOptions": { + "declaration": false + } } diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index 6d173f0c8..160553a82 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -3,8 +3,8 @@ "display": "Default", "compilerOptions": { "composite": false, - "declaration": true, - "declarationMap": true, + "declaration": false, + "declarationMap": false, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "inlineSources": false, @@ -15,7 +15,8 @@ "preserveWatchOutput": true, "skipLibCheck": true, "strict": true, - "downlevelIteration": true + "downlevelIteration": true, + "noEmit": true }, "exclude": ["node_modules"] } diff --git a/packages/tsconfig/nextjs.json b/packages/tsconfig/nextjs.json index 6af13474e..42704671a 100644 --- a/packages/tsconfig/nextjs.json +++ b/packages/tsconfig/nextjs.json @@ -4,13 +4,10 @@ "extends": "./base.json", "compilerOptions": { "allowJs": true, - "declaration": false, - "declarationMap": false, "incremental": true, "jsx": "preserve", "lib": ["dom", "dom.iterable", "esnext"], "module": "esnext", - "noEmit": true, "resolveJsonModule": true, "target": "es5" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 398f37480..55821b99c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,12 +74,6 @@ importers: '@sentry/nextjs': specifier: 7.66.0 version: 7.66.0(next@13.4.3)(react@18.2.0) - '@stripe/stripe-js': - specifier: 1.54.1 - version: 1.54.1 - '@t3-oss/env-nextjs': - specifier: ^0.6.0 - version: 0.6.0(typescript@5.1.6)(zod@3.21.4) '@tanstack/react-query': specifier: ^4.29.19 version: 4.29.19(react-dom@18.2.0)(react@18.2.0) @@ -98,6 +92,9 @@ importers: '@trpc/server': specifier: 10.34.0 version: 10.34.0 + '@typebot.io/bot-engine': + specifier: workspace:* + version: link:../../packages/bot-engine '@typebot.io/emails': specifier: workspace:* version: link:../../packages/emails @@ -107,9 +104,6 @@ importers: '@typebot.io/nextjs': specifier: workspace:* version: link:../../packages/embeds/nextjs - '@typebot.io/viewer': - specifier: workspace:* - version: link:../viewer '@udecode/plate-basic-marks': specifier: 21.1.5 version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) @@ -122,9 +116,6 @@ importers: '@udecode/plate-link': specifier: 21.2.0 version: 21.2.0(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) - '@udecode/plate-serializer-html': - specifier: 21.1.5 - version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.94.2)(slate@0.94.1) '@udecode/plate-ui-link': specifier: 21.2.0 version: 21.2.0(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1)(styled-components@6.0.7) @@ -251,9 +242,6 @@ importers: slate-history: specifier: 0.93.0 version: 0.93.0(slate@0.94.1) - slate-hyperscript: - specifier: 0.77.0 - version: 0.77.0(slate@0.94.1) slate-react: specifier: 0.94.2 version: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) @@ -524,51 +512,36 @@ importers: '@trpc/server': specifier: 10.34.0 version: 10.34.0 + '@typebot.io/bot-engine': + specifier: workspace:* + version: link:../../packages/bot-engine '@typebot.io/nextjs': specifier: workspace:* version: link:../../packages/embeds/nextjs '@typebot.io/prisma': specifier: workspace:* version: link:../../packages/prisma - '@udecode/plate-common': - specifier: ^21.1.5 - version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) ai: specifier: 2.1.32 version: 2.1.32(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.0)(vue@3.3.4) bot-engine: specifier: workspace:* version: link:../../packages/deprecated/bot-engine - chrono-node: - specifier: 2.6.6 - version: 2.6.6 cors: specifier: 2.8.5 version: 2.8.5 - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - eventsource-parser: - specifier: ^1.0.0 - version: 1.0.0 google-spreadsheet: specifier: 4.0.2 version: 4.0.2(google-auth-library@8.9.0) got: specifier: 12.6.0 version: 12.6.0 - libphonenumber-js: - specifier: 1.10.37 - version: 1.10.37 next: specifier: 13.4.3 version: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) nextjs-cors: specifier: 2.1.2 version: 2.1.2(next@13.4.3) - node-html-parser: - specifier: ^6.1.5 - version: 6.1.5 nodemailer: specifier: 6.9.3 version: 6.9.3 @@ -584,9 +557,6 @@ importers: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) - remark-slate: - specifier: ^1.8.6 - version: 1.8.6 stripe: specifier: 12.13.0 version: 12.13.0 @@ -636,9 +606,6 @@ importers: '@types/react': specifier: 18.2.15 version: 18.2.15 - '@types/sanitize-html': - specifier: 2.9.0 - version: 2.9.0 dotenv-cli: specifier: ^7.2.1 version: 7.2.1 @@ -654,9 +621,6 @@ importers: next-runtime-env: specifier: ^1.6.2 version: 1.6.2 - node-fetch: - specifier: 3.3.1 - version: 3.3.1 papaparse: specifier: 5.4.1 version: 5.4.1 @@ -670,6 +634,88 @@ importers: specifier: 3.21.4 version: 3.21.4 + packages/bot-engine: + dependencies: + '@paralleldrive/cuid2': + specifier: 2.2.1 + version: 2.2.1 + '@planetscale/database': + specifier: ^1.8.0 + version: 1.8.0 + '@sentry/nextjs': + specifier: 7.66.0 + version: 7.66.0(next@13.4.3)(react@18.2.0) + '@trpc/server': + specifier: 10.34.0 + version: 10.34.0 + '@typebot.io/emails': + specifier: workspace:* + version: link:../emails + '@typebot.io/env': + specifier: workspace:* + version: link:../env + '@typebot.io/lib': + specifier: workspace:* + version: link:../lib + '@typebot.io/prisma': + specifier: workspace:* + version: link:../prisma + '@typebot.io/schemas': + specifier: workspace:* + version: link:../schemas + '@typebot.io/tsconfig': + specifier: workspace:* + version: link:../tsconfig + '@udecode/plate-common': + specifier: ^21.1.5 + version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) + ai: + specifier: 2.1.32 + version: 2.1.32(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.0)(vue@3.3.4) + chrono-node: + specifier: 2.6.6 + version: 2.6.6 + date-fns: + specifier: ^2.30.0 + version: 2.30.0 + google-auth-library: + specifier: 8.9.0 + version: 8.9.0 + google-spreadsheet: + specifier: 4.0.2 + version: 4.0.2(google-auth-library@8.9.0) + got: + specifier: 12.6.0 + version: 12.6.0 + libphonenumber-js: + specifier: 1.10.37 + version: 1.10.37 + node-html-parser: + specifier: ^6.1.5 + version: 6.1.5 + nodemailer: + specifier: 6.9.3 + version: 6.9.3 + openai-edge: + specifier: 1.2.2 + version: 1.2.2 + qs: + specifier: ^6.11.2 + version: 6.11.2 + remark-slate: + specifier: ^1.8.6 + version: 1.8.6 + stripe: + specifier: 12.13.0 + version: 12.13.0 + devDependencies: + '@types/nodemailer': + specifier: 6.4.8 + version: 6.4.8 + '@types/qs': + specifier: 6.9.7 + version: 6.9.7 + packages/deprecated/bot-engine: dependencies: '@stripe/react-stripe-js': @@ -847,6 +893,9 @@ importers: '@stripe/stripe-js': specifier: 1.54.1 version: 1.54.1 + '@typebot.io/bot-engine': + specifier: workspace:* + version: link:../../bot-engine '@udecode/plate-common': specifier: ^21.1.5 version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) @@ -1124,6 +1173,9 @@ importers: '@sentry/nextjs': specifier: 7.66.0 version: 7.66.0(next@13.4.3)(react@18.2.0) + '@trpc/server': + specifier: 10.34.0 + version: 10.34.0 '@udecode/plate-common': specifier: ^21.1.5 version: 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) @@ -8845,12 +8897,6 @@ packages: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} dev: false - /@types/sanitize-html@2.9.0: - resolution: {integrity: sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg==} - dependencies: - htmlparser2: 8.0.2 - dev: true - /@types/sax@1.2.4: resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} dependencies: @@ -9375,41 +9421,6 @@ packages: - scheduler dev: false - /@udecode/plate-serializer-html@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-hyperscript@0.77.0)(slate-react@0.94.2)(slate@0.94.1): - resolution: {integrity: sha512-V4P2o78Mpj7VvpvfgXMGG23XQZ30Kq/JXQTQxYxJufHF5hwy0MCYxxMK/oF8ED8zWM4G9hIKMHOqA4ZoFACjIA==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - slate: '>=0.94.0' - slate-history: '>=0.93.0' - slate-hyperscript: '>=0.66.0' - slate-react: '>=0.94.0' - dependencies: - '@udecode/plate-common': 21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1) - html-entities: 2.4.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - slate: 0.94.1 - slate-history: 0.93.0(slate@0.94.1) - slate-hyperscript: 0.77.0(slate@0.94.1) - slate-react: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) - transitivePeerDependencies: - - '@babel/core' - - '@babel/template' - - '@types/react' - - jotai-devtools - - jotai-immer - - jotai-optics - - jotai-redux - - jotai-tanstack-query - - jotai-urql - - jotai-valtio - - jotai-xstate - - jotai-zustand - - react-native - - scheduler - dev: false - /@udecode/plate-styled-components@21.1.5(@babel/core@7.22.9)(@types/react@18.2.15)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.93.0)(slate-react@0.94.2)(slate@0.94.1)(styled-components@6.0.7): resolution: {integrity: sha512-/L212XVeywPoVzpu51NrUfli4ZeD7nc5JacN23UAKhqjpfgJafrRtgUMC0jkWO8cwaBUEhQEZ/sGh6Tg9T805Q==} peerDependencies: @@ -12051,11 +12062,6 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: false - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true - /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -13690,14 +13696,6 @@ packages: xml-js: 1.6.11 dev: false - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 - dev: true - /fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} dev: false @@ -13892,13 +13890,6 @@ packages: combined-stream: 1.0.8 mime-types: 2.1.35 - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: true - /formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} dependencies: @@ -17340,11 +17331,6 @@ packages: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} dev: false - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: true - /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: @@ -17373,15 +17359,6 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: true - /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -20336,15 +20313,6 @@ packages: slate: 0.94.1 dev: false - /slate-hyperscript@0.77.0(slate@0.94.1): - resolution: {integrity: sha512-M6uRpttwKnosniQORNPYQABHQ9XWC7qaSr/127LWWPjTOR5MSSwrHGrghN81BhZVqpICHrI7jkPA2813cWdHNA==} - peerDependencies: - slate: '>=0.65.3' - dependencies: - is-plain-object: 5.0.0 - slate: 0.94.1 - dev: false - /slate-react@0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1): resolution: {integrity: sha512-4wDSuTuGBkdQ609CS55uc2Yhfa5but21usBgAtCVhPJQazL85kzN2vUUYTmGb7d/mpP9tdnJiVPopIyhqlRJ8Q==} peerDependencies: @@ -22338,11 +22306,6 @@ packages: transitivePeerDependencies: - encoding - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - dev: true - /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}