@@ -57,6 +57,7 @@ export const sendMessageV1 = publicProcedure
|
||||
logs,
|
||||
clientSideActions,
|
||||
newSessionState,
|
||||
visitedEdges,
|
||||
} = await startSession({
|
||||
version: 1,
|
||||
startParams,
|
||||
@@ -77,6 +78,7 @@ export const sendMessageV1 = publicProcedure
|
||||
input,
|
||||
logs: allLogs,
|
||||
clientSideActions,
|
||||
visitedEdges,
|
||||
})
|
||||
|
||||
return {
|
||||
@@ -103,6 +105,7 @@ export const sendMessageV1 = publicProcedure
|
||||
newSessionState,
|
||||
logs,
|
||||
lastMessageNewFormat,
|
||||
visitedEdges,
|
||||
} = await continueBotFlow(message, { version: 1, state: session.state })
|
||||
|
||||
const allLogs = clientLogs ? [...(logs ?? []), ...clientLogs] : logs
|
||||
@@ -116,6 +119,7 @@ export const sendMessageV1 = publicProcedure
|
||||
input,
|
||||
logs: allLogs,
|
||||
clientSideActions,
|
||||
visitedEdges,
|
||||
})
|
||||
|
||||
return {
|
||||
|
||||
@@ -57,6 +57,7 @@ export const sendMessageV2 = publicProcedure
|
||||
logs,
|
||||
clientSideActions,
|
||||
newSessionState,
|
||||
visitedEdges,
|
||||
} = await startSession({
|
||||
version: 2,
|
||||
startParams,
|
||||
@@ -77,6 +78,7 @@ export const sendMessageV2 = publicProcedure
|
||||
input,
|
||||
logs: allLogs,
|
||||
clientSideActions,
|
||||
visitedEdges,
|
||||
})
|
||||
|
||||
return {
|
||||
@@ -103,6 +105,7 @@ export const sendMessageV2 = publicProcedure
|
||||
newSessionState,
|
||||
logs,
|
||||
lastMessageNewFormat,
|
||||
visitedEdges,
|
||||
} = await continueBotFlow(message, { version: 2, state: session.state })
|
||||
|
||||
const allLogs = clientLogs ? [...(logs ?? []), ...clientLogs] : logs
|
||||
@@ -116,6 +119,7 @@ export const sendMessageV2 = publicProcedure
|
||||
input,
|
||||
logs: allLogs,
|
||||
clientSideActions,
|
||||
visitedEdges,
|
||||
})
|
||||
|
||||
return {
|
||||
|
||||
@@ -94,7 +94,7 @@ const updateSessionState = (
|
||||
},
|
||||
}
|
||||
: typebotInQueue
|
||||
),
|
||||
) as SessionState['typebotsQueue'],
|
||||
})
|
||||
|
||||
const updateVariablesInSession = (
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
import { publicProcedure } from '@/helpers/server/trpc'
|
||||
import { TRPCError } from '@trpc/server'
|
||||
import {
|
||||
Block,
|
||||
FileInputBlock,
|
||||
InputBlockType,
|
||||
LogicBlockType,
|
||||
PublicTypebot,
|
||||
TypebotLinkBlock,
|
||||
parseGroups,
|
||||
} from '@typebot.io/schemas'
|
||||
import { byId, isDefined } from '@typebot.io/lib'
|
||||
import { z } from 'zod'
|
||||
import { generatePresignedUrl } from '@typebot.io/lib/s3/deprecated/generatePresignedUrl'
|
||||
import { env } from '@typebot.io/env'
|
||||
import prisma from '@typebot.io/lib/prisma'
|
||||
import { InputBlockType } from '@typebot.io/schemas/features/blocks/inputs/constants'
|
||||
import { LogicBlockType } from '@typebot.io/schemas/features/blocks/logic/constants'
|
||||
import { PublicTypebot } from '@typebot.io/prisma'
|
||||
|
||||
export const getUploadUrl = publicProcedure
|
||||
.meta({
|
||||
@@ -45,13 +47,20 @@ export const getUploadUrl = publicProcedure
|
||||
'S3 not properly configured. Missing one of those variables: S3_ENDPOINT, S3_ACCESS_KEY, S3_SECRET_KEY',
|
||||
})
|
||||
|
||||
const publicTypebot = (await prisma.publicTypebot.findFirst({
|
||||
const publicTypebot = await prisma.publicTypebot.findFirst({
|
||||
where: { typebotId },
|
||||
select: {
|
||||
version: true,
|
||||
groups: true,
|
||||
typebotId: true,
|
||||
},
|
||||
})) as Pick<PublicTypebot, 'groups' | 'typebotId'>
|
||||
})
|
||||
|
||||
if (!publicTypebot)
|
||||
throw new TRPCError({
|
||||
code: 'BAD_REQUEST',
|
||||
message: 'Typebot not found',
|
||||
})
|
||||
|
||||
const fileUploadBlock = await getFileUploadBlock(publicTypebot, blockId)
|
||||
|
||||
@@ -73,27 +82,32 @@ export const getUploadUrl = publicProcedure
|
||||
})
|
||||
|
||||
const getFileUploadBlock = async (
|
||||
publicTypebot: Pick<PublicTypebot, 'groups' | 'typebotId'>,
|
||||
publicTypebot: Pick<PublicTypebot, 'groups' | 'typebotId' | 'version'>,
|
||||
blockId: string
|
||||
): Promise<FileInputBlock | null> => {
|
||||
const fileUploadBlock = publicTypebot.groups
|
||||
.flatMap((group) => group.blocks)
|
||||
const groups = parseGroups(publicTypebot.groups, {
|
||||
typebotVersion: publicTypebot.version,
|
||||
})
|
||||
const fileUploadBlock = groups
|
||||
.flatMap<Block>((group) => group.blocks)
|
||||
.find(byId(blockId))
|
||||
if (fileUploadBlock?.type === InputBlockType.FILE) return fileUploadBlock
|
||||
const linkedTypebotIds = publicTypebot.groups
|
||||
.flatMap((group) => group.blocks)
|
||||
const linkedTypebotIds = groups
|
||||
.flatMap<Block>((group) => group.blocks)
|
||||
.filter((block) => block.type === LogicBlockType.TYPEBOT_LINK)
|
||||
.flatMap((block) => (block as TypebotLinkBlock).options.typebotId)
|
||||
.flatMap((block) => (block as TypebotLinkBlock).options?.typebotId)
|
||||
.filter(isDefined)
|
||||
const linkedTypebots = (await prisma.publicTypebot.findMany({
|
||||
const linkedTypebots = await prisma.publicTypebot.findMany({
|
||||
where: { typebotId: { in: linkedTypebotIds } },
|
||||
select: {
|
||||
groups: true,
|
||||
},
|
||||
})) as Pick<PublicTypebot, 'groups'>[]
|
||||
const fileUploadBlockFromLinkedTypebots = linkedTypebots
|
||||
.flatMap((typebot) => typebot.groups)
|
||||
.flatMap((group) => group.blocks)
|
||||
})
|
||||
const fileUploadBlockFromLinkedTypebots = parseGroups(
|
||||
linkedTypebots.flatMap((typebot) => typebot.groups),
|
||||
{ typebotVersion: publicTypebot.version }
|
||||
)
|
||||
.flatMap<Block>((group) => group.blocks)
|
||||
.find(byId(blockId))
|
||||
if (fileUploadBlockFromLinkedTypebots?.type === InputBlockType.FILE)
|
||||
return fileUploadBlockFromLinkedTypebots
|
||||
|
||||
@@ -3,9 +3,11 @@ 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'
|
||||
import { getSession } from '@typebot.io/bot-engine/queries/getSession'
|
||||
import { parseGroups } from '@typebot.io/schemas'
|
||||
import { InputBlockType } from '@typebot.io/schemas/features/blocks/inputs/constants'
|
||||
import { getBlockById } from '@typebot.io/lib/getBlockById'
|
||||
|
||||
export const generateUploadUrl = publicProcedure
|
||||
.meta({
|
||||
@@ -56,6 +58,7 @@ export const generateUploadUrl = publicProcedure
|
||||
typebotId: filePathProps.typebotId,
|
||||
},
|
||||
select: {
|
||||
version: true,
|
||||
groups: true,
|
||||
typebot: {
|
||||
select: {
|
||||
@@ -75,8 +78,9 @@ export const generateUploadUrl = publicProcedure
|
||||
|
||||
const filePath = `public/workspaces/${workspaceId}/typebots/${filePathProps.typebotId}/results/${filePathProps.resultId}/${filePathProps.fileName}`
|
||||
|
||||
const fileUploadBlock = publicTypebotSchema._def.schema.shape.groups
|
||||
.parse(publicTypebot.groups)
|
||||
const fileUploadBlock = parseGroups(publicTypebot.groups, {
|
||||
typebotVersion: publicTypebot.version,
|
||||
})
|
||||
.flatMap((group) => group.blocks)
|
||||
.find((block) => block.id === filePathProps.blockId)
|
||||
|
||||
@@ -90,7 +94,7 @@ export const generateUploadUrl = publicProcedure
|
||||
fileType,
|
||||
filePath,
|
||||
maxFileSize:
|
||||
fileUploadBlock.options.sizeLimit ??
|
||||
fileUploadBlock.options?.sizeLimit ??
|
||||
env.NEXT_PUBLIC_BOT_FILE_UPLOAD_MAX_SIZE,
|
||||
})
|
||||
|
||||
@@ -118,6 +122,7 @@ export const generateUploadUrl = publicProcedure
|
||||
typebotId,
|
||||
},
|
||||
select: {
|
||||
version: true,
|
||||
groups: true,
|
||||
typebot: {
|
||||
select: {
|
||||
@@ -139,10 +144,18 @@ export const generateUploadUrl = publicProcedure
|
||||
|
||||
const filePath = `public/workspaces/${workspaceId}/typebots/${typebotId}/results/${resultId}/${filePathProps.fileName}`
|
||||
|
||||
const fileUploadBlock = publicTypebotSchema._def.schema.shape.groups
|
||||
.parse(publicTypebot.groups)
|
||||
.flatMap((group) => group.blocks)
|
||||
.find((block) => block.id === session.state.currentBlock?.blockId)
|
||||
if (session.state.currentBlockId === undefined)
|
||||
throw new TRPCError({
|
||||
code: 'BAD_REQUEST',
|
||||
message: "Can't find currentBlockId in session state",
|
||||
})
|
||||
|
||||
const { block: fileUploadBlock } = getBlockById(
|
||||
session.state.currentBlockId,
|
||||
parseGroups(publicTypebot.groups, {
|
||||
typebotVersion: publicTypebot.version,
|
||||
})
|
||||
)
|
||||
|
||||
if (fileUploadBlock?.type !== InputBlockType.FILE)
|
||||
throw new TRPCError({
|
||||
@@ -154,8 +167,9 @@ export const generateUploadUrl = publicProcedure
|
||||
fileType,
|
||||
filePath,
|
||||
maxFileSize:
|
||||
fileUploadBlock.options.sizeLimit ??
|
||||
env.NEXT_PUBLIC_BOT_FILE_UPLOAD_MAX_SIZE,
|
||||
fileUploadBlock.options && 'sizeLimit' in fileUploadBlock.options
|
||||
? fileUploadBlock.options.sizeLimit
|
||||
: env.NEXT_PUBLIC_BOT_FILE_UPLOAD_MAX_SIZE,
|
||||
})
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user