diff --git a/apps/builder/package.json b/apps/builder/package.json index 865584da9e..ce81e43215 100644 --- a/apps/builder/package.json +++ b/apps/builder/package.json @@ -33,6 +33,7 @@ "@trpc/next": "10.34.0", "@trpc/react-query": "10.34.0", "@trpc/server": "10.34.0", + "@typebot.io/bot-engine": "workspace:*", "@typebot.io/emails": "workspace:*", "@typebot.io/env": "workspace:*", "@typebot.io/nextjs": "workspace:*", @@ -65,13 +66,13 @@ "libphonenumber-js": "1.10.37", "micro": "10.0.1", "micro-cors": "0.1.1", - "next": "13.4.3", + "next": "13.5.4", "next-auth": "4.22.1", "next-international": "0.9.5", "nextjs-cors": "^2.1.2", "nodemailer": "6.9.3", "nprogress": "0.2.0", - "openai-edge": "1.2.2", + "openai": "^4.11.1", "papaparse": "5.4.1", "posthog-js": "^1.77.1", "posthog-node": "3.1.1", @@ -89,8 +90,7 @@ "tinycolor2": "1.6.0", "trpc-openapi": "1.2.0", "unsplash-js": "^7.0.18", - "use-debounce": "9.0.4", - "@typebot.io/bot-engine": "workspace:*" + "use-debounce": "9.0.4" }, "devDependencies": { "@chakra-ui/styled-system": "2.9.1", 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 9a4a6dc903..b6b6d6c491 100644 --- a/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts +++ b/apps/builder/src/features/blocks/integrations/openai/api/listModels.ts @@ -3,13 +3,13 @@ import { authenticatedProcedure } from '@/helpers/server/trpc' import { TRPCError } from '@trpc/server' import { z } from 'zod' import { isReadWorkspaceFobidden } from '@/features/workspace/helpers/isReadWorkspaceFobidden' -import { Configuration, OpenAIApi, ResponseTypes } from 'openai-edge' import { decrypt } from '@typebot.io/lib/api' import { OpenAICredentials, defaultBaseUrl, } from '@typebot.io/schemas/features/blocks/integrations/openai' import { isNotEmpty } from '@typebot.io/lib/utils' +import { OpenAI, ClientOptions } from 'openai' export const listModels = authenticatedProcedure .meta({ @@ -79,41 +79,26 @@ export const listModels = authenticatedProcedure credentials.iv )) as OpenAICredentials['data'] - const config = new Configuration({ + const config = { apiKey: data.apiKey, - basePath: baseUrl, - baseOptions: { - headers: { - 'api-key': data.apiKey, - }, + baseURL: baseUrl, + defaultHeaders: { + 'api-key': data.apiKey, }, - defaultQueryParams: isNotEmpty(apiVersion) - ? new URLSearchParams({ + defaultQuery: isNotEmpty(apiVersion) + ? { 'api-version': apiVersion, - }) + } : undefined, - }) - - const openai = new OpenAIApi(config) + } satisfies ClientOptions - const response = await openai.listModels() + const openai = new OpenAI(config) - const modelsData = (await response.json()) as - | ResponseTypes['listModels'] - | { - error: unknown - } - - if ('error' in modelsData) - throw new TRPCError({ - code: 'INTERNAL_SERVER_ERROR', - message: 'Could not list models', - cause: modelsData.error, - }) + const models = await openai.models.list() return { models: - modelsData.data + models.data .sort((a, b) => b.created - a.created) .map((model) => model.id) ?? [], } diff --git a/apps/landing-page/package.json b/apps/landing-page/package.json index e379fe7b22..9a13a04584 100644 --- a/apps/landing-page/package.json +++ b/apps/landing-page/package.json @@ -20,7 +20,7 @@ "aos": "2.3.4", "focus-visible": "5.2.0", "framer-motion": "10.12.20", - "next": "13.4.3", + "next": "13.5.4", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/apps/viewer/package.json b/apps/viewer/package.json index bf2c8779e4..ad0bfcc81a 100644 --- a/apps/viewer/package.json +++ b/apps/viewer/package.json @@ -14,23 +14,23 @@ "@planetscale/database": "^1.8.0", "@sentry/nextjs": "7.66.0", "@trpc/server": "10.34.0", + "@typebot.io/bot-engine": "workspace:*", "@typebot.io/nextjs": "workspace:*", "@typebot.io/prisma": "workspace:*", - "ai": "2.1.32", + "ai": "2.2.14", "bot-engine": "workspace:*", "cors": "2.8.5", "google-spreadsheet": "4.0.2", "got": "12.6.0", - "next": "13.4.3", + "next": "13.5.4", "nextjs-cors": "2.1.2", "nodemailer": "6.9.3", - "openai-edge": "1.2.2", + "openai": "^4.11.1", "qs": "6.11.2", "react": "18.2.0", "react-dom": "18.2.0", "stripe": "12.13.0", - "trpc-openapi": "1.2.0", - "@typebot.io/bot-engine": "workspace:*" + "trpc-openapi": "1.2.0" }, "devDependencies": { "@faire/mjml-react": "3.3.0", diff --git a/apps/viewer/src/pages/api/integrations/openai/streamer.ts b/apps/viewer/src/pages/api/integrations/openai/streamer.ts index ad74f53298..aabef1d88d 100644 --- a/apps/viewer/src/pages/api/integrations/openai/streamer.ts +++ b/apps/viewer/src/pages/api/integrations/openai/streamer.ts @@ -2,14 +2,19 @@ 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' +import OpenAI from 'openai' +import { NextResponse } from 'next/dist/server/web/spec-extension/response' export const config = { runtime: 'edge', regions: ['lhr1'], } +const responseHeaders = { + 'Access-Control-Allow-Origin': '*', +} + const handler = async (req: Request) => { if (req.method === 'OPTIONS') { return new Response('ok', { @@ -23,12 +28,20 @@ const handler = async (req: Request) => { } const { sessionId, messages } = (await req.json()) as { sessionId: string - messages: ChatCompletionRequestMessage[] + messages: OpenAI.Chat.ChatCompletionMessage[] } - if (!sessionId) return new Response('No session ID provided', { status: 400 }) + if (!sessionId) + return NextResponse.json( + { message: 'No session ID provided' }, + { status: 400, headers: responseHeaders } + ) - if (!messages) return new Response('No messages provided', { status: 400 }) + if (!messages) + return NextResponse.json( + { message: 'No messages provided' }, + { status: 400, headers: responseHeaders } + ) const conn = connect({ url: env.DATABASE_URL }) @@ -40,7 +53,11 @@ const handler = async (req: Request) => { const state = (chatSession.rows.at(0) as { state: SessionState } | undefined) ?.state - if (!state) return new Response('No state found', { status: 400 }) + if (!state) + return NextResponse.json( + { message: 'No state found' }, + { status: 400, headers: responseHeaders } + ) const group = state.typebotsQueue[0].typebot.groups.find( (group) => group.id === state.currentBlock?.groupId @@ -53,36 +70,46 @@ const handler = async (req: Request) => { const block = blockIndex >= 0 ? group?.blocks[blockIndex ?? 0] : null if (!block || !group) - return new Response('Current block not found', { status: 400 }) + return NextResponse.json( + { message: 'Current block not found' }, + { status: 400, headers: responseHeaders } + ) if ( block.type !== IntegrationBlockType.OPEN_AI || block.options.task !== 'Create chat completion' ) - return new Response('Current block is not an OpenAI block', { status: 400 }) - - const streamOrResponse = await getChatCompletionStream(conn)( - state, - block.options, - messages - ) - - if (!streamOrResponse) - return new Response('Could not create stream', { status: 400 }) - - if ('ok' in streamOrResponse) - return new Response(streamOrResponse.body, { - status: streamOrResponse.status, - headers: { - 'Access-Control-Allow-Origin': '*', - }, + return NextResponse.json( + { message: 'Current block is not an OpenAI block' }, + { status: 400, headers: responseHeaders } + ) + + try { + const stream = await getChatCompletionStream(conn)( + state, + block.options, + messages + ) + if (!stream) + return NextResponse.json( + { message: 'Could not create stream' }, + { status: 400, headers: responseHeaders } + ) + + return new StreamingTextResponse(stream, { + headers: responseHeaders, }) - - return new StreamingTextResponse(streamOrResponse, { - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }) + } catch (error) { + if (error instanceof OpenAI.APIError) { + const { name, status, message } = error + return NextResponse.json( + { name, status, message }, + { status, headers: responseHeaders } + ) + } else { + throw error + } + } } export default handler diff --git a/packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts b/packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts index 01366c1df9..b01d0be219 100644 --- a/packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts +++ b/packages/bot-engine/blocks/integrations/openai/createChatCompletionOpenAI.ts @@ -105,7 +105,7 @@ export const createChatCompletionOpenAI = async ( } } - const { response, logs } = await executeChatCompletionOpenAIRequest({ + const { chatCompletion, logs } = await executeChatCompletionOpenAIRequest({ apiKey, messages, model: options.model, @@ -113,15 +113,15 @@ export const createChatCompletionOpenAI = async ( baseUrl: options.baseUrl, apiVersion: options.apiVersion, }) - if (!response) + if (!chatCompletion) return { outgoingEdgeId, logs, } - const messageContent = response.choices.at(0)?.message?.content - const totalTokens = response.usage?.total_tokens + const messageContent = chatCompletion.choices.at(0)?.message?.content + const totalTokens = chatCompletion.usage?.total_tokens if (isEmpty(messageContent)) { - console.error('OpenAI block returned empty message', response) + console.error('OpenAI block returned empty message', chatCompletion.choices) return { outgoingEdgeId, newSessionState } } return resumeChatCompletion(newSessionState, { diff --git a/packages/bot-engine/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts b/packages/bot-engine/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts index d1bbadf5db..46ce2a3dff 100644 --- a/packages/bot-engine/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts +++ b/packages/bot-engine/blocks/integrations/openai/executeChatCompletionOpenAIRequest.ts @@ -2,15 +2,12 @@ import { isNotEmpty } from '@typebot.io/lib/utils' import { ChatReply } from '@typebot.io/schemas' import { OpenAIBlock } from '@typebot.io/schemas/features/blocks/integrations/openai' import { HTTPError } from 'got' -import { - Configuration, - OpenAIApi, - type CreateChatCompletionRequest, - type CreateChatCompletionResponse, - ResponseTypes, -} from 'openai-edge' +import { ClientOptions, OpenAI } from 'openai' -type Props = Pick & { +type Props = Pick< + OpenAI.Chat.ChatCompletionCreateParams, + 'messages' | 'model' +> & { apiKey: string temperature: number | undefined currentLogs?: ChatReply['logs'] @@ -27,38 +24,34 @@ export const executeChatCompletionOpenAIRequest = async ({ isRetrying, currentLogs = [], }: Props): Promise<{ - response?: CreateChatCompletionResponse + chatCompletion?: OpenAI.Chat.Completions.ChatCompletion logs?: ChatReply['logs'] }> => { const logs: ChatReply['logs'] = currentLogs if (messages.length === 0) return { logs } try { - const config = new Configuration({ + const config = { apiKey, - basePath: baseUrl, - baseOptions: { - headers: { - 'api-key': apiKey, - }, + baseURL: baseUrl, + defaultHeaders: { + 'api-key': apiKey, }, - defaultQueryParams: isNotEmpty(apiVersion) - ? new URLSearchParams({ + defaultQuery: isNotEmpty(apiVersion) + ? { 'api-version': apiVersion, - }) + } : undefined, - }) + } satisfies ClientOptions - const openai = new OpenAIApi(config) + const openai = new OpenAI(config) - const response = await openai.createChatCompletion({ + const chatCompletion = await openai.chat.completions.create({ model, messages, temperature, }) - const completion = - (await response.json()) as ResponseTypes['createChatCompletion'] - return { response: completion, logs } + return { chatCompletion, logs } } catch (error) { if (error instanceof HTTPError) { if ( diff --git a/packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts b/packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts index f1c61620a7..cec36cb115 100644 --- a/packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts +++ b/packages/bot-engine/blocks/integrations/openai/getChatCompletionStream.ts @@ -7,19 +7,15 @@ import { } from '@typebot.io/schemas/features/blocks/integrations/openai' import { SessionState } from '@typebot.io/schemas/features/chat/sessionState' import { OpenAIStream } from 'ai' -import { - ChatCompletionRequestMessage, - Configuration, - OpenAIApi, -} from 'openai-edge' import { parseVariableNumber } from '../../../variables/parseVariableNumber' +import { ClientOptions, OpenAI } from 'openai' export const getChatCompletionStream = (conn: Connection) => async ( state: SessionState, options: ChatCompletionOpenAIOptions, - messages: ChatCompletionRequestMessage[] + messages: OpenAI.Chat.ChatCompletionMessageParam[] ) => { if (!options.credentialsId) return const credentials = ( @@ -41,31 +37,27 @@ export const getChatCompletionStream = options.advancedSettings?.temperature ) - const config = new Configuration({ + const config = { apiKey, - basePath: options.baseUrl, - baseOptions: { - headers: { - 'api-key': apiKey, - }, + baseURL: options.baseUrl, + defaultHeaders: { + 'api-key': apiKey, }, - defaultQueryParams: isNotEmpty(options.apiVersion) - ? new URLSearchParams({ + defaultQuery: isNotEmpty(options.apiVersion) + ? { 'api-version': options.apiVersion, - }) + } : undefined, - }) + } satisfies ClientOptions - const openai = new OpenAIApi(config) + const openai = new OpenAI(config) - const response = await openai.createChatCompletion({ + const response = await openai.chat.completions.create({ model: options.model, temperature, stream: true, messages, }) - if (!response.ok) return response - return OpenAIStream(response) } diff --git a/packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts b/packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts index 07e8069e45..67ec8c62d8 100644 --- a/packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts +++ b/packages/bot-engine/blocks/integrations/openai/parseChatCompletionMessages.ts @@ -1,7 +1,7 @@ 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 type { OpenAI } from 'openai' import { parseVariables } from '../../../variables/parseVariables' import { transformStringVariablesToList } from '../../../variables/transformVariablesToList' @@ -11,7 +11,7 @@ export const parseChatCompletionMessages = messages: ChatCompletionOpenAIOptions['messages'] ): { variablesTransformedToList: VariableWithValue[] - messages: ChatCompletionRequestMessage[] + messages: OpenAI.Chat.ChatCompletionMessageParam[] } => { const variablesTransformedToList: VariableWithValue[] = [] const parsedMessages = messages @@ -47,7 +47,7 @@ export const parseChatCompletionMessages = variable.id === message.content?.assistantMessagesVariableId )?.value ?? []) as string[] - let allMessages: ChatCompletionRequestMessage[] = [] + let allMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [] if (userMessages.length > assistantMessages.length) allMessages = userMessages.flatMap((userMessage, index) => [ @@ -56,7 +56,7 @@ export const parseChatCompletionMessages = content: userMessage, }, { role: 'assistant', content: assistantMessages.at(index) ?? '' }, - ]) satisfies ChatCompletionRequestMessage[] + ]) satisfies OpenAI.Chat.ChatCompletionMessageParam[] else { allMessages = assistantMessages.flatMap( (assistantMessage, index) => [ @@ -66,7 +66,7 @@ export const parseChatCompletionMessages = content: userMessages.at(index) ?? '', }, ] - ) satisfies ChatCompletionRequestMessage[] + ) satisfies OpenAI.Chat.ChatCompletionMessageParam[] } return allMessages @@ -77,11 +77,11 @@ export const parseChatCompletionMessages = name: message.name ? parseVariables(variables)(message.name) : undefined, - } satisfies ChatCompletionRequestMessage + } satisfies OpenAI.Chat.ChatCompletionMessageParam }) .filter( (message) => isNotEmpty(message?.role) && isNotEmpty(message?.content) - ) as ChatCompletionRequestMessage[] + ) as OpenAI.Chat.ChatCompletionMessageParam[] return { variablesTransformedToList, diff --git a/packages/bot-engine/package.json b/packages/bot-engine/package.json index 3b19848c3e..a984523973 100644 --- a/packages/bot-engine/package.json +++ b/packages/bot-engine/package.json @@ -18,7 +18,7 @@ "@typebot.io/tsconfig": "workspace:*", "@udecode/plate-common": "^21.1.5", "@udecode/plate-serializer-md": "^24.4.0", - "ai": "2.1.32", + "ai": "2.2.14", "chrono-node": "2.6.6", "date-fns": "^2.30.0", "google-auth-library": "8.9.0", @@ -27,7 +27,7 @@ "libphonenumber-js": "1.10.37", "node-html-parser": "^6.1.5", "nodemailer": "6.9.3", - "openai-edge": "1.2.2", + "openai": "^4.11.1", "qs": "^6.11.2", "remark-slate": "^1.8.6", "stripe": "12.13.0" diff --git a/packages/embeds/js/src/utils/executeClientSideActions.ts b/packages/embeds/js/src/utils/executeClientSideActions.ts index 482283ef03..d3589f7fea 100644 --- a/packages/embeds/js/src/utils/executeClientSideActions.ts +++ b/packages/embeds/js/src/utils/executeClientSideActions.ts @@ -63,7 +63,7 @@ export const executeClientSideAction = async ({ logs: [ { status: 'error', - description: 'Failed to stream OpenAI completion', + description: 'OpenAI returned an error', details: JSON.stringify(error, null, 2), }, ], diff --git a/packages/env/package.json b/packages/env/package.json index 2207d1e0dc..c632ba157a 100644 --- a/packages/env/package.json +++ b/packages/env/package.json @@ -6,7 +6,7 @@ "main": "./env.ts", "types": "./env.ts", "dependencies": { - "@t3-oss/env-nextjs": "^0.6.0", + "@t3-oss/env-nextjs": "^0.7.0", "zod": "3.21.4" }, "devDependencies": { diff --git a/packages/lib/package.json b/packages/lib/package.json index e665d78c32..459caac6bd 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -13,7 +13,7 @@ "@typebot.io/schemas": "workspace:*", "@typebot.io/tsconfig": "workspace:*", "@types/nodemailer": "6.4.8", - "next": "13.4.3", + "next": "13.5.4", "nodemailer": "6.9.3", "typescript": "5.1.6" }, diff --git a/packages/lib/utils.ts b/packages/lib/utils.ts index 83c47555f6..803e973720 100644 --- a/packages/lib/utils.ts +++ b/packages/lib/utils.ts @@ -62,7 +62,9 @@ export const isNotDefined = ( value: T | undefined | null ): value is undefined | null => value === undefined || value === null -export const isEmpty = (value: string | undefined | null): value is undefined => +export const isEmpty = ( + value: string | undefined | null +): value is undefined | null => value === undefined || value === null || value === '' export const isNotEmpty = (value: string | undefined | null): value is string => diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49aa606559..3f21af6bb3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,7 +73,7 @@ importers: version: 2.2.1 '@sentry/nextjs': specifier: 7.66.0 - version: 7.66.0(next@13.4.3)(react@18.2.0) + version: 7.66.0(next@13.5.4)(react@18.2.0) '@tanstack/react-query': specifier: ^4.29.19 version: 4.29.19(react-dom@18.2.0)(react@18.2.0) @@ -85,7 +85,7 @@ importers: version: 10.34.0(@trpc/server@10.34.0) '@trpc/next': specifier: 10.34.0 - version: 10.34.0(@tanstack/react-query@4.29.19)(@trpc/client@10.34.0)(@trpc/react-query@10.34.0)(@trpc/server@10.34.0)(next@13.4.3)(react-dom@18.2.0)(react@18.2.0) + version: 10.34.0(@tanstack/react-query@4.29.19)(@trpc/client@10.34.0)(@trpc/react-query@10.34.0)(@trpc/server@10.34.0)(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) '@trpc/react-query': specifier: 10.34.0 version: 10.34.0(@tanstack/react-query@4.29.19)(@trpc/client@10.34.0)(@trpc/server@10.34.0)(react-dom@18.2.0)(react@18.2.0) @@ -192,26 +192,26 @@ importers: specifier: 0.1.1 version: 0.1.1 next: - specifier: 13.4.3 - version: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: 4.22.1 - version: 4.22.1(next@13.4.3)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0) + version: 4.22.1(next@13.5.4)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0) next-international: specifier: 0.9.5 version: 0.9.5 nextjs-cors: specifier: ^2.1.2 - version: 2.1.2(next@13.4.3) + version: 2.1.2(next@13.5.4) nodemailer: specifier: 6.9.3 version: 6.9.3 nprogress: specifier: 0.2.0 version: 0.2.0 - openai-edge: - specifier: 1.2.2 - version: 1.2.2 + openai: + specifier: ^4.11.1 + version: 4.11.1 papaparse: specifier: 5.4.1 version: 5.4.1 @@ -440,8 +440,8 @@ importers: specifier: 10.12.20 version: 10.12.20(react-dom@18.2.0)(react@18.2.0) next: - specifier: 13.4.3 - version: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -508,7 +508,7 @@ importers: version: 1.8.0 '@sentry/nextjs': specifier: 7.66.0 - version: 7.66.0(next@13.4.3)(react@18.2.0) + version: 7.66.0(next@13.5.4)(react@18.2.0) '@trpc/server': specifier: 10.34.0 version: 10.34.0 @@ -522,8 +522,8 @@ importers: specifier: workspace:* version: link:../../packages/prisma 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) + specifier: 2.2.14 + version: 2.2.14(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 @@ -537,17 +537,17 @@ importers: specifier: 12.6.0 version: 12.6.0 next: - specifier: 13.4.3 - version: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(@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) + version: 2.1.2(next@13.5.4) nodemailer: specifier: 6.9.3 version: 6.9.3 - openai-edge: - specifier: 1.2.2 - version: 1.2.2 + openai: + specifier: ^4.11.1 + version: 4.11.1 qs: specifier: 6.11.2 version: 6.11.2 @@ -644,7 +644,7 @@ importers: version: 1.8.0 '@sentry/nextjs': specifier: 7.66.0 - version: 7.66.0(next@13.4.3)(react@18.2.0) + version: 7.66.0(next@13.5.4)(react@18.2.0) '@trpc/server': specifier: 10.34.0 version: 10.34.0 @@ -673,8 +673,8 @@ importers: specifier: ^24.4.0 version: 24.4.0(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.99.0)(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) + specifier: 2.2.14 + version: 2.2.14(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 @@ -699,9 +699,9 @@ importers: nodemailer: specifier: 6.9.3 version: 6.9.3 - openai-edge: - specifier: 1.2.2 - version: 1.2.2 + openai: + specifier: ^4.11.1 + version: 4.11.1 qs: specifier: ^6.11.2 version: 6.11.2 @@ -1142,8 +1142,8 @@ importers: packages/env: dependencies: '@t3-oss/env-nextjs': - specifier: ^0.6.0 - version: 0.6.0(typescript@5.1.6)(zod@3.21.4) + specifier: ^0.7.0 + version: 0.7.0(zod@3.21.4) zod: specifier: 3.21.4 version: 3.21.4 @@ -1184,7 +1184,7 @@ importers: dependencies: '@sentry/nextjs': specifier: 7.66.0 - version: 7.66.0(next@13.4.3)(react@18.2.0) + version: 7.66.0(next@13.5.4)(react@18.2.0) '@trpc/server': specifier: 10.34.0 version: 10.34.0 @@ -1223,8 +1223,8 @@ importers: specifier: 6.4.8 version: 6.4.8 next: - specifier: 13.4.3 - version: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) nodemailer: specifier: 6.9.3 version: 6.9.3 @@ -7031,6 +7031,10 @@ packages: /@next/env@13.4.3: resolution: {integrity: sha512-pa1ErjyFensznttAk3EIv77vFbfSYT6cLzVRK5jx4uiRuCQo+m2wCFAREaHKIy63dlgvOyMlzh6R8Inu8H3KrQ==} + dev: false + + /@next/env@13.5.4: + resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} /@next/eslint-plugin-next@13.4.9: resolution: {integrity: sha512-nDtGpa992tNyAkT/KmSMy7QkHfNZmGCBYhHtafU97DubqxzNdvLsqRtliQ4FU04CysRCtvP2hg8rRC1sAKUTUA==} @@ -7044,6 +7048,15 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-arm64@13.5.4: + resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true optional: true /@next/swc-darwin-x64@13.4.3: @@ -7052,6 +7065,15 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@13.5.4: + resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true optional: true /@next/swc-linux-arm64-gnu@13.4.3: @@ -7060,6 +7082,15 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@13.5.4: + resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true optional: true /@next/swc-linux-arm64-musl@13.4.3: @@ -7068,6 +7099,15 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@13.5.4: + resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true optional: true /@next/swc-linux-x64-gnu@13.4.3: @@ -7076,6 +7116,15 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@13.5.4: + resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true optional: true /@next/swc-linux-x64-musl@13.4.3: @@ -7084,6 +7133,15 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@13.5.4: + resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true optional: true /@next/swc-win32-arm64-msvc@13.4.3: @@ -7092,6 +7150,15 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@13.5.4: + resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true optional: true /@next/swc-win32-ia32-msvc@13.4.3: @@ -7100,6 +7167,15 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@13.5.4: + resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true optional: true /@next/swc-win32-x64-msvc@13.4.3: @@ -7108,6 +7184,15 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@13.5.4: + resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true optional: true /@nextjournal/lang-clojure@1.0.0: @@ -7955,7 +8040,7 @@ packages: tslib: 2.6.0 dev: false - /@sentry/nextjs@7.66.0(next@13.4.3)(react@18.2.0): + /@sentry/nextjs@7.66.0(next@13.5.4)(react@18.2.0): resolution: {integrity: sha512-CJwl3/rIJRR1isqWjGEE8CYiNUndvRksp7l0/75tfe4JoKTk+XS3tXcXVZyyXh34GU5San1c46ctiyodaGGIeg==} engines: {node: '>=8'} peerDependencies: @@ -7975,7 +8060,7 @@ packages: '@sentry/utils': 7.66.0 '@sentry/webpack-plugin': 1.20.0 chalk: 3.0.0 - next: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 rollup: 2.78.0 stacktrace-parser: 0.1.10 @@ -8270,6 +8355,12 @@ packages: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: tslib: 2.6.0 + dev: false + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.0 /@szmarczak/http-timer@1.1.2: resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} @@ -8284,24 +8375,28 @@ packages: dependencies: defer-to-connect: 2.0.1 - /@t3-oss/env-core@0.6.0(typescript@5.1.6)(zod@3.21.4): - resolution: {integrity: sha512-3FkPAba069WRZVVab/sB1m3eSGn/rZeypx5k+sWEu1d+k0OQdRDnvFS+7MtxYgqVrwaRk3b7yVnX2dgSPVmWPQ==} + /@t3-oss/env-core@0.7.0(zod@3.21.4): + resolution: {integrity: sha512-cgunN82CqgQOOyuMOK/bGtujX5/ooXQTwGMJVWI6mCowq6WE5EgRLOqF/DRcrElI0gSFGA9i9GrxzCnk73HZLQ==} peerDependencies: typescript: '>=4.7.2' zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: - typescript: 5.1.6 zod: 3.21.4 dev: false - /@t3-oss/env-nextjs@0.6.0(typescript@5.1.6)(zod@3.21.4): - resolution: {integrity: sha512-SpzcGNIbUYcQw4zPPFeRJqCC1560zL7QmB0puIqOnuCsmykPkqHPX+n9CNZLXVQerboHzfvb7Kd+jAdouk72Vw==} + /@t3-oss/env-nextjs@0.7.0(zod@3.21.4): + resolution: {integrity: sha512-rjQIt6P3tac2eRx4BNQLNaJ+AIb2P8wXw4uFvYbEekqMGShikkUALnX3hUn1twYiGVGHXRm6UbU+LqtjIktuGg==} peerDependencies: typescript: '>=4.7.2' zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@t3-oss/env-core': 0.6.0(typescript@5.1.6)(zod@3.21.4) - typescript: 5.1.6 + '@t3-oss/env-core': 0.7.0(zod@3.21.4) zod: 3.21.4 dev: false @@ -8368,7 +8463,7 @@ packages: '@trpc/server': 10.34.0 dev: false - /@trpc/next@10.34.0(@tanstack/react-query@4.29.19)(@trpc/client@10.34.0)(@trpc/react-query@10.34.0)(@trpc/server@10.34.0)(next@13.4.3)(react-dom@18.2.0)(react@18.2.0): + /@trpc/next@10.34.0(@tanstack/react-query@4.29.19)(@trpc/client@10.34.0)(@trpc/react-query@10.34.0)(@trpc/server@10.34.0)(next@13.5.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-8jQPedVkCYCAG6PXDEumG5ILeD1aYVC6/aApk5Y96eeqnmAtX7TO9grVRfGGNaISuTtJ/oIDmRfSRqo1eOU4OA==} peerDependencies: '@tanstack/react-query': ^4.18.0 @@ -8383,7 +8478,7 @@ packages: '@trpc/client': 10.34.0(@trpc/server@10.34.0) '@trpc/react-query': 10.34.0(@tanstack/react-query@4.29.19)(@trpc/client@10.34.0)(@trpc/server@10.34.0)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': 10.34.0 - next: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-ssr-prepass: 1.5.0(react@18.2.0) @@ -8762,13 +8857,19 @@ packages: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: false + /@types/node-fetch@2.6.6: + resolution: {integrity: sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==} + dependencies: + '@types/node': 20.5.9 + form-data: 4.0.0 + dev: false + /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: false /@types/node@18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - dev: true /@types/node@20.4.2: resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==} @@ -10816,6 +10917,13 @@ packages: /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -10886,6 +10994,13 @@ packages: transitivePeerDependencies: - supports-color + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: false + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -10894,8 +11009,8 @@ packages: indent-string: 4.0.0 dev: false - /ai@2.1.32(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.0)(vue@3.3.4): - resolution: {integrity: sha512-G+mk7OfSxVR5s2cmpni89olZjXo5XbxPzzG8DAZThoJA2725hczfvO/gqLYGUToq92vzr0XgCHP6JJFK9so5fg==} + /ai@2.2.14(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.0)(vue@3.3.4): + resolution: {integrity: sha512-4kL2iYPVhH1pl6jJFIJCYcgx5mHzGOmdwiSYWVadmSkNOxKqokgevHyJKiyL9B9DjlreM9cDqkQop56Hdfkb0w==} engines: {node: '>=14.6'} peerDependencies: react: ^18.2.0 @@ -11544,6 +11659,10 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base-64@0.1.0: + resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} + dev: false + /base16@1.0.0: resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} dev: false @@ -11936,6 +12055,10 @@ packages: resolution: {integrity: sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==} dev: true + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: false + /charset@1.0.1: resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==} engines: {node: '>=4.0.0'} @@ -12568,6 +12691,10 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: false + /crypto-js@4.1.1: resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} dev: false @@ -13109,6 +13236,13 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /digest-fetch@1.3.0: + resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} + dependencies: + base-64: 0.1.0 + md5: 2.3.0 + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -14231,6 +14365,11 @@ packages: require-like: 0.1.2 dev: false + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -14643,6 +14782,10 @@ packages: webpack: 5.88.2 dev: false + /form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + dev: false + /form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} @@ -14655,6 +14798,14 @@ packages: combined-stream: 1.0.8 mime-types: 2.1.35 + /formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + dev: false + /formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} dependencies: @@ -15580,6 +15731,12 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -15890,6 +16047,10 @@ packages: call-bind: 1.0.2 has-tostringtag: 1.0.0 + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: false + /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -17356,6 +17517,14 @@ packages: hasBin: true dev: false + /md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: false + /mdast-squeeze-paragraphs@4.0.0: resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} dependencies: @@ -18046,7 +18215,7 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - /next-auth@4.22.1(next@13.4.3)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0): + /next-auth@4.22.1(next@13.5.4)(nodemailer@6.9.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NTR3f6W7/AWXKw8GSsgSyQcDW6jkslZLH8AiZa5PQ09w1kR8uHtR9rez/E9gAq/o17+p0JYHE8QjF3RoniiObA==} peerDependencies: next: ^12.2.5 || ^13 @@ -18061,7 +18230,7 @@ packages: '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.14.5 - next: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) nodemailer: 6.9.3 oauth: 0.9.15 openid-client: 5.4.3 @@ -18135,14 +18304,53 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + dev: false + + /next@13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==} + engines: {node: '>=16.14.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.5.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001525 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.22.9)(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 13.5.4 + '@next/swc-darwin-x64': 13.5.4 + '@next/swc-linux-arm64-gnu': 13.5.4 + '@next/swc-linux-arm64-musl': 13.5.4 + '@next/swc-linux-x64-gnu': 13.5.4 + '@next/swc-linux-x64-musl': 13.5.4 + '@next/swc-win32-arm64-msvc': 13.5.4 + '@next/swc-win32-ia32-msvc': 13.5.4 + '@next/swc-win32-x64-msvc': 13.5.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros - /nextjs-cors@2.1.2(next@13.4.3): + /nextjs-cors@2.1.2(next@13.5.4): resolution: {integrity: sha512-2yOVivaaf2ILe4f/qY32hnj3oC77VCOsUQJQfhVMGsXE/YMEWUY2zy78sH9FKUCM7eG42/l3pDofIzMD781XGA==} peerDependencies: next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0 dependencies: cors: 2.8.5 - next: 13.4.3(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.4(@babel/core@7.22.9)(react-dom@18.2.0)(react@18.2.0) dev: false /no-case@2.3.2: @@ -18168,6 +18376,11 @@ 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: false + /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: @@ -18444,9 +18657,20 @@ packages: is-wsl: 2.2.0 dev: false - /openai-edge@1.2.2: - resolution: {integrity: sha512-C3/Ao9Hkx5uBPv9YFBpX/x59XMPgPUU4dyGg/0J2sOJ7O9D98kD+lfdOc7v/60oYo5xzMGct80uFkYLH+X2qgw==} - engines: {node: '>=18'} + /openai@4.11.1: + resolution: {integrity: sha512-GU0HQWbejXuVAQlDjxIE8pohqnjptFDIm32aPlNT1H9ucMz1VJJD0DaTJRQsagNaJ97awWjjVLEG7zCM6sm4SA==} + hasBin: true + dependencies: + '@types/node': 18.11.18 + '@types/node-fetch': 2.6.6 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + digest-fetch: 1.3.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding dev: false /openapi-to-postmanv2@1.2.7: @@ -19324,6 +19548,7 @@ packages: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: false /postcss@8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} @@ -19351,6 +19576,14 @@ packages: source-map-js: 1.0.2 dev: false + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + /posthog-js@1.77.1: resolution: {integrity: sha512-QBwyeCvXf2JvnLBDSrp0DIwn8DnUEj6giyFtFD3xNQR7s89DUATWi9qnfu4DxUCOzLvN8eXmD94vAnXWVjw7cA==} dependencies: @@ -23181,6 +23414,11 @@ packages: transitivePeerDependencies: - encoding + /web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}