diff --git a/community/composio/.env.example b/community/composio/.env.example deleted file mode 100644 index a7b0c09..0000000 --- a/community/composio/.env.example +++ /dev/null @@ -1,9 +0,0 @@ -COMPOSIO_API_KEY= -OPENAI_API_KEY= -# Restack - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= diff --git a/community/composio/Dockerfile b/community/composio/Dockerfile deleted file mode 100644 index da467da..0000000 --- a/community/composio/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -# ------- Image ---------- - -FROM node:20-bullseye-slim AS installer - -RUN apt-get update \ - && apt-get install -y ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -COPY ./package.json ./app/package.json -COPY ./tsconfig.json ./app/tsconfig.json - - -WORKDIR /app - -RUN npm install - -# ------- Builder ---------- - -FROM node:20-bullseye-slim AS builder -WORKDIR /app -COPY --from=installer /app . -COPY ./src ./src - -RUN npm run build - -# ------- Runner ---------- - -FROM node:20-bullseye-slim AS runner - -RUN apt-get update \ - && apt-get install -y ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -RUN addgroup --system --gid 1001 service -RUN adduser --system --uid 1001 service -USER service - -WORKDIR /app - -COPY --from=builder /app . - -ENV NODE_OPTIONS=”--max-old-space-size=4096″ - -CMD ["node", "dist/services"] \ No newline at end of file diff --git a/community/composio/docker-compose.yaml b/community/composio/docker-compose.yaml deleted file mode 100644 index 9174eff..0000000 --- a/community/composio/docker-compose.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: restack-composio-example -services: - restack_engine: - image: ghcr.io/restackio/restack:main - ports: - - "5233:5233" - - "6233:6233" - - "7233:7233" - environment: - - RESTACK_ENGINE_ID - - RESTACK_ENGINE_ADDRESS - - RESTACK_ENGINE_API_KEY - composio: - image: composio - build: - context: . - dockerfile: Dockerfile - ports: - - "4000:4000" - environment: - - COMPOSIO_API_KEY - - OPENAI_API_KEY - - RESTACK_ENGINE_ID - - RESTACK_ENGINE_ADDRESS - - RESTACK_ENGINE_API_KEY - depends_on: - - restack_engine \ No newline at end of file diff --git a/community/composio/package.json b/community/composio/package.json deleted file mode 100644 index 721ac74..0000000 --- a/community/composio/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "sdk-gemini-example-ts", - "version": "1.0.0", - "description": "Basic Gemini example", - "scripts": { - "dev": "tsx watch --include src src/services.ts", - "build": "tsc --build", - "schedule-workflow": "tsx scheduleWorkflow.ts", - "clean": "rm -rf node_modules", - "restack-engine": "docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "dependencies": { - "@restackio/ai": "0.0.105", - "@temporalio/workflow": "1.11.6", - "composio-core": "0.2.9-10-1", - "dotenv": "16.4.5", - "install": "^0.13.0", - "openai": "4.73.1" - }, - "devDependencies": { - "@types/node": "20.16.9", - "dotenv-cli": "^7.4.4", - "nodemon": "2.0.22", - "ts-node": "10.9.2", - "tsx": "4.19.2", - "typescript": "5.6.3" - } -} diff --git a/community/composio/readme.md b/community/composio/readme.md deleted file mode 100644 index c602315..0000000 --- a/community/composio/readme.md +++ /dev/null @@ -1,54 +0,0 @@ -# Overview - -The Composio example showcases how you can use the Restack AI together with [Composio](https://composio.dev). A workflow has been created that will create an even on the google calendar of the provided entity. - -# Requirements - -- Node 20 or higher - -```bash -brew install nvm -nvm use 20 -``` - -- pnpm - -```bash -brew install pnpm -``` - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -```bash -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -# Start services - -Where all your code is defined, including workflow steps. - -add `COMPOSIO_API_KEY` and `OPENAI_API_KEY` in .env - -```bash -pnpm i -pnpm build -pnpm dev -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -# Schedule a workflow - -In another shell: - -```bash -pnpm schedule -``` - -Will schedule to start example workflow immediately. The code for this is on `scheduleWorkflow.ts`. In here you can see how the createCalendarEventWorkflow is scheduled to be exectuted. - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [Restack Console](https://console.restack.io) diff --git a/community/composio/scheduleWorkflow.ts b/community/composio/scheduleWorkflow.ts deleted file mode 100644 index b61db30..0000000 --- a/community/composio/scheduleWorkflow.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { client } from "./src/client"; - -export type InputSchedule = { - entityId: string; - calendarInstruction: string; -}; - -const today = new Date().toDateString(); - -async function scheduleWorkflow(input: InputSchedule) { - try { - const workflowId = `${Date.now()}-createCalendarEvent`; - const runId = await client.scheduleWorkflow({ - workflowName: "createCalendarEventWorkflow", - workflowId, - input, - }); - - const result = await client.getWorkflowResult({ workflowId, runId }); - - console.log("Workflow result:", result); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error("Error scheduling workflow:", error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - entityId: "default", - calendarInstruction: `Create a 1 hour meeting event at 5:30PM tomorrow. Today's date is ${today}`, -}); diff --git a/community/composio/src/client.ts b/community/composio/src/client.ts deleted file mode 100644 index b990acd..0000000 --- a/community/composio/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from "@restackio/ai"; - -import "dotenv/config"; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); diff --git a/community/composio/src/functions/composio/createCalendarEvent.ts b/community/composio/src/functions/composio/createCalendarEvent.ts deleted file mode 100644 index 5522805..0000000 --- a/community/composio/src/functions/composio/createCalendarEvent.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { openaiChatCompletionsBase } from "../openai"; - -import { openAiToolsetClient } from "./utils/toolsets"; - -export async function createCalendarEvent({ - entityId, - composioApiKey, - calendarInstruction, -}: { - entityId?: string; - composioApiKey?: string; - calendarInstruction: string; -}) { - const composioOpenAiClient = openAiToolsetClient({ - composioApiKey, - entityId, - }); - - const tools = await composioOpenAiClient.getTools({ - actions: ["googlecalendar_create_event"], - }); - - const { result } = await openaiChatCompletionsBase({ - userContent: calendarInstruction, - tools, - toolChoice: "auto", - }); - - return composioOpenAiClient.handleToolCall(result); -} diff --git a/community/composio/src/functions/composio/getEntity.ts b/community/composio/src/functions/composio/getEntity.ts deleted file mode 100644 index 6580999..0000000 --- a/community/composio/src/functions/composio/getEntity.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Entity } from "composio-core/lib/src/sdk/models/Entity"; - -import { composioClient } from "./utils/client"; - -export async function getEntity({ - composioApiKey, - entityId, -}: { - composioApiKey?: string; - entityId: string; -}): Promise { - const client = composioClient({ composioApiKey }); - console.log("client", client); - try { - const entity = client.getEntity(entityId); - return entity; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error getting entity: ${error}`); - } -} diff --git a/community/composio/src/functions/composio/getEntityConnections.ts b/community/composio/src/functions/composio/getEntityConnections.ts deleted file mode 100644 index 7f5ed1a..0000000 --- a/community/composio/src/functions/composio/getEntityConnections.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { openAiToolsetClient } from "./utils/toolsets"; - -export async function getEntityConnections({ - entityId, - composioApiKey, -}: { - entityId: string; - composioApiKey?: string; -}) { - const toolSetClient = openAiToolsetClient({ composioApiKey, entityId }); - const connections = await toolSetClient.client.connectedAccounts.list({}); - return connections; -} \ No newline at end of file diff --git a/community/composio/src/functions/composio/getExpectedParamsForUser.ts b/community/composio/src/functions/composio/getExpectedParamsForUser.ts deleted file mode 100644 index d08741c..0000000 --- a/community/composio/src/functions/composio/getExpectedParamsForUser.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { openAiToolsetClient } from "./utils/toolsets"; - -export async function getExpectedParamsForUser({ - composioApiKey, - app, - authScheme, - entityId, -}: { - composioApiKey?: string; - app: string; - authScheme?: - | "OAUTH2" - | "OAUTH1" - | "API_KEY" - | "BASIC" - | "BEARER_TOKEN" - | "BASIC_WITH_JWT"; - entityId?: string; -}) { - const toolset = openAiToolsetClient({ composioApiKey, entityId }); - const response = await toolset.getExpectedParamsForUser({ - app, - ...(authScheme && { authScheme }), - ...(entityId && { entityId }), - }); - - return response.expectedInputFields; -} diff --git a/community/composio/src/functions/composio/index.ts b/community/composio/src/functions/composio/index.ts deleted file mode 100644 index 612fe84..0000000 --- a/community/composio/src/functions/composio/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./getEntity"; -export * from "./initiateConnection"; -export * from "./createCalendarEvent"; -export * from "./getEntityConnections"; -export * from "./getExpectedParamsForUser"; diff --git a/community/composio/src/functions/composio/initiateConnection.ts b/community/composio/src/functions/composio/initiateConnection.ts deleted file mode 100644 index fafba5f..0000000 --- a/community/composio/src/functions/composio/initiateConnection.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; - -import { getEntity } from "./getEntity"; - -export async function initiateConnection({ - entityId, - appName, - composioApiKey, - waitUntilActive, -}: { - entityId: string; - appName: string; - composioApiKey?: string; - waitUntilActive?: number; -}) { - const entity = await getEntity({ composioApiKey, entityId }); - - const entityAppConnection = await entity.getConnection(appName); - - if (entityAppConnection) { - return { - authenticated: true, - message: `Already connected to ${appName}`, - redirectUrl: entityAppConnection.redirectUrl, - }; - } - - const connection = await entity.initiateConnection(appName); - - if (!waitUntilActive) { - return { - authenticated: false, - message: `User needs to follow redirect URL to authenticate: ${connection.redirectUrl}`, - redirectUrl: connection.redirectUrl, - }; - } - - try { - await connection.waitUntilActive(waitUntilActive); - return { - authenticated: true, - message: `Connected to ${appName}`, - redirectUrl: connection.redirectUrl, - }; - } catch (error) { - log.error("User did not authenticate in time for application", { - appName, - error, - }); - - return { - authenticated: false, - message: `User did not authenticate in time for application: ${appName}`, - redirectUrl: connection.redirectUrl, - }; - } -} diff --git a/community/composio/src/functions/composio/utils/client.ts b/community/composio/src/functions/composio/utils/client.ts deleted file mode 100644 index e51ba05..0000000 --- a/community/composio/src/functions/composio/utils/client.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Composio } from "composio-core"; - -export const composioClient = ({ - composioApiKey = process.env.COMPOSIO_API_KEY, -}: { - composioApiKey?: string; -}) => { - return new Composio(composioApiKey); -}; diff --git a/community/composio/src/functions/composio/utils/toolsets.ts b/community/composio/src/functions/composio/utils/toolsets.ts deleted file mode 100644 index daad9e5..0000000 --- a/community/composio/src/functions/composio/utils/toolsets.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { OpenAIToolSet } from "composio-core"; - -export function openAiToolsetClient({ - composioApiKey = process.env.COMPOSIO_API_KEY, - entityId, -}: { - composioApiKey?: string; - entityId?: string; -}) { - return new OpenAIToolSet({ - apiKey: composioApiKey, - entityId, - }); -} diff --git a/community/composio/src/functions/index.ts b/community/composio/src/functions/index.ts deleted file mode 100644 index 7438a5c..0000000 --- a/community/composio/src/functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./composio"; -export * from "./openai"; \ No newline at end of file diff --git a/community/composio/src/functions/openai/chat/completionsBase.ts b/community/composio/src/functions/openai/chat/completionsBase.ts deleted file mode 100644 index 0889059..0000000 --- a/community/composio/src/functions/openai/chat/completionsBase.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import OpenAI from "openai/index"; -import { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions"; -import { openaiClient } from "../utils/client"; -import { openaiCost, Price } from "../utils/cost"; -import { ChatCompletion, ChatModel } from "openai/resources/index"; - -export type UsageOutput = { tokens: number; cost: number }; - -export type OpenAIChatInput = { - userContent: string; - systemContent?: string; - model?: ChatModel; - jsonSchema?: { - name: string; - schema: Record; - }; - price?: Price; - apiKey?: string; - params?: ChatCompletionCreateParamsNonStreaming; - tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; - toolChoice?: OpenAI.Chat.Completions.ChatCompletionToolChoiceOption; -}; - -export const openaiChatCompletionsBase = async ({ - userContent, - systemContent = "", - model = "gpt-4o-mini", - jsonSchema, - price, - apiKey, - params, - tools, - toolChoice, -}: OpenAIChatInput): Promise<{ result: ChatCompletion; cost?: number }> => { - try { - const openai = openaiClient({ apiKey }); - - const isO1Model = model.startsWith("o1-"); - - const o1ModelParams = { - temperature: 1, - top_p: 1, - frequency_penalty: 0, - presence_penalty: 0, - }; - - const chatParams: ChatCompletionCreateParamsNonStreaming = { - messages: [ - ...(systemContent ? [{ role: "system" as const, content: systemContent }] : []), - { role: "user" as const, content: userContent }, - ...(params?.messages ?? []), - ], - ...(jsonSchema && { - response_format: { - type: "json_schema", - json_schema: { - name: jsonSchema.name, - strict: true, - schema: jsonSchema.schema, - }, - }, - }), - model, - ...(tools && { tools }), - ...(toolChoice && { tool_choice: toolChoice }), - ...params, - ...(isO1Model && o1ModelParams), - }; - - log.debug("OpenAI chat completion params", { - chatParams, - }); - - const completion = await openai.chat.completions.create(chatParams); - - return { - result: completion, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: completion.usage?.prompt_tokens ?? 0, - output: completion.usage?.completion_tokens ?? 0, - }, - }), - }; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error OpenAI chat: ${error}`); - } -}; \ No newline at end of file diff --git a/community/composio/src/functions/openai/chat/completionsStream.ts b/community/composio/src/functions/openai/chat/completionsStream.ts deleted file mode 100644 index bcd9097..0000000 --- a/community/composio/src/functions/openai/chat/completionsStream.ts +++ /dev/null @@ -1,193 +0,0 @@ -import OpenAI from "openai/index"; -import { ChatCompletionChunk } from "openai/resources/chat/completions"; - -import Restack from "@restackio/ai"; -import { currentWorkflow, log } from "@restackio/ai/function"; - -import { StreamEvent, ToolCallEvent } from "../types/events"; - -import { aggregateStreamChunks } from "../utils/aggregateStream"; -import { mergeToolCalls } from "../utils/mergeToolCalls"; -import { openaiClient } from "../utils/client"; -import { openaiCost, Price } from "../utils/cost"; -import { SendWorkflowEvent } from "@restackio/ai/event"; -import { ChatModel } from "openai/resources/index"; - -export async function openaiChatCompletionsStream({ - model = "gpt-4o-mini", - userName, - newMessage, - assistantName, - messages = [], - tools, - toolEvent, - streamAtCharacter, - streamEvent, - apiKey, - price, -}: { - model?: ChatModel; - userName?: string; - newMessage?: string; - assistantName?: string; - messages?: OpenAI.Chat.Completions.ChatCompletionMessageParam[]; - tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; - toolEvent?: { - workflowEventName: string; - workflow?: SendWorkflowEvent["workflow"]; - }; - streamAtCharacter?: string; - streamEvent?: { - workflowEventName: string; - workflow?: SendWorkflowEvent["workflow"]; - }; - apiKey?: string; - price?: Price; -}) { - const restack = new Restack(); - const workflow = currentWorkflow().workflowExecution; - - log.debug("workflow", { workflow }); - - if (newMessage) { - messages.push({ - role: "user", - name: userName, - content: newMessage, - }); - } - - const openai = openaiClient({ apiKey }); - const chatStream = await openai.chat.completions.create({ - model: model, - messages, - tools, - stream: true, - stream_options: { - include_usage: true, - }, - }); - - const [stream, streamEnd] = chatStream.tee(); - const readableStream = streamEnd.toReadableStream() as unknown as ReadableStream; - const aggregatedStream = await aggregateStreamChunks(readableStream); - - let finishReason: ChatCompletionChunk.Choice["finish_reason"]; - let response: ChatCompletionChunk.Choice.Delta["content"] = ""; - let tokensCountInput = 0; - let tokensCountOutput = 0; - - for await (const chunk of stream) { - let content = chunk.choices[0]?.delta?.content || ""; - finishReason = chunk.choices[0]?.finish_reason; - tokensCountInput += chunk.usage?.prompt_tokens ?? 0; - tokensCountOutput += chunk.usage?.completion_tokens ?? 0; - - if (finishReason === "tool_calls") { - const { toolCalls } = mergeToolCalls(aggregatedStream); - await Promise.all( - toolCalls.map((toolCall) => { - if (toolEvent) { - const functionArguments = JSON.parse( - toolCall.function?.arguments ?? "" - ); - - const input: ToolCallEvent = { - ...toolCall, - function: { - name: toolCall.function?.name ?? "", - input: functionArguments, - }, - assistantName, - }; - - if (toolEvent) { - const workflowEvent = { - event: { - name: toolEvent.workflowEventName, - input, - }, - workflow: { - ...workflow, - ...toolEvent.workflow, - }, - }; - log.debug("toolEvent sendWorkflowEvent", { workflowEvent }); - - restack.sendWorkflowEvent(workflowEvent); - } - } - }) - ); - return { - result: { - messages, - toolCalls, - }, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: tokensCountInput, - output: tokensCountOutput, - }, - }), - }; - } else { - response += content; - if ( - content.trim().slice(-1) === streamAtCharacter || - finishReason === "stop" - ) { - if (response.length) { - const input: StreamEvent = { - chunkId: chunk.id, - response, - assistantName, - isLast: finishReason === "stop", - }; - if (streamEvent) { - const workflowEvent = { - event: { - name: streamEvent.workflowEventName, - input, - }, - workflow: { - ...workflow, - ...streamEvent.workflow, - }, - }; - log.debug("streamEvent sendWorkflowEvent", { workflowEvent }); - restack.sendWorkflowEvent(workflowEvent); - } - } - } - - if (finishReason === "stop") { - const newMessage: OpenAI.Chat.Completions.ChatCompletionMessageParam = { - content: response, - role: "assistant", - name: assistantName, - }; - - messages.push(newMessage); - - return { - result: { - messages, - }, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: tokensCountInput, - output: tokensCountOutput, - }, - }), - }; - } - } - } -} diff --git a/community/composio/src/functions/openai/chat/index.ts b/community/composio/src/functions/openai/chat/index.ts deleted file mode 100644 index 3cb4077..0000000 --- a/community/composio/src/functions/openai/chat/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./completionsBase"; -export * from "./completionsStream"; diff --git a/community/composio/src/functions/openai/index.ts b/community/composio/src/functions/openai/index.ts deleted file mode 100644 index 6a947d6..0000000 --- a/community/composio/src/functions/openai/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./chat"; -export * from "./thread"; diff --git a/community/composio/src/functions/openai/thread/createAssistant.ts b/community/composio/src/functions/openai/thread/createAssistant.ts deleted file mode 100644 index f893399..0000000 --- a/community/composio/src/functions/openai/thread/createAssistant.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ChatModel } from "openai/resources/index"; -import { FunctionFailure } from "@restackio/ai/function"; -import { Assistant, AssistantTool } from "openai/resources/beta/index"; - -import { openaiClient } from "../utils/client"; - -export async function createAssistant({ - apiKey, - name, - instructions, - model = "gpt-4o-mini", - tools = [], -}: { - apiKey: string; - name: string; - instructions: string; - tools?: AssistantTool[]; - model: ChatModel; -}): Promise { - try { - const openai = openaiClient({ apiKey }); - - const assistant = await openai.beta.assistants.create({ - name, - instructions, - model, - tools, - }); - - return assistant; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error creating assistant: ${error}`); - } -} diff --git a/community/composio/src/functions/openai/thread/createMessageOnThread.ts b/community/composio/src/functions/openai/thread/createMessageOnThread.ts deleted file mode 100644 index 63b4a24..0000000 --- a/community/composio/src/functions/openai/thread/createMessageOnThread.ts +++ /dev/null @@ -1,28 +0,0 @@ -import OpenAI from "openai/index"; -import { FunctionFailure } from "@restackio/ai/function"; - -import { openaiClient } from "../utils/client"; - -export async function createMessageOnThread({ - apiKey, - threadId, - content, - role, -}: { - apiKey: string; - threadId: string; - content: string; - role: OpenAI.Beta.Threads.MessageCreateParams["role"]; -}) { - try { - const openai = openaiClient({ apiKey }); - await openai.beta.threads.messages.create(threadId, { - role, - content, - }); - } catch (error) { - throw FunctionFailure.nonRetryable( - `Error creating message thread: ${error}` - ); - } -} diff --git a/community/composio/src/functions/openai/thread/createThread.ts b/community/composio/src/functions/openai/thread/createThread.ts deleted file mode 100644 index 5d29652..0000000 --- a/community/composio/src/functions/openai/thread/createThread.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Thread } from "openai/resources/beta/index"; - -import { openaiClient } from "../utils/client"; - -export async function createThread({ - apiKey, -}: { - apiKey: string; -}): Promise { - try { - const openai = openaiClient({ apiKey }); - const thread = await openai.beta.threads.create(); - - return thread; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error creating thread: ${error}`); - } -} diff --git a/community/composio/src/functions/openai/thread/index.ts b/community/composio/src/functions/openai/thread/index.ts deleted file mode 100644 index 0ef24eb..0000000 --- a/community/composio/src/functions/openai/thread/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./createAssistant"; -export * from "./createMessageOnThread"; -export * from "./createThread"; -export * from "./runThread"; diff --git a/community/composio/src/functions/openai/thread/runThread.ts b/community/composio/src/functions/openai/thread/runThread.ts deleted file mode 100644 index 57d17e6..0000000 --- a/community/composio/src/functions/openai/thread/runThread.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Stream } from "openai/streaming"; -import { AssistantStreamEvent } from "openai/resources/beta/index"; -import { Run } from "openai/resources/beta/threads/runs/index"; - -import { openaiClient } from "../utils/client"; - -export async function runThread({ - apiKey, - threadId, - assistantId, - stream = false, -}: { - apiKey: string; - threadId: string; - assistantId: string; - stream: boolean; -}): Promise | Run> { - try { - const openai = openaiClient({ apiKey }); - - const run = await openai.beta.threads.runs.create(threadId, { - assistant_id: assistantId, - ...(stream && { stream }), - }); - - return run; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error running thread: ${error}`); - } -} \ No newline at end of file diff --git a/community/composio/src/functions/openai/types/events.ts b/community/composio/src/functions/openai/types/events.ts deleted file mode 100644 index 44b071b..0000000 --- a/community/composio/src/functions/openai/types/events.ts +++ /dev/null @@ -1,17 +0,0 @@ -import OpenAI from "openai/index"; - -export type StreamEvent = { - chunkId?: string; - response: string; - assistantName?: string; - isLast: boolean; -}; - -export type ToolCallEvent = - OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall & { - function: { - name: string; - input: JSON; - }; - assistantName?: string; - }; diff --git a/community/composio/src/functions/openai/types/index.ts b/community/composio/src/functions/openai/types/index.ts deleted file mode 100644 index 1784004..0000000 --- a/community/composio/src/functions/openai/types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./events"; diff --git a/community/composio/src/functions/openai/utils/aggregateStream.ts b/community/composio/src/functions/openai/utils/aggregateStream.ts deleted file mode 100644 index 18a7d74..0000000 --- a/community/composio/src/functions/openai/utils/aggregateStream.ts +++ /dev/null @@ -1,26 +0,0 @@ -export async function aggregateStreamChunks(stream: ReadableStream) { - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - if (value) chunks.push(value); - } - - const aggregated = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - aggregated.set(chunk, offset); - offset += chunk.length; - } - - const textContent = new TextDecoder().decode(aggregated); - const jsonObjects = textContent - .split("\n") - .filter((line) => line.trim()) - .map((line) => JSON.parse(line)); - return jsonObjects; -} diff --git a/community/composio/src/functions/openai/utils/client.ts b/community/composio/src/functions/openai/utils/client.ts deleted file mode 100644 index 77fd385..0000000 --- a/community/composio/src/functions/openai/utils/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import OpenAI from "openai/index"; -import "dotenv/config"; - -let openaiInstance: OpenAI | null = null; - -export const openaiClient = ({ - apiKey = process.env.OPENAI_API_KEY, -}: { - apiKey?: string; -}): OpenAI => { - if (!apiKey) { - throw new Error("API key is required to create OpenAI client."); - } - - if (!openaiInstance) { - openaiInstance = new OpenAI({ - apiKey, - }); - } - return openaiInstance; -}; diff --git a/community/composio/src/functions/openai/utils/cost.ts b/community/composio/src/functions/openai/utils/cost.ts deleted file mode 100644 index 2724ab6..0000000 --- a/community/composio/src/functions/openai/utils/cost.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type TokensCount = { - input: number; - output: number; -}; - -export type Price = { - input: number; - output: number; -}; -export const openaiCost = ({ - tokensCount, - price, -}: { - tokensCount: TokensCount; - price: Price; -}): number => { - let cost = 0; - const { input: inputTokens, output: outputTokens } = tokensCount; - const { input: inputPrice, output: outputPrice } = price; - - cost = inputTokens * inputPrice + outputTokens * outputPrice; - - return cost; -}; diff --git a/community/composio/src/functions/openai/utils/index.ts b/community/composio/src/functions/openai/utils/index.ts deleted file mode 100644 index 0707ebb..0000000 --- a/community/composio/src/functions/openai/utils/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./aggregateStream"; -export * from "./client"; -export * from "./cost"; -export * from "./mergeToolCalls"; diff --git a/community/composio/src/functions/openai/utils/mergeToolCalls.ts b/community/composio/src/functions/openai/utils/mergeToolCalls.ts deleted file mode 100644 index 600170f..0000000 --- a/community/composio/src/functions/openai/utils/mergeToolCalls.ts +++ /dev/null @@ -1,31 +0,0 @@ -import OpenAI from "openai/index"; -import { ChatCompletionChunk } from "openai/resources/chat/completions.mjs"; - -export function mergeToolCalls(aggregatedStream: ChatCompletionChunk[]) { - const toolCalls: OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall[] = - []; - - aggregatedStream.forEach((chunk) => { - chunk.choices.forEach((choice) => { - if (choice.delta.tool_calls) { - choice.delta.tool_calls.forEach((toolCall) => { - const lastToolCall = toolCalls[toolCalls.length - 1]; - if (toolCall.id) { - toolCalls.push({ - ...toolCall, - function: { ...toolCall.function, arguments: "" }, - }); - } else if ( - lastToolCall && - lastToolCall.function && - toolCall.function?.arguments - ) { - lastToolCall.function.arguments += toolCall.function.arguments; - } - }); - } - }); - }); - - return { toolCalls }; -} diff --git a/community/composio/src/services.ts b/community/composio/src/services.ts deleted file mode 100644 index 146cd53..0000000 --- a/community/composio/src/services.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { createCalendarEvent, initiateConnection, getExpectedParamsForUser, getEntityConnections, getEntity } from "./functions"; -import { client } from "./client"; - -async function services() { - const workflowsPath = require.resolve("./workflows"); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - }), - // Start the composio service - client.startService({ - taskQueue: "composio", - functions: { - createCalendarEvent, - initiateConnection, - getExpectedParamsForUser, - getEntityConnections, - getEntity, - }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/composio/src/workflows/createCalendarEvent.ts b/community/composio/src/workflows/createCalendarEvent.ts deleted file mode 100644 index 367fa52..0000000 --- a/community/composio/src/workflows/createCalendarEvent.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { step, log } from "@restackio/ai/workflow"; -import * as functions from "../functions"; - -export async function createCalendarEventWorkflow({ - entityId, - calendarInstruction, -}: { - entityId: string; - calendarInstruction: string; -}) { - const connection = await step({ - taskQueue: "composio", - }).initiateConnection({ - entityId, - appName: 'googlecalendar', - }); - - if (!connection.authenticated) { - log.info( - `Follow the link to authenticate with google calendar ${connection.redirectUrl}` - ); - return connection; - } - - const calendarEvent = await step({ - taskQueue: "composio", - }).createCalendarEvent({ - entityId, - calendarInstruction, - }); - - return calendarEvent; -} diff --git a/community/composio/src/workflows/index.ts b/community/composio/src/workflows/index.ts deleted file mode 100644 index 9d35a4e..0000000 --- a/community/composio/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./createCalendarEvent"; diff --git a/community/composio/tsconfig.json b/community/composio/tsconfig.json deleted file mode 100644 index f4d02b9..0000000 --- a/community/composio/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/community/discord/package.json b/community/discord/package.json deleted file mode 100644 index d0b951e..0000000 --- a/community/discord/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "discord-example-ts", - "version": "1.0.0", - "description": "Basic Discord human loop example", - "main": "index.js", - "scripts": { - "start": "ts-node src/services.ts", - "start.watch": "nodemon src/services.ts", - "dev": "pnpm start.watch", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "service": "ts-node src/services.ts", - "schedule": "ts-node scheduleWorkflow.ts" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "dependencies": { - "@restackio/ai": "^0.0.82", - "@temporalio/workflow": "^1.11.6" - }, - "devDependencies": { - "@types/node": "^20.17.6", - "nodemon": "^2.0.22", - "ts-node": "^10.9.2" - } -} diff --git a/community/discord/readme.md b/community/discord/readme.md deleted file mode 100644 index 51abea4..0000000 --- a/community/discord/readme.md +++ /dev/null @@ -1,52 +0,0 @@ -# Restack AI - Discord Human in the loop example - -This example will illustrate how you can utilize the Discord API and the Discord bot to get new messages from a channel and reply accordingly - -The idea is the loop workflow will do the following: - -1. Read new messages with the bot tagged after the last messages the bot sent. -2. Reverse a message and reply with the backwards message on the channel. -3. If a 'STOP' message is detected with the bot tagged, the loop will end. - -# Requirements - -- Node 20 or higher - -brew install nvm -nvm use 20 - -- npm - -brew install npm - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -``` -docker run -d --pull always --name studio -p 5233:5233 -p 6233:6233 -p 7233:7233 ghcr.io/restackio/restack:main -``` - -# Start services - -Go to this directory and run - -```bash -DISCORD_BOT_TOKEN= npm run service -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -# Schedule a workflow - -In another shell run following command: - -```bash -DISCORD_BOT_TOKEN= DISCORD_BOT_ID= DISCORD_CHANNEL_ID= npm run schedule -``` - -Will schedule to start example workflow immediately. This runs the `scheduleWorkflow` file. - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [Restack Console](https://console.restack.io) diff --git a/community/discord/scheduleWorkflow.ts b/community/discord/scheduleWorkflow.ts deleted file mode 100644 index 69fb1c2..0000000 --- a/community/discord/scheduleWorkflow.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { client } from "./src/client"; -import { endConnectionEvent, messageCreatedEvent } from "./src/events"; -import { DiscordGatewayClient } from "./src/utils/client"; - -interface Input { - channelId: string, - botId: string -} - -interface Author { - id: string -} - -interface Message { - content: string, - id: string - author: Author -} - -async function scheduleWorkflow(input: Input) { - try { - console.log(WebSocket); - const workflowId = `${Date.now()}-HumanLoopWorkflow`; - const runId = await client.scheduleWorkflow({ - workflowName: "humanLoopDiscordWorkflow", - workflowId, - input - }); - - let endGateWayConnection = false; - function handleMessageEvent(message: Message) { - const botId = process.env.DISCORD_BOT_ID ?? ""; - const botTag = `<@${botId}>`; - if (message.content.replace(botTag, '').trim() === 'STOP') { - endGateWayConnection = true; - client.sendWorkflowEvent({ - workflow: { - workflowId, - runId - }, - event: { - name: endConnectionEvent.name, - input: { end: true } - }, - }); - } else if (message.content.length > 0 - && message.author.id != botId) { - client.sendWorkflowEvent({ - workflow: { - workflowId, - runId, - }, - event: { - name: messageCreatedEvent.name, - input: { - content: message.content, - id: message.id - } - }, - }); - } - } - const discordGatewayClient = new DiscordGatewayClient(handleMessageEvent); - await new Promise(f => setTimeout(f, 1000)); - discordGatewayClient.identify(3585, process.env.DISCORD_BOT_TOKEN ?? ""); - while (!endGateWayConnection) { - await new Promise(f => setTimeout(f, 1000)); - discordGatewayClient.sendHeartbeat(); - } - process.exit(0); // Exit the process successfully - } catch (error) { - console.error("Error scheduling workflow:", error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - channelId: process.env.DISCORD_CHANNEL_ID ?? "", - botId: process.env.DISCORD_BOT_ID ?? "" -}); diff --git a/community/discord/src/client.ts b/community/discord/src/client.ts deleted file mode 100644 index 2808392..0000000 --- a/community/discord/src/client.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Restack from "@restackio/ai"; - -export const client = new Restack(); diff --git a/community/discord/src/events/endConnection.ts b/community/discord/src/events/endConnection.ts deleted file mode 100644 index c23617f..0000000 --- a/community/discord/src/events/endConnection.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineEvent } from "@restackio/ai/event"; - -export type EndConnectionEvent = { - end: boolean; -}; - -export const endConnectionEvent = defineEvent("endConnection"); \ No newline at end of file diff --git a/community/discord/src/events/index.ts b/community/discord/src/events/index.ts deleted file mode 100644 index 0dde158..0000000 --- a/community/discord/src/events/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./endConnection"; -export * from "./messageCreated"; \ No newline at end of file diff --git a/community/discord/src/events/messageCreated.ts b/community/discord/src/events/messageCreated.ts deleted file mode 100644 index 0bcc411..0000000 --- a/community/discord/src/events/messageCreated.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineEvent } from "@restackio/ai/event"; - -export type MessageCreatedEvent = { - content: string; - id: string; -}; - -export const messageCreatedEvent = defineEvent("messageCreated"); \ No newline at end of file diff --git a/community/discord/src/functions/getMessages.ts b/community/discord/src/functions/getMessages.ts deleted file mode 100644 index 40f29a1..0000000 --- a/community/discord/src/functions/getMessages.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { log } from "@restackio/ai/function"; -import { DiscordClient } from "../utils/client"; - -export async function getMessagesAfterId({ - afterMessageId, - channelId, - botToken -}: { - afterMessageId: string, - channelId: string, - botToken?: string -}){ - try { - const client = new DiscordClient(botToken); - return client.getMessagesAfterId(afterMessageId, channelId); - } catch (error) { - log.error("Discord integration error", { error }); - throw new Error(`Discord integration error ${error}`); - } -} \ No newline at end of file diff --git a/community/discord/src/functions/index.ts b/community/discord/src/functions/index.ts deleted file mode 100644 index acf9371..0000000 --- a/community/discord/src/functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./postMessage"; -export * from "./getMessages"; diff --git a/community/discord/src/functions/postMessage.ts b/community/discord/src/functions/postMessage.ts deleted file mode 100644 index 01b4819..0000000 --- a/community/discord/src/functions/postMessage.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { log } from "@restackio/ai/function"; -import { DiscordClient } from "../utils/client"; - -export async function postMessageToChannel({ - messageText, - channelId, - botToken -}: { - messageText: string, - channelId: string, - botToken?: string -}){ - try { - const client = new DiscordClient(botToken); - return client.postMessage(messageText, channelId); - } catch (error) { - log.error("Discord integration error", { error }); - throw new Error(`Discord integration error ${error}`); - } -} - -export async function postReplyToMessage({ - messageText, - channelId, - messageId, - botToken -}: { - messageText: string, - channelId: string, - messageId: string - botToken?: string -}){ - try { - const client = new DiscordClient(botToken); - return client.postMessageToReply(messageText, channelId, messageId); - } catch (error) { - log.error("Discord integration error", { error }); - throw new Error(`Discord integration error ${error}`); - } -} \ No newline at end of file diff --git a/community/discord/src/services.ts b/community/discord/src/services.ts deleted file mode 100644 index 61f8121..0000000 --- a/community/discord/src/services.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { getMessagesAfterId, postMessageToChannel, postReplyToMessage } from "./functions"; -import { client } from "./client"; - -async function services() { - const workflowsPath = require.resolve("./workflows"); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { postMessageToChannel, getMessagesAfterId, postReplyToMessage }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/discord/src/utils/client.ts b/community/discord/src/utils/client.ts deleted file mode 100644 index c30d398..0000000 --- a/community/discord/src/utils/client.ts +++ /dev/null @@ -1,120 +0,0 @@ -const DISCORD_API_VERSION = '10'; -const DISCORD_BASE_URL = `https://discord.com/api/v${DISCORD_API_VERSION}`; -const DISCORD_GATEWAY_URL = 'wss://gateway.discord.gg'; - -export class DiscordClient { - private botToken: string; - constructor( - botToken: string = process.env.DISCORD_BOT_TOKEN ?? "" - ){ - this.botToken = botToken; - } - - public postMessage(message: string, channelId: string) { - const messagesUrl = `/channels/${channelId}/messages`; - const url = DISCORD_BASE_URL + messagesUrl; - const body = { - 'content': message - } - const headers = { - 'Content-Type': 'application/json', - 'Authorization': `Bot ${this.botToken}` - } - const options = { - 'method': 'POST', - 'body': JSON.stringify(body), - 'headers': headers - } - return fetch(url, options) - .then(response => response.json()); - } - - public postMessageToReply(message: string, - channelId: string, messageId: string) { - const messagesUrl = `/channels/${channelId}/messages`; - const url = DISCORD_BASE_URL + messagesUrl; - const body = { - 'content': message, - 'message_reference': { - 'message_id': messageId - } - } - const headers = { - 'Content-Type': 'application/json', - 'Authorization': `Bot ${this.botToken}` - } - const options = { - 'method': 'POST', - 'body': JSON.stringify(body), - 'headers': headers - } - return fetch(url, options) - .then(response => response.json()); - } - - public getMessagesAfterId(afterMessageId: string, channelId: string) { - const messagesUrl = `/channels/${channelId}/messages`; - const queryParams = new URLSearchParams({ - 'after': afterMessageId - }) - const url = DISCORD_BASE_URL + messagesUrl - + '?' + queryParams.toString(); - const headers = { - 'Content-Type': 'application/json', - 'Authorization': `Bot ${this.botToken}` - } - const options = { - 'method': 'GET', - 'headers': headers - } - return fetch(url, options) - .then(response => response.json()); - } -} - -export class DiscordGatewayClient { - private webSocket: WebSocket; - private messageCreationHandler: Function; - private seq: Number; - - constructor( - messageCreationHandler: Function - ){ - this.webSocket = new WebSocket(DISCORD_GATEWAY_URL); - this.webSocket.addEventListener("message", (event: MessageEvent) => { - const eventDataJson = JSON.parse(event.data); - this.seq = eventDataJson.s; - const eventType = eventDataJson.t - if (eventType === 'MESSAGE_CREATE') { - console.log(eventDataJson.d) - this.messageCreationHandler(eventDataJson.d); - } - }); - this.messageCreationHandler = messageCreationHandler; - this.seq = 0; - } - - public sendHeartbeat() { - const heartbeat = { - "op": 1, - "d": this.seq - } - this.webSocket.send(JSON.stringify(heartbeat)); - } - - public identify(intentNum: number, botToken: string) { - const body = { - "op": 2, - "d": { - "intents": intentNum, - "token": botToken, - "properties": { - "os": "macos", - "device": "macbook", - "browser": "chrome" - } - } - } - this.webSocket.send(JSON.stringify(body)); - } -} \ No newline at end of file diff --git a/community/discord/src/workflows/humanLoopDiscord.ts b/community/discord/src/workflows/humanLoopDiscord.ts deleted file mode 100644 index e3c2a7b..0000000 --- a/community/discord/src/workflows/humanLoopDiscord.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { step, condition } from "@restackio/ai/workflow"; -import { onEvent } from "@restackio/ai/event"; -import * as functions from "../functions"; -import { endConnectionEvent, MessageCreatedEvent, messageCreatedEvent, EndConnectionEvent } from "../events"; - -interface Input { - channelId: string, - botId: string, - messageHandler: Function -} - -export async function humanLoopDiscordWorkflow(input: Input) { - let endWorkflow = false; - const botTag = `<@${input.botId}>`; - - onEvent(endConnectionEvent, async (event: EndConnectionEvent) => { - endWorkflow = event.end; - return event.end; - }); - - onEvent(messageCreatedEvent, async (event: MessageCreatedEvent) => { - return await step({}).postReplyToMessage({ - messageText: event.content.replace(botTag, '').split('').reverse().join(''), - channelId: input.channelId, - messageId: event.id - }); - }); - - await step({}).postMessageToChannel({ - messageText: `Message this channel and tag ${botTag} for backwards messages. Message "${botTag} STOP" to end the loop`, - channelId: input.channelId, - }); - - await condition(() => endWorkflow) - - return await step({}).postMessageToChannel({ - messageText: `Goodbye!`, - channelId: input.channelId, - }); -} diff --git a/community/discord/src/workflows/index.ts b/community/discord/src/workflows/index.ts deleted file mode 100644 index 1281dc5..0000000 --- a/community/discord/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./humanLoopDiscord"; diff --git a/community/discord/tsconfig.json b/community/discord/tsconfig.json deleted file mode 100644 index f4d02b9..0000000 --- a/community/discord/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/community/google-gemini/.env.example b/community/google-gemini/.env.example deleted file mode 100644 index cb823f5..0000000 --- a/community/google-gemini/.env.example +++ /dev/null @@ -1,9 +0,0 @@ -GEMINI_API_KEY= - -# Restack - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= diff --git a/community/google-gemini/package.json b/community/google-gemini/package.json deleted file mode 100644 index e2cfb04..0000000 --- a/community/google-gemini/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "restack-examples-ts-google-gemini", - "version": "1.0.0", - "description": "Basic Gemini example", - "scripts": { - "start": "ts-node src/services.ts", - "start.watch": "nodemon src/services.ts", - "dev": "pnpm start.watch", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "schedule": "ts-node ./scheduleWorkflow.ts" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "dependencies": { - "@google/generative-ai": "^0.21.0", - "@restackio/ai": "^0.0.85", - "@temporalio/workflow": "^1.11.6", - "dotenv": "^16.4.5" - }, - "devDependencies": { - "@types/node": "^20.16.9", - "nodemon": "^2.0.22", - "ts-node": "^10.9.2", - "typescript": "^5.6.3" - } -} diff --git a/community/google-gemini/readme.md b/community/google-gemini/readme.md deleted file mode 100644 index bd1e8b2..0000000 --- a/community/google-gemini/readme.md +++ /dev/null @@ -1,54 +0,0 @@ -# Overview - -The gemini example showcases how you can call gemini restack ai integration from your workflows. In this example the AI will reply with a greeting message to the name provided, e.g "John" - -# Requirements - -- Node 20 or higher - -```bash -brew install nvm -nvm use 20 -``` - -- pnpm - -```bash -brew install pnpm -``` - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -```bash -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -# Start services - -Where all your code is defined, including workflow steps. - -add GEMINI_API_KEY in .env - -```bash -pnpm i -pnpm build -pnpm dev -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -# Schedule a workflow - -In another shell: - -```bash -pnpm schedule -``` - -Will schedule to start example workflow immediately. The code for this is on `scheduleWorkflow.ts`. In here you can see how the helloWorkflow is scheduled to be exectuted. - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [Restack Console](https://console.restack.io) diff --git a/community/google-gemini/scheduleWorkflow.ts b/community/google-gemini/scheduleWorkflow.ts deleted file mode 100644 index 4d78696..0000000 --- a/community/google-gemini/scheduleWorkflow.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { client } from "./src/client"; - -export type InputSchedule = { - name: string; -}; - -async function scheduleWorkflow(input: InputSchedule) { - try { - const workflowId = `${Date.now()}-helloWorkflow`; - const runId = await client.scheduleWorkflow({ - workflowName: "helloWorkflow", - workflowId, - input, - }); - - const result = await client.getWorkflowResult({ workflowId, runId }); - - console.log("Workflow result:", result); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error("Error scheduling workflow:", error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - name: "John", -}); diff --git a/community/google-gemini/src/client.ts b/community/google-gemini/src/client.ts deleted file mode 100644 index b990acd..0000000 --- a/community/google-gemini/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from "@restackio/ai"; - -import "dotenv/config"; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); diff --git a/community/google-gemini/src/functions/goodbye.ts b/community/google-gemini/src/functions/goodbye.ts deleted file mode 100644 index acf1d86..0000000 --- a/community/google-gemini/src/functions/goodbye.ts +++ /dev/null @@ -1,11 +0,0 @@ -interface Input { - name: string; -} - -interface Output { - message: string; -} - -export async function goodbye(input: Input): Promise { - return { message: `Goodbye, ${input.name}!` }; -} diff --git a/community/google-gemini/src/functions/google-gemini/index.ts b/community/google-gemini/src/functions/google-gemini/index.ts deleted file mode 100644 index e20cd3f..0000000 --- a/community/google-gemini/src/functions/google-gemini/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./text"; diff --git a/community/google-gemini/src/functions/google-gemini/text/generateContent.ts b/community/google-gemini/src/functions/google-gemini/text/generateContent.ts deleted file mode 100644 index b726493..0000000 --- a/community/google-gemini/src/functions/google-gemini/text/generateContent.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import { geminiClient } from "../utils/client"; -import { GeminiChatInput } from "../types"; - -export const geminiGenerateContent = async ({ - userContent, - systemContent = "", - model = "gemini-pro", - apiKey, - params, -}: GeminiChatInput): Promise<{ result: any }> => { - try { - const gemini = geminiClient({ apiKey }); - const model_ = gemini.getGenerativeModel({ model }); - - const chatParams = { - temperature: params?.temperature ?? 0.9, - topP: params?.topP ?? 1, - topK: params?.topK ?? 1, - candidateCount: params?.candidateCount ?? 1, - ...(params?.maxOutputTokens && { - maxOutputTokens: params.maxOutputTokens, - }), - ...(params?.stopSequences && { stopSequences: params.stopSequences }), - }; - - log.debug("Gemini chat completion params", { - chatParams, - }); - - const prompt = systemContent - ? `${systemContent}\n${userContent}` - : userContent; - - const result = await model_.generateContent(prompt); - const response = await result.response; - const text = response.text(); - - return { - result: { - choices: [ - { - message: { - role: "assistant", - content: text, - }, - }, - ], - }, - }; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error Gemini chat: ${error}`); - } -}; diff --git a/community/google-gemini/src/functions/google-gemini/text/generateContentStream.ts b/community/google-gemini/src/functions/google-gemini/text/generateContentStream.ts deleted file mode 100644 index 9680066..0000000 --- a/community/google-gemini/src/functions/google-gemini/text/generateContentStream.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import { geminiClient } from "../utils/client"; -import { GeminiChatInput } from "../types"; - -export const geminiGenerateContentStream = async ({ - userContent, - systemContent = "", - model = "gemini-pro", - apiKey, - params, -}: GeminiChatInput): Promise => { - try { - const gemini = geminiClient({ apiKey }); - const model_ = gemini.getGenerativeModel({ model }); - - const chatParams = { - temperature: params?.temperature ?? 0.9, - topP: params?.topP ?? 1, - topK: params?.topK ?? 1, - candidateCount: params?.candidateCount ?? 1, - maxOutputTokens: params?.maxOutputTokens, - stopSequences: params?.stopSequences, - }; - - log.debug("Gemini chat completion params", { - chatParams, - }); - - const prompt = systemContent ? `${systemContent}\n${userContent}` : userContent; - - const result = await model_.generateContentStream(prompt); - - return new ReadableStream({ - async start(controller) { - try { - for await (const chunk of result.stream) { - const text = chunk.text(); - controller.enqueue({ - choices: [{ - delta: { - role: "assistant", - content: text - } - }] - }); - } - controller.close(); - } catch (error) { - controller.error(error); - } - } - }); - - } catch (error) { - throw FunctionFailure.nonRetryable(`Error Gemini chat stream: ${error}`); - } -}; diff --git a/community/google-gemini/src/functions/google-gemini/text/index.ts b/community/google-gemini/src/functions/google-gemini/text/index.ts deleted file mode 100644 index 4650eea..0000000 --- a/community/google-gemini/src/functions/google-gemini/text/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./generateContent"; -export * from "./generateContentStream"; diff --git a/community/google-gemini/src/functions/google-gemini/types/index.ts b/community/google-gemini/src/functions/google-gemini/types/index.ts deleted file mode 100644 index aff984d..0000000 --- a/community/google-gemini/src/functions/google-gemini/types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./inputs" \ No newline at end of file diff --git a/community/google-gemini/src/functions/google-gemini/types/inputs.ts b/community/google-gemini/src/functions/google-gemini/types/inputs.ts deleted file mode 100644 index 9573258..0000000 --- a/community/google-gemini/src/functions/google-gemini/types/inputs.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type GeminiChatInput = { - userContent: string; - systemContent?: string; - model?: string; - apiKey?: string; - params?: { - temperature?: number; - topP?: number; - topK?: number; - candidateCount?: number; - maxOutputTokens?: number; - stopSequences?: string[]; - }; - }; diff --git a/community/google-gemini/src/functions/google-gemini/utils/client.ts b/community/google-gemini/src/functions/google-gemini/utils/client.ts deleted file mode 100644 index 67cedbd..0000000 --- a/community/google-gemini/src/functions/google-gemini/utils/client.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { GoogleGenerativeAI } from "@google/generative-ai"; - -let geminiInstance: GoogleGenerativeAI | null = null; - -export const geminiClient = ({ - apiKey = process.env.GEMINI_API_KEY, -}: { - apiKey?: string; -}): GoogleGenerativeAI => { - if (!apiKey) { - throw new Error("API key is required to create Google Gemini client."); - } - - if (!geminiInstance) { - geminiInstance = new GoogleGenerativeAI(apiKey); - } - return geminiInstance; -}; diff --git a/community/google-gemini/src/functions/google-gemini/utils/index.ts b/community/google-gemini/src/functions/google-gemini/utils/index.ts deleted file mode 100644 index 5ec7692..0000000 --- a/community/google-gemini/src/functions/google-gemini/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./client"; diff --git a/community/google-gemini/src/functions/index.ts b/community/google-gemini/src/functions/index.ts deleted file mode 100644 index 0ff1e1e..0000000 --- a/community/google-gemini/src/functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./google-gemini"; -export * from "./goodbye"; diff --git a/community/google-gemini/src/services.ts b/community/google-gemini/src/services.ts deleted file mode 100644 index fa9209e..0000000 --- a/community/google-gemini/src/services.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { goodbye, geminiGenerateContent, geminiGenerateContentStream } from "./functions"; - -import { client } from "./client"; - -async function services() { - const workflowsPath = require.resolve("./workflows"); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { goodbye }, - }), - // Start the gemini service - client.startService({ - taskQueue: "gemini", - functions: { geminiGenerateContent, geminiGenerateContentStream }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/google-gemini/src/workflows/hello.ts b/community/google-gemini/src/workflows/hello.ts deleted file mode 100644 index 4866715..0000000 --- a/community/google-gemini/src/workflows/hello.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { log, step } from "@restackio/ai/workflow"; -import * as functions from "../functions"; - -interface Input { - name: string; -} - -export async function helloWorkflow({ name }: Input) { - const userContent = `Greet this person: ${name}. In 4 words or less.`; - - // Step 1 create greeting message with google gemini - - const geminiOutput = await step({ - taskQueue: "gemini", - }).geminiGenerateContent({ - userContent, - }); - - const greetMessage = geminiOutput.result.choices[0].message.content ?? ""; - - log.info("greeted", { greetMessage }); - - // Step 2 create goodbye message with simple function - - const { message: goodbyeMessage } = await step({}).goodbye({ - name, - }); - - log.info("goodbye", { goodbyeMessage }); - - return { - messages: [greetMessage, goodbyeMessage], - }; -} diff --git a/community/google-gemini/src/workflows/index.ts b/community/google-gemini/src/workflows/index.ts deleted file mode 100644 index a132395..0000000 --- a/community/google-gemini/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./hello"; diff --git a/community/google-gemini/tsconfig.json b/community/google-gemini/tsconfig.json deleted file mode 100644 index f4d02b9..0000000 --- a/community/google-gemini/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/community/gotohuman/.env.example b/community/gotohuman/.env.example deleted file mode 100644 index ccfd1b4..0000000 --- a/community/gotohuman/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -OPENAI_API_KEY= -GOTOHUMAN_API_KEY= -GOTOHUMAN_FORM_ID= \ No newline at end of file diff --git a/community/gotohuman/handleHumanResponse.ts b/community/gotohuman/handleHumanResponse.ts deleted file mode 100644 index a8565ee..0000000 --- a/community/gotohuman/handleHumanResponse.ts +++ /dev/null @@ -1,38 +0,0 @@ -import express, { Request, Response } from 'express'; -import { client } from "./src/client"; -import { HumanResponseEvent } from './src/events'; - -const app = express(); -app.use(express.json()); -const port = process.env.PORT || 4000; - -app.post('/', async (req: Request, res: Response) => { - console.log(`Received webhook from gotoHuman`, req.body) - - try { - // Our gotoHuman review form also contains a buttonSelect with the ID 'publishDecision', value: publish|discard - const workflowResponse = await client.sendWorkflowEvent({ - event: { - name: HumanResponseEvent.name, - input: { - linkedInPost: req.body?.responseValues?.linkedInPost?.value || "", - publishDecision: req.body?.responseValues?.publishDecision?.value || "" - }, - }, - workflow: { - workflowId: req.body?.meta?.restackWorkflowId, - runId: req.body?.meta?.restackRunId, - }, - }); - console.log(`Sent event to workflow. Returned ${workflowResponse}`) - - res.status(200).json({msg: 'Processed human feedback ' + workflowResponse}) - } catch(e) { - console.error("Sending event to workflow failed!", e) - res.status(500).json({error: `Could not process webhook!`}) - } -}); - -app.listen(port, () => { - console.log(`Server running at http://localhost:${port}`); -}); \ No newline at end of file diff --git a/community/gotohuman/package.json b/community/gotohuman/package.json deleted file mode 100644 index 79bff97..0000000 --- a/community/gotohuman/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "gotohuman-example", - "version": "1.0.0", - "description": "gotoHuman | Restack example. Easily keep a human in the loop.", - "main": "index.js", - "scripts": { - "start": "ts-node src/services.ts", - "start.watch": "nodemon src/services.ts", - "dev": "pnpm start.watch", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "schedule": "ts-node ./scheduleWorkflow.ts", - "endpoint": "ts-node ./handleHumanResponse.ts" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "dependencies": { - "@restackio/ai": "^0.0.85", - "@temporalio/workflow": "^1.11.6", - "dotenv": "^16.4.5", - "express": "^4.21.1", - "gotohuman": "~0.2.4", - "openai": "^4.71.1", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.3" - }, - "devDependencies": { - "@types/express": "^5.0.0", - "@types/node": "^20.16.10", - "nodemon": "^2.0.22", - "ts-node": "^10.9.2" - } -} diff --git a/community/gotohuman/readme.md b/community/gotohuman/readme.md deleted file mode 100644 index ddebe92..0000000 --- a/community/gotohuman/readme.md +++ /dev/null @@ -1,89 +0,0 @@ -# gotoHuman | Restack - Human in the loop - -[gotoHuman](https://www.gotohuman.com?utm_source=github&utm_medium=restack_repo_example&utm_campaign=readme) is a human-in-the-loop solution for autonomous AI agents, making it very easy to review AI-generated content, approve actions and tool calls, or simply provide input. - -It's a great fit for Restack since both are built for autonomous AI agents, long-running workflows and asynchronous events. -With gotoHuman you can request a human review with a single call. You pass along your AI-generated content and any context relevant for human decision-making. You and your team can then review and edit content and provide input or decisions in gotoHuman. And Restack allows to gracefully handle the webhook response from this review that might only be coming in after some hours, days or even weeks. - -## Example -This example workflow takes a topic and turns it into an AI-generated LinkedIn post. This draft is then sent to gotoHuman for review and editing. When the review gets submitted the workflow continues to publish the actual post. -There are two parts: - -1. The Restack workflow with these steps: -- Draft a LinkedIn pots with OpenAI for given topic -- Request human review via gotoHuman -- Wait for review response to publish post -2. An ExpressJS endpoint -- Listens for the webhook from gotoHuman that's triggered for each submitted review -- Sends a Restack event to our long-running workflow - -## Set up human review - -gotoHuman offers review forms that can be tailored to every use case. -Go ahead and create a new form at [app.gotohuman.com](https://app.gotohuman.com?utm_source=github&utm_medium=restack_repo_example&utm_campaign=readme). -We'll enter the webhook in a step below. - -For our example add these components to your form: -- a dynamic *header* with ID `topic` -- a dynamic *text* with ID `linkedInPost` -- a *buttonSelect* with ID `publishDecision` and two fixed choices with IDs `publish` and `discard` - -Don't forget to save your form. -At the bottom of our form builder you can see an example SDK request to send (as we do in `requestReview.ts`). -Here you also find your **API key** and the **form ID**. - -## Environment variables -Set up -```js -OPENAI_API_KEY= -GOTOHUMAN_API_KEY= -GOTOHUMAN_FORM_ID= -``` - -## Start Restack engine - -Requires Node 20 or higher - -```bash -pnpm i -pnpm dev -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -## Start the webhook API endpoint - -In another shell run: - -```bash -pnpm endpoint -``` - -This is set up to run on port 4000 per default. -When running locally you need ngrok to make the API accessible to gotoHuman: - -```bash -ngrok http http://localhost:4000 -``` - -Copy the public URL to your form's **webhook** field. - -## Start the workflow - -In another shell run: - -```bash -pnpm schedule -``` - -Will schedule to start example workflow immediately. This runs the `scheduleWorkflow` file. -We are using a hard-coded topic here, but you could also trigger a workflow run with a dynamic value from e.g. another API endpoint. - -## Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -``` -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - diff --git a/community/gotohuman/scheduleWorkflow.ts b/community/gotohuman/scheduleWorkflow.ts deleted file mode 100644 index 97c9c2f..0000000 --- a/community/gotohuman/scheduleWorkflow.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { client } from "./src/client"; - -interface TopicInput { - topic: string; -} - -async function scheduleWorkflow(input: TopicInput) { - try { - const workflowId = `${Date.now()}-writePostWorkflow`; - await client.scheduleWorkflow({ - workflowName: "writePostWorkflow", - workflowId, - input - }); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error("Error scheduling workflow:", error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - topic: "On-the-job upskilling", -}); diff --git a/community/gotohuman/src/client.ts b/community/gotohuman/src/client.ts deleted file mode 100644 index b530bee..0000000 --- a/community/gotohuman/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from "@restackio/ai"; - -import "dotenv/config"; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); \ No newline at end of file diff --git a/community/gotohuman/src/events/humanResponseEvent.ts b/community/gotohuman/src/events/humanResponseEvent.ts deleted file mode 100644 index 477f9cb..0000000 --- a/community/gotohuman/src/events/humanResponseEvent.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineEvent } from "@restackio/ai/event"; - -export type HumanResponseInput = { - linkedInPost: string; - publishDecision: string; -}; - -export const HumanResponseEvent = defineEvent("humanResponseEvent"); diff --git a/community/gotohuman/src/events/index.ts b/community/gotohuman/src/events/index.ts deleted file mode 100644 index c9c02f0..0000000 --- a/community/gotohuman/src/events/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./humanResponseEvent"; diff --git a/community/gotohuman/src/functions/index.ts b/community/gotohuman/src/functions/index.ts deleted file mode 100644 index 649f830..0000000 --- a/community/gotohuman/src/functions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./requestReview"; -export * from "./publishPost"; -export * from "./openai"; diff --git a/community/gotohuman/src/functions/openai/chat/completionsBase.ts b/community/gotohuman/src/functions/openai/chat/completionsBase.ts deleted file mode 100644 index 0889059..0000000 --- a/community/gotohuman/src/functions/openai/chat/completionsBase.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import OpenAI from "openai/index"; -import { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions"; -import { openaiClient } from "../utils/client"; -import { openaiCost, Price } from "../utils/cost"; -import { ChatCompletion, ChatModel } from "openai/resources/index"; - -export type UsageOutput = { tokens: number; cost: number }; - -export type OpenAIChatInput = { - userContent: string; - systemContent?: string; - model?: ChatModel; - jsonSchema?: { - name: string; - schema: Record; - }; - price?: Price; - apiKey?: string; - params?: ChatCompletionCreateParamsNonStreaming; - tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; - toolChoice?: OpenAI.Chat.Completions.ChatCompletionToolChoiceOption; -}; - -export const openaiChatCompletionsBase = async ({ - userContent, - systemContent = "", - model = "gpt-4o-mini", - jsonSchema, - price, - apiKey, - params, - tools, - toolChoice, -}: OpenAIChatInput): Promise<{ result: ChatCompletion; cost?: number }> => { - try { - const openai = openaiClient({ apiKey }); - - const isO1Model = model.startsWith("o1-"); - - const o1ModelParams = { - temperature: 1, - top_p: 1, - frequency_penalty: 0, - presence_penalty: 0, - }; - - const chatParams: ChatCompletionCreateParamsNonStreaming = { - messages: [ - ...(systemContent ? [{ role: "system" as const, content: systemContent }] : []), - { role: "user" as const, content: userContent }, - ...(params?.messages ?? []), - ], - ...(jsonSchema && { - response_format: { - type: "json_schema", - json_schema: { - name: jsonSchema.name, - strict: true, - schema: jsonSchema.schema, - }, - }, - }), - model, - ...(tools && { tools }), - ...(toolChoice && { tool_choice: toolChoice }), - ...params, - ...(isO1Model && o1ModelParams), - }; - - log.debug("OpenAI chat completion params", { - chatParams, - }); - - const completion = await openai.chat.completions.create(chatParams); - - return { - result: completion, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: completion.usage?.prompt_tokens ?? 0, - output: completion.usage?.completion_tokens ?? 0, - }, - }), - }; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error OpenAI chat: ${error}`); - } -}; \ No newline at end of file diff --git a/community/gotohuman/src/functions/openai/chat/completionsStream.ts b/community/gotohuman/src/functions/openai/chat/completionsStream.ts deleted file mode 100644 index bcd9097..0000000 --- a/community/gotohuman/src/functions/openai/chat/completionsStream.ts +++ /dev/null @@ -1,193 +0,0 @@ -import OpenAI from "openai/index"; -import { ChatCompletionChunk } from "openai/resources/chat/completions"; - -import Restack from "@restackio/ai"; -import { currentWorkflow, log } from "@restackio/ai/function"; - -import { StreamEvent, ToolCallEvent } from "../types/events"; - -import { aggregateStreamChunks } from "../utils/aggregateStream"; -import { mergeToolCalls } from "../utils/mergeToolCalls"; -import { openaiClient } from "../utils/client"; -import { openaiCost, Price } from "../utils/cost"; -import { SendWorkflowEvent } from "@restackio/ai/event"; -import { ChatModel } from "openai/resources/index"; - -export async function openaiChatCompletionsStream({ - model = "gpt-4o-mini", - userName, - newMessage, - assistantName, - messages = [], - tools, - toolEvent, - streamAtCharacter, - streamEvent, - apiKey, - price, -}: { - model?: ChatModel; - userName?: string; - newMessage?: string; - assistantName?: string; - messages?: OpenAI.Chat.Completions.ChatCompletionMessageParam[]; - tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; - toolEvent?: { - workflowEventName: string; - workflow?: SendWorkflowEvent["workflow"]; - }; - streamAtCharacter?: string; - streamEvent?: { - workflowEventName: string; - workflow?: SendWorkflowEvent["workflow"]; - }; - apiKey?: string; - price?: Price; -}) { - const restack = new Restack(); - const workflow = currentWorkflow().workflowExecution; - - log.debug("workflow", { workflow }); - - if (newMessage) { - messages.push({ - role: "user", - name: userName, - content: newMessage, - }); - } - - const openai = openaiClient({ apiKey }); - const chatStream = await openai.chat.completions.create({ - model: model, - messages, - tools, - stream: true, - stream_options: { - include_usage: true, - }, - }); - - const [stream, streamEnd] = chatStream.tee(); - const readableStream = streamEnd.toReadableStream() as unknown as ReadableStream; - const aggregatedStream = await aggregateStreamChunks(readableStream); - - let finishReason: ChatCompletionChunk.Choice["finish_reason"]; - let response: ChatCompletionChunk.Choice.Delta["content"] = ""; - let tokensCountInput = 0; - let tokensCountOutput = 0; - - for await (const chunk of stream) { - let content = chunk.choices[0]?.delta?.content || ""; - finishReason = chunk.choices[0]?.finish_reason; - tokensCountInput += chunk.usage?.prompt_tokens ?? 0; - tokensCountOutput += chunk.usage?.completion_tokens ?? 0; - - if (finishReason === "tool_calls") { - const { toolCalls } = mergeToolCalls(aggregatedStream); - await Promise.all( - toolCalls.map((toolCall) => { - if (toolEvent) { - const functionArguments = JSON.parse( - toolCall.function?.arguments ?? "" - ); - - const input: ToolCallEvent = { - ...toolCall, - function: { - name: toolCall.function?.name ?? "", - input: functionArguments, - }, - assistantName, - }; - - if (toolEvent) { - const workflowEvent = { - event: { - name: toolEvent.workflowEventName, - input, - }, - workflow: { - ...workflow, - ...toolEvent.workflow, - }, - }; - log.debug("toolEvent sendWorkflowEvent", { workflowEvent }); - - restack.sendWorkflowEvent(workflowEvent); - } - } - }) - ); - return { - result: { - messages, - toolCalls, - }, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: tokensCountInput, - output: tokensCountOutput, - }, - }), - }; - } else { - response += content; - if ( - content.trim().slice(-1) === streamAtCharacter || - finishReason === "stop" - ) { - if (response.length) { - const input: StreamEvent = { - chunkId: chunk.id, - response, - assistantName, - isLast: finishReason === "stop", - }; - if (streamEvent) { - const workflowEvent = { - event: { - name: streamEvent.workflowEventName, - input, - }, - workflow: { - ...workflow, - ...streamEvent.workflow, - }, - }; - log.debug("streamEvent sendWorkflowEvent", { workflowEvent }); - restack.sendWorkflowEvent(workflowEvent); - } - } - } - - if (finishReason === "stop") { - const newMessage: OpenAI.Chat.Completions.ChatCompletionMessageParam = { - content: response, - role: "assistant", - name: assistantName, - }; - - messages.push(newMessage); - - return { - result: { - messages, - }, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: tokensCountInput, - output: tokensCountOutput, - }, - }), - }; - } - } - } -} diff --git a/community/gotohuman/src/functions/openai/chat/index.ts b/community/gotohuman/src/functions/openai/chat/index.ts deleted file mode 100644 index 3cb4077..0000000 --- a/community/gotohuman/src/functions/openai/chat/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./completionsBase"; -export * from "./completionsStream"; diff --git a/community/gotohuman/src/functions/openai/index.ts b/community/gotohuman/src/functions/openai/index.ts deleted file mode 100644 index 6a947d6..0000000 --- a/community/gotohuman/src/functions/openai/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./chat"; -export * from "./thread"; diff --git a/community/gotohuman/src/functions/openai/thread/createAssistant.ts b/community/gotohuman/src/functions/openai/thread/createAssistant.ts deleted file mode 100644 index f893399..0000000 --- a/community/gotohuman/src/functions/openai/thread/createAssistant.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ChatModel } from "openai/resources/index"; -import { FunctionFailure } from "@restackio/ai/function"; -import { Assistant, AssistantTool } from "openai/resources/beta/index"; - -import { openaiClient } from "../utils/client"; - -export async function createAssistant({ - apiKey, - name, - instructions, - model = "gpt-4o-mini", - tools = [], -}: { - apiKey: string; - name: string; - instructions: string; - tools?: AssistantTool[]; - model: ChatModel; -}): Promise { - try { - const openai = openaiClient({ apiKey }); - - const assistant = await openai.beta.assistants.create({ - name, - instructions, - model, - tools, - }); - - return assistant; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error creating assistant: ${error}`); - } -} diff --git a/community/gotohuman/src/functions/openai/thread/createMessageOnThread.ts b/community/gotohuman/src/functions/openai/thread/createMessageOnThread.ts deleted file mode 100644 index 63b4a24..0000000 --- a/community/gotohuman/src/functions/openai/thread/createMessageOnThread.ts +++ /dev/null @@ -1,28 +0,0 @@ -import OpenAI from "openai/index"; -import { FunctionFailure } from "@restackio/ai/function"; - -import { openaiClient } from "../utils/client"; - -export async function createMessageOnThread({ - apiKey, - threadId, - content, - role, -}: { - apiKey: string; - threadId: string; - content: string; - role: OpenAI.Beta.Threads.MessageCreateParams["role"]; -}) { - try { - const openai = openaiClient({ apiKey }); - await openai.beta.threads.messages.create(threadId, { - role, - content, - }); - } catch (error) { - throw FunctionFailure.nonRetryable( - `Error creating message thread: ${error}` - ); - } -} diff --git a/community/gotohuman/src/functions/openai/thread/createThread.ts b/community/gotohuman/src/functions/openai/thread/createThread.ts deleted file mode 100644 index 5d29652..0000000 --- a/community/gotohuman/src/functions/openai/thread/createThread.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Thread } from "openai/resources/beta/index"; - -import { openaiClient } from "../utils/client"; - -export async function createThread({ - apiKey, -}: { - apiKey: string; -}): Promise { - try { - const openai = openaiClient({ apiKey }); - const thread = await openai.beta.threads.create(); - - return thread; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error creating thread: ${error}`); - } -} diff --git a/community/gotohuman/src/functions/openai/thread/index.ts b/community/gotohuman/src/functions/openai/thread/index.ts deleted file mode 100644 index 0ef24eb..0000000 --- a/community/gotohuman/src/functions/openai/thread/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./createAssistant"; -export * from "./createMessageOnThread"; -export * from "./createThread"; -export * from "./runThread"; diff --git a/community/gotohuman/src/functions/openai/thread/runThread.ts b/community/gotohuman/src/functions/openai/thread/runThread.ts deleted file mode 100644 index 57d17e6..0000000 --- a/community/gotohuman/src/functions/openai/thread/runThread.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Stream } from "openai/streaming"; -import { AssistantStreamEvent } from "openai/resources/beta/index"; -import { Run } from "openai/resources/beta/threads/runs/index"; - -import { openaiClient } from "../utils/client"; - -export async function runThread({ - apiKey, - threadId, - assistantId, - stream = false, -}: { - apiKey: string; - threadId: string; - assistantId: string; - stream: boolean; -}): Promise | Run> { - try { - const openai = openaiClient({ apiKey }); - - const run = await openai.beta.threads.runs.create(threadId, { - assistant_id: assistantId, - ...(stream && { stream }), - }); - - return run; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error running thread: ${error}`); - } -} \ No newline at end of file diff --git a/community/gotohuman/src/functions/openai/types/events.ts b/community/gotohuman/src/functions/openai/types/events.ts deleted file mode 100644 index 44b071b..0000000 --- a/community/gotohuman/src/functions/openai/types/events.ts +++ /dev/null @@ -1,17 +0,0 @@ -import OpenAI from "openai/index"; - -export type StreamEvent = { - chunkId?: string; - response: string; - assistantName?: string; - isLast: boolean; -}; - -export type ToolCallEvent = - OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall & { - function: { - name: string; - input: JSON; - }; - assistantName?: string; - }; diff --git a/community/gotohuman/src/functions/openai/types/index.ts b/community/gotohuman/src/functions/openai/types/index.ts deleted file mode 100644 index 1784004..0000000 --- a/community/gotohuman/src/functions/openai/types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./events"; diff --git a/community/gotohuman/src/functions/openai/utils/aggregateStream.ts b/community/gotohuman/src/functions/openai/utils/aggregateStream.ts deleted file mode 100644 index 18a7d74..0000000 --- a/community/gotohuman/src/functions/openai/utils/aggregateStream.ts +++ /dev/null @@ -1,26 +0,0 @@ -export async function aggregateStreamChunks(stream: ReadableStream) { - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - if (value) chunks.push(value); - } - - const aggregated = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - aggregated.set(chunk, offset); - offset += chunk.length; - } - - const textContent = new TextDecoder().decode(aggregated); - const jsonObjects = textContent - .split("\n") - .filter((line) => line.trim()) - .map((line) => JSON.parse(line)); - return jsonObjects; -} diff --git a/community/gotohuman/src/functions/openai/utils/client.ts b/community/gotohuman/src/functions/openai/utils/client.ts deleted file mode 100644 index 77fd385..0000000 --- a/community/gotohuman/src/functions/openai/utils/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import OpenAI from "openai/index"; -import "dotenv/config"; - -let openaiInstance: OpenAI | null = null; - -export const openaiClient = ({ - apiKey = process.env.OPENAI_API_KEY, -}: { - apiKey?: string; -}): OpenAI => { - if (!apiKey) { - throw new Error("API key is required to create OpenAI client."); - } - - if (!openaiInstance) { - openaiInstance = new OpenAI({ - apiKey, - }); - } - return openaiInstance; -}; diff --git a/community/gotohuman/src/functions/openai/utils/cost.ts b/community/gotohuman/src/functions/openai/utils/cost.ts deleted file mode 100644 index 2724ab6..0000000 --- a/community/gotohuman/src/functions/openai/utils/cost.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type TokensCount = { - input: number; - output: number; -}; - -export type Price = { - input: number; - output: number; -}; -export const openaiCost = ({ - tokensCount, - price, -}: { - tokensCount: TokensCount; - price: Price; -}): number => { - let cost = 0; - const { input: inputTokens, output: outputTokens } = tokensCount; - const { input: inputPrice, output: outputPrice } = price; - - cost = inputTokens * inputPrice + outputTokens * outputPrice; - - return cost; -}; diff --git a/community/gotohuman/src/functions/openai/utils/index.ts b/community/gotohuman/src/functions/openai/utils/index.ts deleted file mode 100644 index 0707ebb..0000000 --- a/community/gotohuman/src/functions/openai/utils/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./aggregateStream"; -export * from "./client"; -export * from "./cost"; -export * from "./mergeToolCalls"; diff --git a/community/gotohuman/src/functions/openai/utils/mergeToolCalls.ts b/community/gotohuman/src/functions/openai/utils/mergeToolCalls.ts deleted file mode 100644 index 600170f..0000000 --- a/community/gotohuman/src/functions/openai/utils/mergeToolCalls.ts +++ /dev/null @@ -1,31 +0,0 @@ -import OpenAI from "openai/index"; -import { ChatCompletionChunk } from "openai/resources/chat/completions.mjs"; - -export function mergeToolCalls(aggregatedStream: ChatCompletionChunk[]) { - const toolCalls: OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall[] = - []; - - aggregatedStream.forEach((chunk) => { - chunk.choices.forEach((choice) => { - if (choice.delta.tool_calls) { - choice.delta.tool_calls.forEach((toolCall) => { - const lastToolCall = toolCalls[toolCalls.length - 1]; - if (toolCall.id) { - toolCalls.push({ - ...toolCall, - function: { ...toolCall.function, arguments: "" }, - }); - } else if ( - lastToolCall && - lastToolCall.function && - toolCall.function?.arguments - ) { - lastToolCall.function.arguments += toolCall.function.arguments; - } - }); - } - }); - }); - - return { toolCalls }; -} diff --git a/community/gotohuman/src/functions/publishPost.ts b/community/gotohuman/src/functions/publishPost.ts deleted file mode 100644 index 5ef8789..0000000 --- a/community/gotohuman/src/functions/publishPost.ts +++ /dev/null @@ -1,8 +0,0 @@ -interface Input { - post: string; -} - -export async function publishPost({ post }: Input): Promise { - // TODO: Publish the post here - return `Published: ${post.slice(0,20)}`; -} diff --git a/community/gotohuman/src/functions/requestReview.ts b/community/gotohuman/src/functions/requestReview.ts deleted file mode 100644 index f30c029..0000000 --- a/community/gotohuman/src/functions/requestReview.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { gotoHumanClient } from "./utils/client"; - -interface Input { - topic: string; - postDraft: string; - workflowId: string; - runId: string; -} - -interface Output { - reviewId: string; -} - -export async function requestReview({topic, postDraft, workflowId, runId}: Input): Promise { - const formId = process.env.GOTOHUMAN_FORM_ID - if (!formId) { - throw new Error("A form ID is required to request a review for a gotoHuman form."); - } - // Our gotoHuman review form contains dynamic components with the IDs 'topic' and 'linkedInPost' - const gotoHuman = gotoHumanClient(); - const { reviewId } = await gotoHuman.createReview(formId) - .addFieldData("topic", topic) - .addFieldData("linkedInPost", postDraft) - .addMetaData("restackWorkflowId", workflowId) - .addMetaData("restackRunId", runId) - .sendRequest() - return { reviewId }; -} diff --git a/community/gotohuman/src/functions/utils/client.ts b/community/gotohuman/src/functions/utils/client.ts deleted file mode 100644 index 4464873..0000000 --- a/community/gotohuman/src/functions/utils/client.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { GotoHuman } from "gotohuman"; - -let instance: GotoHuman | null = null; - -export const gotoHumanClient = ({ - apiKey = process.env.GOTOHUMAN_API_KEY, -}: { - apiKey?: string; -} = {}): GotoHuman => { - if (!apiKey) { - throw new Error("API key is required to create gotoHuman client."); - } - - if (!instance) { - instance = new GotoHuman(apiKey); - } - return instance; -}; \ No newline at end of file diff --git a/community/gotohuman/src/services.ts b/community/gotohuman/src/services.ts deleted file mode 100644 index b65654b..0000000 --- a/community/gotohuman/src/services.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { requestReview, publishPost } from "./functions"; -import { client } from "./client"; - -async function services() { - const workflowsPath = require.resolve("./workflows"); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { requestReview, publishPost }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/gotohuman/src/workflows/index.ts b/community/gotohuman/src/workflows/index.ts deleted file mode 100644 index 92e5ec8..0000000 --- a/community/gotohuman/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./writePost"; \ No newline at end of file diff --git a/community/gotohuman/src/workflows/writePost.ts b/community/gotohuman/src/workflows/writePost.ts deleted file mode 100644 index d1d5967..0000000 --- a/community/gotohuman/src/workflows/writePost.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { log, step, condition, workflowInfo } from "@restackio/ai/workflow"; -import { onEvent } from "@restackio/ai/event"; -import { z } from "zod"; -import zodToJsonSchema from "zod-to-json-schema"; -import { HumanResponseInput, HumanResponseEvent } from "../events"; -import * as functions from "../functions"; - -interface TopicInput { - topic: string; -} - -export async function writePostWorkflow({ topic }: TopicInput) { - const workflowId = workflowInfo().workflowId - const runId = workflowInfo().runId - let endWorkflow = false; - - // Step 1: Create LinkedIn post with openai - - const prompt = `Write a short LinkedIn post about '${topic}' and how it will be affected by AI.`; - - const ResponseSchema = z.object({ - linkedInPost: z.string().describe("The drafted LinkedIn post."), - }); - const jsonSchema = { - name: "post", - schema: zodToJsonSchema(ResponseSchema), - }; - - const openaiOutput = await step({ - taskQueue: "openai", - }).openaiChatCompletionsBase({ - userContent: prompt, - jsonSchema, - }); - - const response = openaiOutput.result.choices[0].message.content ?? ""; - const {linkedInPost} = JSON.parse(response) - - log.info("drafted post: ", { DRAFT: linkedInPost }); - - // Step 2: Request a human review - - const { reviewId: gotoHumanReviewId } = await step({}).requestReview({ - topic, - postDraft: linkedInPost, - workflowId, - runId - }); - - log.info("awaiting gotoHuman review, ID: ", { gotoHumanReviewId }); - - // Step 3: Listen to review response and publish if approved - - let message; - onEvent(HumanResponseEvent, async (event: HumanResponseInput) => { - log.info("Received human response from gotoHuman", event); - - if (event.publishDecision === 'publish') { - message = await step({}).publishPost({ - post: event.linkedInPost, - }); - } else { - message = "Discarded" - } - endWorkflow = true; - return message; - }); - - await condition(() => endWorkflow); - return message; -} diff --git a/community/gotohuman/tsconfig.json b/community/gotohuman/tsconfig.json deleted file mode 100644 index f4d02b9..0000000 --- a/community/gotohuman/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/.env.Example b/community/hackathons/defense_quickstart_news_scraper_summarizer/.env.Example deleted file mode 100644 index a7b6b86..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/.env.Example +++ /dev/null @@ -1,12 +0,0 @@ -# (Required) Example-specific environment variables - -OPENBABYLON_API_URL= - -# (Optional) Restack Cloud - You only need to set these if you are using Restack Cloud - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_ADDRESS_WITHOUT_PORT= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/.gitignore b/community/hackathons/defense_quickstart_news_scraper_summarizer/.gitignore deleted file mode 100644 index 2eea525..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.env \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/README.md b/community/hackathons/defense_quickstart_news_scraper_summarizer/README.md deleted file mode 100644 index 212e089..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/README.md +++ /dev/null @@ -1,147 +0,0 @@ -# Quickstart: War news scraper & summarizer - USS Hornet Defense Tech Hackathon - -This project demonstrates how to build a Next.js application that scrapes and summarizes defense news articles using OpenBabylon AI. Built for the USS Hornet Defense Tech Hackathon, it features a Next.js frontend for displaying summarized news and a backend service that handles RSS feed scraping, content translation, and AI-powered summarization of defense-related articles. - -## OpenBabylon Credentials - -During the hackathon, OpenBabylon provides a public url. No API key is needeed. - -``` -OPENBABYLON_API_URL=64.139.222.109:80/v1 -``` - -## Functions - -A core feature of Restack is the ability to build [TypeScript functions](https://docs.restack.io/libraries/typescript/functions) that can be executed as workflow steps. Each function supports rate limiting, retries, error handling and replay capabilities. - -1. **rssPull**: Fetches and parses RSS feeds with encoding detection, supporting multiple RSS formats and character encodings -2. **crawlWebsite**: Extracts clean article content from web pages using Mozilla's Readability -3. **splitContent**: Splits large texts into manageable chunks (4096 token limit) -4. **llmChat**: Integrates with OpenBabylon's Mistral model for translation and summarization - -## Example Workflow - -Functions can be executed as steps in a [workflow](https://docs.restack.io/features/workflows). The example includes one main workflow: - -**rssDigest**: Multi-stage workflow that: - -- Fetches RSS feeds from specified sources (default: pravda.com.ua) -- Crawls full article content -- Splits content into manageable chunks -- Translates content to English -- Generates per-chunk summaries -- Creates a final consolidated digest - -## Project Structure - -- `frontend/`: Next.js frontend application with: - - - Server Actions for workflow triggering - - Tailwind CSS styling - - Type-safe API integration to Restack Engine - -- `backend/`: Restack backend with Node.js featuring: - - `rssDigest` workflow - - `llmChat` function to OpenBabylon Endpoint - -## Prerequisites - -- Node.js -- Docker -- OpenBabylon AI API URL (No API KEY NEEDED) -- Restack Engine local - -## Getting Started - -### 1. Install Restack Web UI & Engine on local - -First, install the Restack Web UI and Engine using Docker: - -```bash -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -- Required for any function and workflow execution as the orchestration layer -- Access the Web UI at http://localhost:5233 to monitor workflow runs, view logs, and manage functions - -![Restack Engine UI](./restack-engine-ui.png) - -### 2. Set Up Backend with Restack AI - -1. Navigate to the backend directory: - -```bash -cd backend -``` - -2. Install dependencies: - -```bash -pnpm install -``` - -3. Create a `.env` file with your credentials in the backend folder: - -``` -# (Required) Example-specific environment variables - -OPENBABYLON_API_URL= - -# (Optional) Restack Cloud - You only need to set these if you are using Restack Cloud. - -# Do not forget to add the port :433 -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_ID= -RESTACK_ENGINE_API_KEY= -RESTACK_CLOUD_TOKEN= -``` - -4. Start the backend service: - -```bash -pnpm run dev -``` - -### 3. Set Up Frontend - -1. Navigate to the frontend directory: - -```bash -cd frontend -``` - -2. Install dependencies: - -```bash -pnpm install -``` - -3. Create a `.env` file: - -``` -# (Required) Example-specific environment variables - -OPENBABYLON_API_URL= - -# (Optional) Restack Cloud - You only need to set these if you are using Restack Cloud. - -# Do not forget to add the port :433 -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_ID= -RESTACK_ENGINE_API_KEY= -RESTACK_CLOUD_TOKEN= -``` - -4. Start the development server: - -```bash -pnpm run dev -``` - -Visit [http://localhost:3000](http://localhost:3000) to see the application. - -![Restack Engine UI](./frontend.png) - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [Restack Console](https://console.restack.io) diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/.env.Example b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/.env.Example deleted file mode 100644 index 1fdf4cb..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/.env.Example +++ /dev/null @@ -1,11 +0,0 @@ -# (Required) Example-specific environment variables - -OPENBABYLON_API_URL= - -# (Optional) Restack Cloud - You only need to set these if you are using Restack Cloud - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/.prettierrc b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/.prettierrc deleted file mode 100644 index 9e26dfe..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/.prettierrc +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/Dockerfile b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/Dockerfile deleted file mode 100644 index e32190c..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -# Build stage -FROM node:20-bullseye AS builder - -WORKDIR /app - -# Install pnpm -RUN npm install -g pnpm - -# Copy package files and env file if it exists -COPY package*.json .env* ./ - -# Copy package files -COPY package*.json ./ - -# Install dependencies including TypeScript -RUN pnpm install -RUN pnpm add -D typescript - -# Copy source code -COPY . . - -# Build TypeScript code -RUN pnpm run build - -# Production stage -FROM node:20-bullseye - -WORKDIR /app - -# Install pnpm -RUN npm install -g pnpm - -# Copy package files and built code -COPY --from=builder /app/package*.json ./ -COPY --from=builder /app/dist ./dist - -# Install production dependencies only -RUN pnpm install --prod - -# Define environment variables -ARG RESTACK_ENGINE_ID -ENV RESTACK_ENGINE_ID=${RESTACK_ENGINE_ID} - -ARG RESTACK_ENGINE_ADDRESS -ENV RESTACK_ENGINE_ADDRESS=${RESTACK_ENGINE_ADDRESS} - -ARG RESTACK_ENGINE_API_KEY -ENV RESTACK_ENGINE_API_KEY=${RESTACK_ENGINE_API_KEY} - -EXPOSE 3000 - -CMD ["pnpm", "tsx", "dist/services.js"] \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/package.json b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/package.json deleted file mode 100644 index 9f72f50..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "restack-examples-ts-defense-quickstart-backend", - "version": "0.0.1", - "description": "Basic Node.js backend example for Next.js frontend using Restack AI, OpenBabylon", - "scripts": { - "dev": "dotenv -e .env tsx watch --include src src/services.ts", - "clean": "rm -rf node_modules", - "build": "tsc --build", - "docker:build": "docker build -t restack-def-qs-news-scraper-summarizer-backend .", - "docker:run": "docker run -p 8000:8000 --network restack-net --env-file .env --env RESTACK_ENGINE_ADDRESS=http://localhost:6233 restack-def-qs-news-scraper-summarizer-backend", - "docker:dev": "pnpm docker:build && pnpm docker:run" - }, - "dependencies": { - "@mozilla/readability": "^0.5.0", - "@restackio/ai": "^0.0.85", - "@temporalio/workflow": "^1.11.6", - "axios": "^1.7.7", - "dotenv": "^16.4.5", - "dotenv-cli": "^7.4.1", - "iconv-lite": "^0.6.3", - "jsdom": "^25.0.1", - "openai": "^4.73.0", - "tsx": "^4.19.2", - "xml2js": "^0.6.2", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.5" - }, - "devDependencies": { - "@types/express": "^5.0.0", - "@types/jsdom": "^21.1.7", - "@types/node": "^20.16.9", - "@types/xml2js": "^0.4.14", - "ts-node": "^10.9.2", - "typescript": "^5.6.3" - } -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/pnpm-lock.yaml b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/pnpm-lock.yaml deleted file mode 100644 index 60dd1ce..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/pnpm-lock.yaml +++ /dev/null @@ -1,2340 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@mozilla/readability': - specifier: ^0.5.0 - version: 0.5.0 - '@restackio/ai': - specifier: ^0.0.85 - version: 0.0.85 - '@temporalio/workflow': - specifier: ^1.11.2 - version: 1.11.3 - axios: - specifier: ^1.7.7 - version: 1.7.7 - dotenv: - specifier: ^16.4.5 - version: 16.4.5 - dotenv-cli: - specifier: ^7.4.1 - version: 7.4.2 - iconv-lite: - specifier: ^0.6.3 - version: 0.6.3 - jsdom: - specifier: ^25.0.1 - version: 25.0.1 - openai: - specifier: ^4.73.0 - version: 4.73.0(zod@3.23.8) - tsx: - specifier: ^4.19.2 - version: 4.19.2 - xml2js: - specifier: ^0.6.2 - version: 0.6.2 - zod: - specifier: ^3.23.8 - version: 3.23.8 - zod-to-json-schema: - specifier: ^3.23.5 - version: 3.23.5(zod@3.23.8) - devDependencies: - '@types/express': - specifier: ^5.0.0 - version: 5.0.0 - '@types/jsdom': - specifier: ^21.1.7 - version: 21.1.7 - '@types/node': - specifier: ^20.16.9 - version: 20.17.1 - '@types/xml2js': - specifier: ^0.4.14 - version: 0.4.14 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.40)(@types/node@20.17.1)(typescript@5.6.3) - typescript: - specifier: ^5.6.3 - version: 5.6.3 - -packages: - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@esbuild/aix-ppc64@0.23.1': - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.23.1': - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.23.1': - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.23.1': - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.23.1': - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.23.1': - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.23.1': - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.23.1': - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.23.1': - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.23.1': - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.23.1': - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.23.1': - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.23.1': - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.23.1': - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.23.1': - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.23.1': - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.23.1': - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.23.1': - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.23.1': - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.23.1': - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.23.1': - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.23.1': - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.23.1': - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.23.1': - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@grpc/grpc-js@1.12.2': - resolution: {integrity: sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.7.13': - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.1.0': - resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.5.0': - resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@mozilla/readability@0.5.0': - resolution: {integrity: sha512-Z+CZ3QaosfFaTqvhQsIktyGrjFjSC0Fa4EMph4mqKnWhmyoGICsV/8QK+8HpXut6zV7zwfWwqDmEjtk1Qf6EgQ==} - engines: {node: '>=14.0.0'} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@restackio/ai@0.0.85': - resolution: {integrity: sha512-UWDcywhNjcTn7TbgqJL1ahzpf722RZV57rnR/b5s48eMgUHZNNxMJWDvCYIW5IZKEvzLp124iu0FNrV9UbKTpA==} - engines: {node: '>=20'} - - '@swc/core-darwin-arm64@1.7.40': - resolution: {integrity: sha512-LRRrCiRJLb1kpQtxMNNsr5W82Inr0dy5Imho+4HQzVx/Ismi0qX4hQBgzJAnyOBNLK1+OBVb/912UVhKXppdfQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.7.40': - resolution: {integrity: sha512-Lpl0XK/4fLzS5jsK48opUuGXrqJXwqJckYYPwyGbCfCXm4MsBe+7dX2hq/Kc4YMY25+NeTmzAXhla8TT4WYD/g==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.7.40': - resolution: {integrity: sha512-4bEvvjptpoc5BRPr/R419h6fXTEuub+frpxxlxBOEKxgXjAF/S3xdxyPijUAakmW/xXBF0u7OC4KYI+38yQp6g==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.7.40': - resolution: {integrity: sha512-v2fBlHJ/6Ovz0L2xFAI9TRiKyl9DTdx139PuAHD9gyzp16Utl/W0MPd4t2cYdkI6hPXE9PsJCSzMOrduh+YoDg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.7.40': - resolution: {integrity: sha512-uMkduQuU4LFVkW6txv8AVArT8GjJVJ5IHoWloXaUBMT447iE8NALmpePdZWhMyj6KV7j0y23CM5rzV/I2eNGLg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.7.40': - resolution: {integrity: sha512-4LZdY1MBSnXyTpW5fpBU/+JGAhkuHT+VnFTDNegRboN5nSPh7y0Yvn4LmIioESV+sWzjKkEXujJPGjrp+oSp5w==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.7.40': - resolution: {integrity: sha512-FPjOwT3SgI6PAwH1O8bhOGBPzuvzOlzKeCtxLaCjruHJu9V8KKBrMTWOZT/FJyYC9mX5Ip1+l9j30UqUZdQxtA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.7.40': - resolution: {integrity: sha512-//ovXdD9GsTmhPmXJlXnIbRQkeuL6PSrYSr7uCMNcclrUdJG0YkO0GMM2afUKYbdJcunylDDWsSS8PFWn0QxmA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.7.40': - resolution: {integrity: sha512-iD/1auVhHGlhWAPrWmfRWL3w4AvXIWGVXZiSA109/xnRIPiHKb/HqqTp/qB94E/ZHMPRgLKkLTNwamlkueUs8g==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.7.40': - resolution: {integrity: sha512-ZlFAV1WFPhhWQ/8esiygmetkb905XIcMMtHRRG0FBGCllO+HVL5nikUaLDgTClz1onmEY9sMXUFQeoPtvliV+w==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.7.40': - resolution: {integrity: sha512-0HIzM5vigVT5IvNum+pPuST9p8xFhN6mhdIKju7qYYeNuZG78lwms/2d8WgjTJJlzp6JlPguXGrMMNzjQw0qNg==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.13': - resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} - - '@temporalio/activity@1.11.3': - resolution: {integrity: sha512-XH923/I7wvKSxrMiB/vF7Xuix3lBEd1vLGMtgkj0wF2t8WBITjbHXQLzpJUlQm8O0hjixI7bDqFNRCan3Ov1xQ==} - - '@temporalio/client@1.11.3': - resolution: {integrity: sha512-2x30xAXbUuqelrWe3Vd1FVC0+Z2Cfh6m2W5yDUZBjqTMdNP6qd8nH4S4mceRtZ4TipYSPmaONaiWoAU2VvwEIg==} - - '@temporalio/common@1.11.3': - resolution: {integrity: sha512-dzCrwiE9ox/Q16AjBsUKr4djg1ovYHNCjH36WZadwsemXINRWa5eW53j0WZOlmFF8/CbcHIhiD5N18rZqjiYkg==} - - '@temporalio/core-bridge@1.11.3': - resolution: {integrity: sha512-dUPJiS/ZQtFnttmu0V1BLLjUE5wQxrwI0+xSvUc6JEiC1q9Z6BmhobSKbcEKCvJgh5OMZKh/jn6yu1N7oLsZPw==} - - '@temporalio/proto@1.11.3': - resolution: {integrity: sha512-X+xV75m11BvvS5MljagtYCybRNxpLNJM24eWyfv+uyU4WZSvgQCUh21fY4FOUDJS66DPvO1mefSPu0Nunp1PHg==} - - '@temporalio/worker@1.11.3': - resolution: {integrity: sha512-CwiqsiQ5pKIyEcYOlfjRudu4pXCHU9PXm3Qycn1owpgdL1fbbpFiJ8yCoTWqrlB23BsWMhOpUyaQLnTF8D+4aQ==} - engines: {node: '>= 16.0.0'} - - '@temporalio/workflow@1.11.3': - resolution: {integrity: sha512-TT4TqzMveLY9UsWQUSkFyb9Qvoz4VvCcJCPCyKLQyrp5BuAsf7owOByOfs74gz2tgTQiPjk1TtV4YXXEPRb4yA==} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/express-serve-static-core@5.0.1': - resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} - - '@types/express@5.0.0': - resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} - - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - - '@types/jsdom@21.1.7': - resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - - '@types/node@18.19.64': - resolution: {integrity: sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==} - - '@types/node@20.17.1': - resolution: {integrity: sha512-j2VlPv1NnwPJbaCNv69FO/1z4lId0QmGvpT41YxitRtWlg96g/j8qcv2RKsLKe2F6OJgyXhupN1Xo17b2m139Q==} - - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/xml2js@0.4.14': - resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} - - '@webassemblyjs/ast@1.12.1': - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} - - '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - - '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - - '@webassemblyjs/helper-buffer@1.12.1': - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - - '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - - '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - - '@webassemblyjs/helper-wasm-section@1.12.1': - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} - - '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - - '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - - '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - - '@webassemblyjs/wasm-edit@1.12.1': - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} - - '@webassemblyjs/wasm-gen@1.12.1': - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} - - '@webassemblyjs/wasm-opt@1.12.1': - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} - - '@webassemblyjs/wasm-parser@1.12.1': - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} - - '@webassemblyjs/wast-printer@1.12.1': - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.13.0: - resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - - agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.7.7: - resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} - - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - caniuse-lite@1.0.30001672: - resolution: {integrity: sha512-XhW1vRo1ob6aeK2w3rTohwTPBLse/rvjq+s3RTSBwnlZqoFFjx9cHsShJjAIbLsLjyoacaTxpLZy9v3gg6zypw==} - - cargo-cp-artifact@0.1.9: - resolution: {integrity: sha512-6F+UYzTaGB+awsTXg0uSJA1/b/B3DDJzpKVRu0UmyI7DmNeaAl2RFHuTGIN6fEgpadRxoXGb7gbC1xo4C3IdyA==} - hasBin: true - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} - engines: {node: '>= 8'} - - cssstyle@4.1.0: - resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} - engines: {node: '>=18'} - - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dotenv-cli@7.4.2: - resolution: {integrity: sha512-SbUj8l61zIbzyhIbg0FwPJq6+wjbzdn9oEtozQpZ6kW2ihCcapKVZj49oCT3oPM+mgQm+itgvUQcG5szxVrZTA==} - hasBin: true - - dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - - electron-to-chromium@1.5.47: - resolution: {integrity: sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - - esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} - - formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} - - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - heap-js@2.5.0: - resolution: {integrity: sha512-kUGoI3p7u6B41z/dp33G6OaL7J4DRqRYwVmeIlwLClx7yaaAy7hoDExnuejTKtuDwfcatGmddHDEOjf6EyIxtQ==} - engines: {node: '>=10.0.0'} - - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} - engines: {node: '>= 14'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jsdom@25.0.1: - resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - memfs@4.14.0: - resolution: {integrity: sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==} - engines: {node: '>= 4.0.0'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - ms@3.0.0-canary.1: - resolution: {integrity: sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==} - engines: {node: '>=12.13'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - nwsapi@2.2.13: - resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} - - openai@4.73.0: - resolution: {integrity: sha512-NZstV77w3CEol9KQTRBRQ15+Sw6nxVTicAULSjYO4wn9E5gw72Mtp3fAVaBFXyyVPws4241YmFG6ya4L8v03tA==} - hasBin: true - peerDependencies: - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - proto3-json-serializer@2.0.2: - resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} - engines: {node: '>=14.0.0'} - - protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - rrweb-cssom@0.7.1: - resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-loader@4.0.2: - resolution: {integrity: sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.72.1 - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - swc-loader@0.2.6: - resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} - peerDependencies: - '@swc/core': ^1.2.147 - webpack: '>=2' - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.36.0: - resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} - engines: {node: '>=10'} - hasBin: true - - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - - tldts-core@6.1.62: - resolution: {integrity: sha512-ohONqbfobpuaylhqFbtCzc0dFFeNz85FVKSesgT8DS9OV3a25Yj730pTj7/dDtCqmgoCgEj6gDiU9XxgHKQlBw==} - - tldts@6.1.62: - resolution: {integrity: sha512-TF+wo3MgTLbf37keEwQD0IxvOZO8UZxnpPJDg5iFGAASGxYzbX/Q0y944ATEjrfxG/pF1TWRHCPbFp49Mz1Y1w==} - hasBin: true - - tough-cookie@5.0.0: - resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} - engines: {node: '>=16'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} - - tree-dump@1.0.2: - resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tslib@2.8.0: - resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} - - tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} - engines: {node: '>=18.0.0'} - hasBin: true - - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - - unionfs@4.5.4: - resolution: {integrity: sha512-qI3RvJwwdFcWUdZz1dWgAyLSfGlY2fS2pstvwkZBUTnkxjcnIvzriBLtqJTKz9FtArAvJeiVCqHlxhOw8Syfyw==} - - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - - watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} - engines: {node: '>=10.13.0'} - - web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack@5.95.0: - resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} - engines: {node: '>=18'} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} - - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - zod-to-json-schema@3.23.5: - resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==} - peerDependencies: - zod: ^3.23.3 - - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - -snapshots: - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild/aix-ppc64@0.23.1': - optional: true - - '@esbuild/android-arm64@0.23.1': - optional: true - - '@esbuild/android-arm@0.23.1': - optional: true - - '@esbuild/android-x64@0.23.1': - optional: true - - '@esbuild/darwin-arm64@0.23.1': - optional: true - - '@esbuild/darwin-x64@0.23.1': - optional: true - - '@esbuild/freebsd-arm64@0.23.1': - optional: true - - '@esbuild/freebsd-x64@0.23.1': - optional: true - - '@esbuild/linux-arm64@0.23.1': - optional: true - - '@esbuild/linux-arm@0.23.1': - optional: true - - '@esbuild/linux-ia32@0.23.1': - optional: true - - '@esbuild/linux-loong64@0.23.1': - optional: true - - '@esbuild/linux-mips64el@0.23.1': - optional: true - - '@esbuild/linux-ppc64@0.23.1': - optional: true - - '@esbuild/linux-riscv64@0.23.1': - optional: true - - '@esbuild/linux-s390x@0.23.1': - optional: true - - '@esbuild/linux-x64@0.23.1': - optional: true - - '@esbuild/netbsd-x64@0.23.1': - optional: true - - '@esbuild/openbsd-arm64@0.23.1': - optional: true - - '@esbuild/openbsd-x64@0.23.1': - optional: true - - '@esbuild/sunos-x64@0.23.1': - optional: true - - '@esbuild/win32-arm64@0.23.1': - optional: true - - '@esbuild/win32-ia32@0.23.1': - optional: true - - '@esbuild/win32-x64@0.23.1': - optional: true - - '@grpc/grpc-js@1.12.2': - dependencies: - '@grpc/proto-loader': 0.7.13 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.7.13': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.2.3 - protobufjs: 7.4.0 - yargs: 17.7.2 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@js-sdsl/ordered-map@4.4.2': {} - - '@jsonjoy.com/base64@1.1.2(tslib@2.8.0)': - dependencies: - tslib: 2.8.0 - - '@jsonjoy.com/json-pack@1.1.0(tslib@2.8.0)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.0) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.0) - hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.8.0) - tslib: 2.8.0 - - '@jsonjoy.com/util@1.5.0(tslib@2.8.0)': - dependencies: - tslib: 2.8.0 - - '@mozilla/readability@0.5.0': {} - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@restackio/ai@0.0.85': - dependencies: - '@temporalio/activity': 1.11.3 - '@temporalio/client': 1.11.3 - '@temporalio/worker': 1.11.3 - '@temporalio/workflow': 1.11.3 - transitivePeerDependencies: - - '@swc/helpers' - - esbuild - - uglify-js - - webpack-cli - - '@swc/core-darwin-arm64@1.7.40': - optional: true - - '@swc/core-darwin-x64@1.7.40': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.7.40': - optional: true - - '@swc/core-linux-arm64-gnu@1.7.40': - optional: true - - '@swc/core-linux-arm64-musl@1.7.40': - optional: true - - '@swc/core-linux-x64-gnu@1.7.40': - optional: true - - '@swc/core-linux-x64-musl@1.7.40': - optional: true - - '@swc/core-win32-arm64-msvc@1.7.40': - optional: true - - '@swc/core-win32-ia32-msvc@1.7.40': - optional: true - - '@swc/core-win32-x64-msvc@1.7.40': - optional: true - - '@swc/core@1.7.40': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.13 - optionalDependencies: - '@swc/core-darwin-arm64': 1.7.40 - '@swc/core-darwin-x64': 1.7.40 - '@swc/core-linux-arm-gnueabihf': 1.7.40 - '@swc/core-linux-arm64-gnu': 1.7.40 - '@swc/core-linux-arm64-musl': 1.7.40 - '@swc/core-linux-x64-gnu': 1.7.40 - '@swc/core-linux-x64-musl': 1.7.40 - '@swc/core-win32-arm64-msvc': 1.7.40 - '@swc/core-win32-ia32-msvc': 1.7.40 - '@swc/core-win32-x64-msvc': 1.7.40 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.13': - dependencies: - '@swc/counter': 0.1.3 - - '@temporalio/activity@1.11.3': - dependencies: - '@temporalio/common': 1.11.3 - abort-controller: 3.0.0 - - '@temporalio/client@1.11.3': - dependencies: - '@grpc/grpc-js': 1.12.2 - '@temporalio/common': 1.11.3 - '@temporalio/proto': 1.11.3 - abort-controller: 3.0.0 - long: 5.2.3 - uuid: 9.0.1 - - '@temporalio/common@1.11.3': - dependencies: - '@temporalio/proto': 1.11.3 - long: 5.2.3 - ms: 3.0.0-canary.1 - proto3-json-serializer: 2.0.2 - - '@temporalio/core-bridge@1.11.3': - dependencies: - '@temporalio/common': 1.11.3 - arg: 5.0.2 - cargo-cp-artifact: 0.1.9 - which: 4.0.0 - - '@temporalio/proto@1.11.3': - dependencies: - long: 5.2.3 - protobufjs: 7.4.0 - - '@temporalio/worker@1.11.3': - dependencies: - '@swc/core': 1.7.40 - '@temporalio/activity': 1.11.3 - '@temporalio/client': 1.11.3 - '@temporalio/common': 1.11.3 - '@temporalio/core-bridge': 1.11.3 - '@temporalio/proto': 1.11.3 - '@temporalio/workflow': 1.11.3 - abort-controller: 3.0.0 - heap-js: 2.5.0 - memfs: 4.14.0 - rxjs: 7.8.1 - source-map: 0.7.4 - source-map-loader: 4.0.2(webpack@5.95.0(@swc/core@1.7.40)) - supports-color: 8.1.1 - swc-loader: 0.2.6(@swc/core@1.7.40)(webpack@5.95.0(@swc/core@1.7.40)) - unionfs: 4.5.4 - webpack: 5.95.0(@swc/core@1.7.40) - transitivePeerDependencies: - - '@swc/helpers' - - esbuild - - uglify-js - - webpack-cli - - '@temporalio/workflow@1.11.3': - dependencies: - '@temporalio/common': 1.11.3 - '@temporalio/proto': 1.11.3 - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.17.1 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 20.17.1 - - '@types/estree@1.0.6': {} - - '@types/express-serve-static-core@5.0.1': - dependencies: - '@types/node': 20.17.1 - '@types/qs': 6.9.16 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express@5.0.0': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 5.0.1 - '@types/qs': 6.9.16 - '@types/serve-static': 1.15.7 - - '@types/http-errors@2.0.4': {} - - '@types/jsdom@21.1.7': - dependencies: - '@types/node': 20.17.1 - '@types/tough-cookie': 4.0.5 - parse5: 7.2.1 - - '@types/json-schema@7.0.15': {} - - '@types/mime@1.3.5': {} - - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 20.17.1 - form-data: 4.0.1 - - '@types/node@18.19.64': - dependencies: - undici-types: 5.26.5 - - '@types/node@20.17.1': - dependencies: - undici-types: 6.19.8 - - '@types/qs@6.9.16': {} - - '@types/range-parser@1.2.7': {} - - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.17.1 - - '@types/serve-static@1.15.7': - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.17.1 - '@types/send': 0.17.4 - - '@types/tough-cookie@4.0.5': {} - - '@types/xml2js@0.4.14': - dependencies: - '@types/node': 20.17.1 - - '@webassemblyjs/ast@1.12.1': - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - - '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - - '@webassemblyjs/helper-api-error@1.11.6': {} - - '@webassemblyjs/helper-buffer@1.12.1': {} - - '@webassemblyjs/helper-numbers@1.11.6': - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - - '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - - '@webassemblyjs/helper-wasm-section@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 - - '@webassemblyjs/ieee754@1.11.6': - dependencies: - '@xtuc/ieee754': 1.2.0 - - '@webassemblyjs/leb128@1.11.6': - dependencies: - '@xtuc/long': 4.2.2 - - '@webassemblyjs/utf8@1.11.6': {} - - '@webassemblyjs/wasm-edit@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 - - '@webassemblyjs/wasm-gen@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - - '@webassemblyjs/wasm-opt@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - - '@webassemblyjs/wasm-parser@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - - '@webassemblyjs/wast-printer@1.12.1': - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@xtuc/long': 4.2.2 - - '@xtuc/ieee754@1.2.0': {} - - '@xtuc/long@4.2.2': {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - acorn-import-attributes@1.9.5(acorn@8.13.0): - dependencies: - acorn: 8.13.0 - - acorn-walk@8.3.4: - dependencies: - acorn: 8.13.0 - - acorn@8.13.0: {} - - agent-base@7.1.1: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - - agentkeepalive@4.5.0: - dependencies: - humanize-ms: 1.2.1 - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - arg@4.1.3: {} - - arg@5.0.2: {} - - asynckit@0.4.0: {} - - axios@1.7.7: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - browserslist@4.24.2: - dependencies: - caniuse-lite: 1.0.30001672 - electron-to-chromium: 1.5.47 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) - - buffer-from@1.1.2: {} - - caniuse-lite@1.0.30001672: {} - - cargo-cp-artifact@0.1.9: {} - - chrome-trace-event@1.0.4: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@2.20.3: {} - - create-require@1.1.1: {} - - cross-spawn@7.0.5: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssstyle@4.1.0: - dependencies: - rrweb-cssom: 0.7.1 - - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - - debug@4.3.7: - dependencies: - ms: 2.1.3 - - decimal.js@10.4.3: {} - - delayed-stream@1.0.0: {} - - diff@4.0.2: {} - - dotenv-cli@7.4.2: - dependencies: - cross-spawn: 7.0.5 - dotenv: 16.4.5 - dotenv-expand: 10.0.0 - minimist: 1.2.8 - - dotenv-expand@10.0.0: {} - - dotenv@16.4.5: {} - - electron-to-chromium@1.5.47: {} - - emoji-regex@8.0.0: {} - - enhanced-resolve@5.17.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - entities@4.5.0: {} - - es-module-lexer@1.5.4: {} - - esbuild@0.23.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.1 - '@esbuild/android-arm': 0.23.1 - '@esbuild/android-arm64': 0.23.1 - '@esbuild/android-x64': 0.23.1 - '@esbuild/darwin-arm64': 0.23.1 - '@esbuild/darwin-x64': 0.23.1 - '@esbuild/freebsd-arm64': 0.23.1 - '@esbuild/freebsd-x64': 0.23.1 - '@esbuild/linux-arm': 0.23.1 - '@esbuild/linux-arm64': 0.23.1 - '@esbuild/linux-ia32': 0.23.1 - '@esbuild/linux-loong64': 0.23.1 - '@esbuild/linux-mips64el': 0.23.1 - '@esbuild/linux-ppc64': 0.23.1 - '@esbuild/linux-riscv64': 0.23.1 - '@esbuild/linux-s390x': 0.23.1 - '@esbuild/linux-x64': 0.23.1 - '@esbuild/netbsd-x64': 0.23.1 - '@esbuild/openbsd-arm64': 0.23.1 - '@esbuild/openbsd-x64': 0.23.1 - '@esbuild/sunos-x64': 0.23.1 - '@esbuild/win32-arm64': 0.23.1 - '@esbuild/win32-ia32': 0.23.1 - '@esbuild/win32-x64': 0.23.1 - - escalade@3.2.0: {} - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - event-target-shim@5.0.1: {} - - events@3.3.0: {} - - fast-deep-equal@3.1.3: {} - - fast-json-stable-stringify@2.1.0: {} - - follow-redirects@1.15.9: {} - - form-data-encoder@1.7.2: {} - - form-data@4.0.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - formdata-node@4.4.1: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - - fs-monkey@1.0.6: {} - - fsevents@2.3.3: - optional: true - - get-caller-file@2.0.5: {} - - get-tsconfig@4.8.1: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-to-regexp@0.4.1: {} - - graceful-fs@4.2.11: {} - - has-flag@4.0.0: {} - - heap-js@2.5.0: {} - - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.5: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - hyperdyperid@1.2.0: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - is-fullwidth-code-point@3.0.0: {} - - is-potential-custom-element-name@1.0.1: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - jest-worker@27.5.1: - dependencies: - '@types/node': 20.17.1 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jsdom@25.0.1: - dependencies: - cssstyle: 4.1.0 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.1 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.13 - parse5: 7.2.1 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 5.0.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - ws: 8.18.0 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - loader-runner@4.3.0: {} - - lodash.camelcase@4.3.0: {} - - long@5.2.3: {} - - make-error@1.3.6: {} - - memfs@4.14.0: - dependencies: - '@jsonjoy.com/json-pack': 1.1.0(tslib@2.8.0) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.0) - tree-dump: 1.0.2(tslib@2.8.0) - tslib: 2.8.0 - - merge-stream@2.0.0: {} - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - minimist@1.2.8: {} - - ms@2.1.3: {} - - ms@3.0.0-canary.1: {} - - neo-async@2.6.2: {} - - node-domexception@1.0.0: {} - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-releases@2.0.18: {} - - nwsapi@2.2.13: {} - - openai@4.73.0(zod@3.23.8): - dependencies: - '@types/node': 18.19.64 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - optionalDependencies: - zod: 3.23.8 - transitivePeerDependencies: - - encoding - - parse5@7.2.1: - dependencies: - entities: 4.5.0 - - path-key@3.1.1: {} - - picocolors@1.1.1: {} - - proto3-json-serializer@2.0.2: - dependencies: - protobufjs: 7.4.0 - - protobufjs@7.4.0: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 20.17.1 - long: 5.2.3 - - proxy-from-env@1.1.0: {} - - punycode@2.3.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - require-directory@2.1.1: {} - - resolve-pkg-maps@1.0.0: {} - - rrweb-cssom@0.7.1: {} - - rxjs@7.8.1: - dependencies: - tslib: 2.8.0 - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - sax@1.4.1: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - schema-utils@3.3.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - source-map-js@1.2.1: {} - - source-map-loader@4.0.2(webpack@5.95.0(@swc/core@1.7.40)): - dependencies: - iconv-lite: 0.6.3 - source-map-js: 1.2.1 - webpack: 5.95.0(@swc/core@1.7.40) - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.4: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - swc-loader@0.2.6(@swc/core@1.7.40)(webpack@5.95.0(@swc/core@1.7.40)): - dependencies: - '@swc/core': 1.7.40 - '@swc/counter': 0.1.3 - webpack: 5.95.0(@swc/core@1.7.40) - - symbol-tree@3.2.4: {} - - tapable@2.2.1: {} - - terser-webpack-plugin@5.3.10(@swc/core@1.7.40)(webpack@5.95.0(@swc/core@1.7.40)): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.36.0 - webpack: 5.95.0(@swc/core@1.7.40) - optionalDependencies: - '@swc/core': 1.7.40 - - terser@5.36.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.13.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - thingies@1.21.0(tslib@2.8.0): - dependencies: - tslib: 2.8.0 - - tldts-core@6.1.62: {} - - tldts@6.1.62: - dependencies: - tldts-core: 6.1.62 - - tough-cookie@5.0.0: - dependencies: - tldts: 6.1.62 - - tr46@0.0.3: {} - - tr46@5.0.0: - dependencies: - punycode: 2.3.1 - - tree-dump@1.0.2(tslib@2.8.0): - dependencies: - tslib: 2.8.0 - - ts-node@10.9.2(@swc/core@1.7.40)(@types/node@20.17.1)(typescript@5.6.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.17.1 - acorn: 8.13.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.6.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.7.40 - - tslib@2.8.0: {} - - tsx@4.19.2: - dependencies: - esbuild: 0.23.1 - get-tsconfig: 4.8.1 - optionalDependencies: - fsevents: 2.3.3 - - typescript@5.6.3: {} - - undici-types@5.26.5: {} - - undici-types@6.19.8: {} - - unionfs@4.5.4: - dependencies: - fs-monkey: 1.0.6 - - update-browserslist-db@1.1.1(browserslist@4.24.2): - dependencies: - browserslist: 4.24.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - uuid@9.0.1: {} - - v8-compile-cache-lib@3.0.1: {} - - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - - watchpack@2.4.2: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - - web-streams-polyfill@4.0.0-beta.3: {} - - webidl-conversions@3.0.1: {} - - webidl-conversions@7.0.0: {} - - webpack-sources@3.2.3: {} - - webpack@5.95.0(@swc/core@1.7.40): - dependencies: - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.13.0 - acorn-import-attributes: 1.9.5(acorn@8.13.0) - browserslist: 4.24.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.40)(webpack@5.95.0(@swc/core@1.7.40)) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - - whatwg-url@14.0.0: - dependencies: - tr46: 5.0.0 - webidl-conversions: 7.0.0 - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@4.0.0: - dependencies: - isexe: 3.1.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - ws@8.18.0: {} - - xml-name-validator@5.0.0: {} - - xml2js@0.6.2: - dependencies: - sax: 1.4.1 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - - xmlchars@2.2.0: {} - - y18n@5.0.8: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yn@3.1.1: {} - - zod-to-json-schema@3.23.5(zod@3.23.8): - dependencies: - zod: 3.23.8 - - zod@3.23.8: {} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/client.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/client.ts deleted file mode 100644 index 3213817..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/client.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Restack from '@restackio/ai'; -import dotenv from 'dotenv'; - -dotenv.config(); - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/crawl/index.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/crawl/index.ts deleted file mode 100644 index 6b21256..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/crawl/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './website'; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/crawl/website.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/crawl/website.ts deleted file mode 100644 index 4ecc763..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/crawl/website.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import axios from "axios"; -import * as iconv from "iconv-lite"; -import { JSDOM } from "jsdom"; -import { Readability } from "@mozilla/readability"; - -export const crawlWebsite = async ({ - url -}: { url: string }): Promise<{ result: string }> => { - try { - const response = await axios.get(url, { responseType: 'arraybuffer' }); - const contentType = response.headers['content-type']; - const encoding = contentType && contentType.includes('charset=') - ? contentType.split('charset=')[1] - : 'utf-8'; - const decodedData = iconv.decode(response.data, encoding); - - const dom = new JSDOM(decodedData, { url }); - const reader = new Readability(dom.window.document); - const article = reader.parse(); - - if (article) { - return { result: article.textContent }; - } else { - throw new Error("Failed to parse the main content"); - } - } catch (error) { - throw FunctionFailure.nonRetryable(`Error crawl website: ${error}`); - } -}; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/index.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/index.ts deleted file mode 100644 index a24e2db..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './crawl'; -export * from './llm'; -export * from './rss'; -export * from './utils'; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/chat.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/chat.ts deleted file mode 100644 index 012fbb4..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/chat.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import { llmClient } from "./client"; - -export const llmChat = async ({ - userContent -}: { userContent: string }): Promise<{ result: string }> => { - try { - const llm = llmClient(); - - const response = await llm.chat.completions.create({ - messages: [{ role: "user", content: userContent }], - model: "orpo-mistral-v0.3-ua-tokV2-focus-10B-low-lr-1epoch-aux-merged-1ep", - }); - - if (!response.choices[0].message.content) { - throw FunctionFailure.nonRetryable("No response from OpenBabylon"); - } - - return { result: response.choices[0].message.content || "" }; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error LLM chat: ${error}, llmClient: ${llmClient}`); - } -}; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/client.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/client.ts deleted file mode 100644 index 6adf8ad..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/client.ts +++ /dev/null @@ -1,24 +0,0 @@ -import OpenAI from "openai/index"; -import dotenv from 'dotenv'; - -dotenv.config(); - -let openaiInstance: OpenAI | null = null; - -export const llmClient = (): OpenAI => { - if (!process.env.OPENBABYLON_API_URL) { - throw new Error("OPENBABYLON_API_URL is not set in environment variables."); - } - - const baseUrl = process.env.OPENBABYLON_API_URL.startsWith('http') - ? process.env.OPENBABYLON_API_URL - : `http://${process.env.OPENBABYLON_API_URL}`; - - if (!openaiInstance) { - openaiInstance = new OpenAI({ - baseURL: baseUrl, - apiKey: `non-existent`, - }); - } - return openaiInstance; -}; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/index.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/index.ts deleted file mode 100644 index 1125f39..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/llm/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './chat'; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/rss/index.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/rss/index.ts deleted file mode 100644 index 214e647..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/rss/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './pull'; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/rss/pull.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/rss/pull.ts deleted file mode 100644 index ef5bff0..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/rss/pull.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import axios from "axios"; -import { parseString } from "xml2js"; -import { promisify } from "util"; -import * as iconv from "iconv-lite"; - -interface RssInput { - url: string; - count?: number; -} - -export interface RssItem { - title: string; - link: string; - description: string; - category?: string; - creator?: string; - pub_date?: string; - content_encoded?: string; -} - -export async function rssPull(input: RssInput): Promise { - try { - // Fetch the RSS feed - const response = await axios.get(input.url, { responseType: 'arraybuffer' }); - - // Determine the encoding from the response headers or assume a default - const contentType = response.headers['content-type']; - const encoding = contentType && contentType.includes('charset=') - ? contentType.split('charset=')[1] - : 'utf-8'; // Default to utf-8 if not specified - - // Decode the response data using iconv-lite with the detected encoding - const decodedData = iconv.decode(Buffer.from(response.data), encoding); - - // Parse the RSS feed - const parseXml = promisify(parseString); - const result: any = await parseXml(decodedData); - - const items: RssItem[] = result.rss.channel[0].item.map((item: any) => ({ - title: item.title?.[0] || '', - link: item.link?.[0] || '', - description: item.description?.[0] || '', - category: item.category?.[0] || '', - creator: item["dc:creator"]?.[0] || '', - pub_date: item.pubDate?.[0] || '', - content_encoded: item["content:encoded"]?.[0] || '' - })); - - // Limit the number of items based on input.count - const maxCount = input.count ?? items.length; - const limitedItems = items.slice(0, maxCount); - - return limitedItems; - - } catch (error) { - log.error("rssPull function failed", { error }); - throw FunctionFailure.nonRetryable(`Error fetching RSS feed: ${error}`); - } -} \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/utils/index.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/utils/index.ts deleted file mode 100644 index cb94e3d..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./splitText"; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/utils/splitText.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/utils/splitText.ts deleted file mode 100644 index e0c9316..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/functions/utils/splitText.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; - -export const splitContent = async ({ - content, - maxTokens = 4096 -}: { - content: string, - maxTokens?: number -}): Promise<{ result: string[] }> => { - try { - const chunkSize = Math.floor(maxTokens / 3); // Assuming ~3 tokens per character - const chunks = []; - - for (let i = 0; i < content.length; i += chunkSize) { - chunks.push(content.slice(i, i + chunkSize)); - } - - return { result: chunks }; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error split content: ${error}`); - } -}; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/services.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/services.ts deleted file mode 100644 index a50b2c7..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/services.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Simple example to start two services in the same file -import { config } from 'dotenv'; -import { rssPull, llmChat, crawlWebsite, splitContent } from "./functions"; -import { client } from "./client"; - -config(); - -export async function services() { - const workflowsPath = require.resolve("./workflows"); - try { - await Promise.all([ - // Generic service with current workflows and functions - client.startService({ - workflowsPath, - functions: { - rssPull, - crawlWebsite, - splitContent, - }, - }), - client.startService({ - taskQueue: 'llm', - workflowsPath, - functions: { - llmChat - }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/workflows/index.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/workflows/index.ts deleted file mode 100644 index b7eb66e..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './rssDigest'; \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/workflows/rssDigest.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/workflows/rssDigest.ts deleted file mode 100644 index c9749b4..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/src/workflows/rssDigest.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { step } from "@restackio/ai/workflow"; -import * as functions from "../functions"; - - -export async function rssDigest({ url = "https://www.pravda.com.ua/rss/", count = 2 }: { url: string, count: number }) { - - // Step 1: Fetch RSS feed - const rssResponse: functions.RssItem[] = await step({ - }).rssPull({ - url, - count, - }); - - // Step 2: Crawl website content - let websiteContent: { result: string }[] = []; - await Promise.all(rssResponse.map(async (item) => { - const response: { result: string } = await step({ - }).crawlWebsite({ - url: item.link, - }); - - websiteContent.push(response); - })); - - // Step 3: Very basic character split because OpenBabylon model has a token limit of 4096 - let splittedContent: string[] = []; - await Promise.all(websiteContent.map(async (item) => { - const response: { result: string[] } = await step({ - }).splitContent({ - content: item.result, - }); - - splittedContent.push(...response.result); - })); - - // // Step 4: LLM translation - let translatedContent: { result: string }[] = []; - await Promise.all(splittedContent.map(async (item) => { - const response: { result: string } = await step({ - taskQueue: 'llm', - }).llmChat({ - userContent: `Only return the translated content string, no other text!! Translate the following content to English!!: ${item}.`, - }); - - translatedContent.push(response); - })); - - // // Step 5: LLM summarization per translated chunk - let summarizedContent: { result: string }[] = []; - await Promise.all(translatedContent.map(async (item) => { - const response: { result: string } = await step({ - taskQueue: 'llm', - }).llmChat({ - userContent: `Summarize the following content in maximum 1 sentence: ${item.result}.`, - }); - - summarizedContent.push(response); - })); - - // Step 6: LLM Create a digest - return await step({ - taskQueue: 'llm', - }).llmChat({ - userContent: `Summarize the following content as a daily digest, prioritize the most important information: ${summarizedContent.map((item) => item.result).join("\n")}`, - }); -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/tsconfig.json b/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/tsconfig.json deleted file mode 100644 index 795e686..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/backend/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "ES2015", - "moduleResolution": "Bundler", - "moduleDetection": "force", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/docker-compose.yml b/community/hackathons/defense_quickstart_news_scraper_summarizer/docker-compose.yml deleted file mode 100644 index 86b07b9..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/docker-compose.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: nextjs-together-llamaindex -version: '3.8' -networks: - bridge: - driver: bridge - -services: - frontend: - build: - context: ./frontend - dockerfile: Dockerfile - args: - - RESTACK_ENGINE_ID=${process.env.RESTACK_ENGINE_ID} - - RESTACK_ENGINE_ADDRESS=${process.env.RESTACK_ENGINE_ADDRESS} - - RESTACK_ENGINE_API_KEY=${process.env.RESTACK_ENGINE_API_KEY} - ports: - - "3000" - env_file: - - ./frontend/.env - depends_on: - - backend - networks: - - bridge - - backend: - build: - context: ./backend - dockerfile: Dockerfile - args: - - RESTACK_ENGINE_ID=${process.env.RESTACK_ENGINE_ID} - - RESTACK_ENGINE_ADDRESS=${process.env.RESTACK_ENGINE_ADDRESS} - - RESTACK_ENGINE_API_KEY=${process.env.RESTACK_ENGINE_API_KEY} - - OPEN_BABYLON_API_URL=${process.env.OPEN_BABYLON_API_URL} - ports: - - "3000" - env_file: - - ./backend/.env - networks: - - bridge \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend.png b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend.png deleted file mode 100644 index a60ccd8..0000000 Binary files a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend.png and /dev/null differ diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.dockerignore b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.dockerignore deleted file mode 100644 index 1380c2e..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.next \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.env.Example b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.env.Example deleted file mode 100644 index 0444c2b..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.env.Example +++ /dev/null @@ -1,7 +0,0 @@ -# (Optional) Restack Cloud - You only need to set these if you are using Restack Cloud - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.eslintrc.json b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.eslintrc.json deleted file mode 100644 index 3722418..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["next/core-web-vitals", "next/typescript"] -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.gitignore b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.gitignore deleted file mode 100644 index fd3dbb5..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/Dockerfile b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/Dockerfile deleted file mode 100644 index 92145bb..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM node:20-bullseye-slim - -# Install required system libraries -RUN apt-get update && apt-get install -y \ - libc6 \ - libgcc1 \ - curl \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /app - -# Install pnpm -RUN npm install -g pnpm - -COPY package*.json ./ -RUN pnpm install - -COPY . . -RUN pnpm run build - -EXPOSE 3000 -CMD ["pnpm", "start"] diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/next.config.mjs b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/next.config.mjs deleted file mode 100644 index e6b8205..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/next.config.mjs +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - serverComponentsExternalPackages: ['@restackio/ai'], - }, -} -export default nextConfig; diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/package.json b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/package.json deleted file mode 100644 index cf8576a..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "frontend", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "clean": "rm -rf node_modules", - "docker:build": "docker build -t restack-defense-quickstart-news-scraper-summarizer-frontend .", - "docker:run": "docker run -p 3000 restack-defense-quickstart-news-scraper-summarizer-frontend", - "docker:stop": "docker stop restack-defense-quickstart-news-scraper-summarizer-frontend" - }, - "dependencies": { - "@restackio/ai": "^0.0.85", - "next": "14.2.13", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.13", - "postcss": "^8", - "tailwindcss": "^3.4.1", - "typescript": "^5" - } -} \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/pnpm-lock.yaml b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/pnpm-lock.yaml deleted file mode 100644 index cab507e..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/pnpm-lock.yaml +++ /dev/null @@ -1,4282 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@restackio/ai': - specifier: ^0.0.85 - version: 0.0.85(@swc/helpers@0.5.11) - next: - specifier: 14.2.13 - version: 14.2.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: - specifier: ^18 - version: 18.3.1 - react-dom: - specifier: ^18 - version: 18.3.1(react@18.3.1) - devDependencies: - '@types/node': - specifier: ^20 - version: 20.17.6 - '@types/react': - specifier: ^18 - version: 18.3.12 - '@types/react-dom': - specifier: ^18 - version: 18.3.1 - eslint: - specifier: ^8 - version: 8.57.1 - eslint-config-next: - specifier: 14.2.13 - version: 14.2.13(eslint@8.57.1)(typescript@5.6.3) - postcss: - specifier: ^8 - version: 8.4.49 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.15 - typescript: - specifier: ^5 - version: 5.6.3 - -packages: - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@grpc/grpc-js@1.12.2': - resolution: {integrity: sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.7.13': - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true - - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.1.0': - resolution: {integrity: sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.5.0': - resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@next/env@14.2.13': - resolution: {integrity: sha512-s3lh6K8cbW1h5Nga7NNeXrbe0+2jIIYK9YaA9T7IufDWnZpozdFUp6Hf0d5rNWUKu4fEuSX2rCKlGjCrtylfDw==} - - '@next/eslint-plugin-next@14.2.13': - resolution: {integrity: sha512-z8Mk0VljxhIzsSiZUSdt3wp+t2lKd+jk5a9Jsvh3zDGkItgDMfjv/ZbET6HsxEl/fSihVoHGsXV6VLyDH0lfTQ==} - - '@next/swc-darwin-arm64@14.2.13': - resolution: {integrity: sha512-IkAmQEa2Htq+wHACBxOsslt+jMoV3msvxCn0WFSfJSkv/scy+i/EukBKNad36grRxywaXUYJc9mxEGkeIs8Bzg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@next/swc-darwin-x64@14.2.13': - resolution: {integrity: sha512-Dv1RBGs2TTjkwEnFMVL5XIfJEavnLqqwYSD6LXgTPdEy/u6FlSrLBSSfe1pcfqhFEXRAgVL3Wpjibe5wXJzWog==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@next/swc-linux-arm64-gnu@14.2.13': - resolution: {integrity: sha512-yB1tYEFFqo4ZNWkwrJultbsw7NPAAxlPXURXioRl9SdW6aIefOLS+0TEsKrWBtbJ9moTDgU3HRILL6QBQnMevg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-arm64-musl@14.2.13': - resolution: {integrity: sha512-v5jZ/FV/eHGoWhMKYrsAweQ7CWb8xsWGM/8m1mwwZQ/sutJjoFaXchwK4pX8NqwImILEvQmZWyb8pPTcP7htWg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-x64-gnu@14.2.13': - resolution: {integrity: sha512-aVc7m4YL7ViiRv7SOXK3RplXzOEe/qQzRA5R2vpXboHABs3w8vtFslGTz+5tKiQzWUmTmBNVW0UQdhkKRORmGA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-linux-x64-musl@14.2.13': - resolution: {integrity: sha512-4wWY7/OsSaJOOKvMsu1Teylku7vKyTuocvDLTZQq0TYv9OjiYYWt63PiE1nTuZnqQ4RPvME7Xai+9enoiN0Wrg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-win32-arm64-msvc@14.2.13': - resolution: {integrity: sha512-uP1XkqCqV2NVH9+g2sC7qIw+w2tRbcMiXFEbMihkQ8B1+V6m28sshBwAB0SDmOe0u44ne1vFU66+gx/28RsBVQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@next/swc-win32-ia32-msvc@14.2.13': - resolution: {integrity: sha512-V26ezyjPqQpDBV4lcWIh8B/QICQ4v+M5Bo9ykLN+sqeKKBxJVDpEc6biDVyluTXTC40f5IqCU0ttth7Es2ZuMw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@next/swc-win32-x64-msvc@14.2.13': - resolution: {integrity: sha512-WwzOEAFBGhlDHE5Z73mNU8CO8mqMNLqaG+AO9ETmzdCQlJhVtWZnOl2+rqgVQS+YHunjOWptdFmNfbpwcUuEsw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@restackio/ai@0.0.85': - resolution: {integrity: sha512-UWDcywhNjcTn7TbgqJL1ahzpf722RZV57rnR/b5s48eMgUHZNNxMJWDvCYIW5IZKEvzLp124iu0FNrV9UbKTpA==} - engines: {node: '>=20'} - - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@rushstack/eslint-patch@1.10.4': - resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - - '@swc/core-darwin-arm64@1.9.2': - resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.9.2': - resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.9.2': - resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.9.2': - resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.9.2': - resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.9.2': - resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.9.2': - resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.9.2': - resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.9.2': - resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.9.2': - resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.9.2': - resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/helpers@0.5.11': - resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} - - '@swc/helpers@0.5.5': - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - - '@swc/types@0.1.17': - resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} - - '@temporalio/activity@1.11.5': - resolution: {integrity: sha512-IHvaADrKhxYyhuybnMt5JX3rxK94DstENwO2jq5qjsS2p5jr1qjU72pRDUSXAha1endqgsyjqIyxqrEOsqzuyg==} - - '@temporalio/client@1.11.5': - resolution: {integrity: sha512-Q8hFqxyf41MQmCeyxcGpbiMyuxhilvG8FScFwSbFs8ZZPZykNcpr5o+TOowLWzGWAL5f2bIKETh/eXDZpZvY7g==} - - '@temporalio/common@1.11.5': - resolution: {integrity: sha512-6cgGTAT+jSKKwCPOoUDIseJuDroP7cEIAX/pYpNBRGvfj+lpU8GitSVsPEZTVoMQ400otzBa1n80aH8bnOLVTw==} - - '@temporalio/core-bridge@1.11.5': - resolution: {integrity: sha512-1IzxtPrndR99golP1yZnvsOHU9QP5o9KdNtM/W5VxChFc0ihmeZpisptgfYyqa9VaO/Bs9wEoSmH6fCSB9knTQ==} - - '@temporalio/proto@1.11.5': - resolution: {integrity: sha512-LjRGQdLRpRxDp2NSyNyhCp7JLaUlMY2T+hAeGfueR5cOVZxHXTO8TXnnjimi0UM1knyA6sW3yNJCNieKlCcASg==} - - '@temporalio/worker@1.11.5': - resolution: {integrity: sha512-WeIK/2ZQMCFVz89FeSa081kMDeHbyL0yZf335Rn0my2l0TcWWoHjVI9kQGuEAuP6fke/sCCQxpcxJ8EvEMHX8w==} - engines: {node: '>= 16.0.0'} - - '@temporalio/workflow@1.11.5': - resolution: {integrity: sha512-U0kGoQ6bttEiT59km+cpeSxVr2Bq8ZHmlurP2N+9nQdxa10RsMqrp5YQrJQfg7KrfrYbeY1HyJBQ7Ljy1FrOtQ==} - - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/node@20.17.6': - resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} - - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - - '@types/react-dom@18.3.1': - resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} - - '@types/react@18.3.12': - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} - - '@typescript-eslint/eslint-plugin@8.15.0': - resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@8.15.0': - resolution: {integrity: sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@8.15.0': - resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.15.0': - resolution: {integrity: sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@8.15.0': - resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.15.0': - resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@8.15.0': - resolution: {integrity: sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/visitor-keys@8.15.0': - resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - axe-core@4.10.2: - resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} - engines: {node: '>=4'} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001683: - resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==} - - cargo-cp-artifact@0.1.9: - resolution: {integrity: sha512-6F+UYzTaGB+awsTXg0uSJA1/b/B3DDJzpKVRu0UmyI7DmNeaAl2RFHuTGIN6fEgpadRxoXGb7gbC1xo4C3IdyA==} - hasBin: true - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - electron-to-chromium@1.5.63: - resolution: {integrity: sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} - - es-abstract@1.23.5: - resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-next@14.2.13: - resolution: {integrity: sha512-aro1EKAoyYchnO/3Tlo91hnNBO7QO7qnv/79MAFC+4Jq8TdUVKQlht5d2F+YjrePjdpOvfL+mV9JPfyYNwkk1g==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.3: - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705: - resolution: {integrity: sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.37.2: - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - heap-js@2.5.0: - resolution: {integrity: sha512-kUGoI3p7u6B41z/dp33G6OaL7J4DRqRYwVmeIlwLClx7yaaAy7hoDExnuejTKtuDwfcatGmddHDEOjf6EyIxtQ==} - engines: {node: '>=10.0.0'} - - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} - engines: {node: '>= 0.4'} - - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - memfs@4.14.0: - resolution: {integrity: sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==} - engines: {node: '>= 4.0.0'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - ms@3.0.0-canary.1: - resolution: {integrity: sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==} - engines: {node: '>=12.13'} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - next@14.2.13: - resolution: {integrity: sha512-BseY9YNw8QJSwLYD7hlZzl6QVDoSFHL/URN5K64kVEVpCsSOWeyjbIGK+dZUaRViHTaMQX8aqmnn0PHBbGZezg==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - sass: - optional: true - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proto3-json-serializer@2.0.2: - resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} - engines: {node: '>=14.0.0'} - - protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-loader@4.0.2: - resolution: {integrity: sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.72.1 - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - swc-loader@0.2.6: - resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} - peerDependencies: - '@swc/core': ^1.2.147 - webpack: '>=2' - - tailwindcss@3.4.15: - resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} - engines: {node: '>=14.0.0'} - hasBin: true - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.36.0: - resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} - engines: {node: '>=10'} - hasBin: true - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tree-dump@1.0.2: - resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - - unionfs@4.5.4: - resolution: {integrity: sha512-qI3RvJwwdFcWUdZz1dWgAyLSfGlY2fS2pstvwkZBUTnkxjcnIvzriBLtqJTKz9FtArAvJeiVCqHlxhOw8Syfyw==} - - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} - engines: {node: '>=10.13.0'} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack@5.96.1: - resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@alloc/quick-lru@5.2.0': {} - - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.7 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.1': {} - - '@grpc/grpc-js@1.12.2': - dependencies: - '@grpc/proto-loader': 0.7.13 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.7.13': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.2.3 - protobufjs: 7.4.0 - yargs: 17.7.2 - - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@js-sdsl/ordered-map@4.4.2': {} - - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@1.1.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@next/env@14.2.13': {} - - '@next/eslint-plugin-next@14.2.13': - dependencies: - glob: 10.3.10 - - '@next/swc-darwin-arm64@14.2.13': - optional: true - - '@next/swc-darwin-x64@14.2.13': - optional: true - - '@next/swc-linux-arm64-gnu@14.2.13': - optional: true - - '@next/swc-linux-arm64-musl@14.2.13': - optional: true - - '@next/swc-linux-x64-gnu@14.2.13': - optional: true - - '@next/swc-linux-x64-musl@14.2.13': - optional: true - - '@next/swc-win32-arm64-msvc@14.2.13': - optional: true - - '@next/swc-win32-ia32-msvc@14.2.13': - optional: true - - '@next/swc-win32-x64-msvc@14.2.13': - optional: true - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@nolyfill/is-core-module@1.0.39': {} - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@restackio/ai@0.0.85(@swc/helpers@0.5.11)': - dependencies: - '@temporalio/activity': 1.11.5 - '@temporalio/client': 1.11.5 - '@temporalio/worker': 1.11.5(@swc/helpers@0.5.11) - '@temporalio/workflow': 1.11.5 - transitivePeerDependencies: - - '@swc/helpers' - - esbuild - - uglify-js - - webpack-cli - - '@rtsao/scc@1.1.0': {} - - '@rushstack/eslint-patch@1.10.4': {} - - '@swc/core-darwin-arm64@1.9.2': - optional: true - - '@swc/core-darwin-x64@1.9.2': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.9.2': - optional: true - - '@swc/core-linux-arm64-gnu@1.9.2': - optional: true - - '@swc/core-linux-arm64-musl@1.9.2': - optional: true - - '@swc/core-linux-x64-gnu@1.9.2': - optional: true - - '@swc/core-linux-x64-musl@1.9.2': - optional: true - - '@swc/core-win32-arm64-msvc@1.9.2': - optional: true - - '@swc/core-win32-ia32-msvc@1.9.2': - optional: true - - '@swc/core-win32-x64-msvc@1.9.2': - optional: true - - '@swc/core@1.9.2(@swc/helpers@0.5.11)': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.17 - optionalDependencies: - '@swc/core-darwin-arm64': 1.9.2 - '@swc/core-darwin-x64': 1.9.2 - '@swc/core-linux-arm-gnueabihf': 1.9.2 - '@swc/core-linux-arm64-gnu': 1.9.2 - '@swc/core-linux-arm64-musl': 1.9.2 - '@swc/core-linux-x64-gnu': 1.9.2 - '@swc/core-linux-x64-musl': 1.9.2 - '@swc/core-win32-arm64-msvc': 1.9.2 - '@swc/core-win32-ia32-msvc': 1.9.2 - '@swc/core-win32-x64-msvc': 1.9.2 - '@swc/helpers': 0.5.11 - - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.11': - dependencies: - tslib: 2.8.1 - optional: true - - '@swc/helpers@0.5.5': - dependencies: - '@swc/counter': 0.1.3 - tslib: 2.8.1 - - '@swc/types@0.1.17': - dependencies: - '@swc/counter': 0.1.3 - - '@temporalio/activity@1.11.5': - dependencies: - '@temporalio/common': 1.11.5 - abort-controller: 3.0.0 - - '@temporalio/client@1.11.5': - dependencies: - '@grpc/grpc-js': 1.12.2 - '@temporalio/common': 1.11.5 - '@temporalio/proto': 1.11.5 - abort-controller: 3.0.0 - long: 5.2.3 - uuid: 9.0.1 - - '@temporalio/common@1.11.5': - dependencies: - '@temporalio/proto': 1.11.5 - long: 5.2.3 - ms: 3.0.0-canary.1 - proto3-json-serializer: 2.0.2 - - '@temporalio/core-bridge@1.11.5': - dependencies: - '@temporalio/common': 1.11.5 - arg: 5.0.2 - cargo-cp-artifact: 0.1.9 - which: 4.0.0 - - '@temporalio/proto@1.11.5': - dependencies: - long: 5.2.3 - protobufjs: 7.4.0 - - '@temporalio/worker@1.11.5(@swc/helpers@0.5.11)': - dependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.11) - '@temporalio/activity': 1.11.5 - '@temporalio/client': 1.11.5 - '@temporalio/common': 1.11.5 - '@temporalio/core-bridge': 1.11.5 - '@temporalio/proto': 1.11.5 - '@temporalio/workflow': 1.11.5 - abort-controller: 3.0.0 - heap-js: 2.5.0 - memfs: 4.14.0 - rxjs: 7.8.1 - source-map: 0.7.4 - source-map-loader: 4.0.2(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11))) - supports-color: 8.1.1 - swc-loader: 0.2.6(@swc/core@1.9.2(@swc/helpers@0.5.11))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11))) - unionfs: 4.5.4 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11)) - transitivePeerDependencies: - - '@swc/helpers' - - esbuild - - uglify-js - - webpack-cli - - '@temporalio/workflow@1.11.5': - dependencies: - '@temporalio/common': 1.11.5 - '@temporalio/proto': 1.11.5 - - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.6 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - - '@types/estree@1.0.6': {} - - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/node@20.17.6': - dependencies: - undici-types: 6.19.8 - - '@types/prop-types@15.7.13': {} - - '@types/react-dom@18.3.1': - dependencies: - '@types/react': 18.3.12 - - '@types/react@18.3.12': - dependencies: - '@types/prop-types': 15.7.13 - csstype: 3.1.3 - - '@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.15.0 - '@typescript-eslint/type-utils': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/utils': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.15.0 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.15.0 - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.15.0 - debug: 4.3.7 - eslint: 8.57.1 - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.15.0': - dependencies: - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/visitor-keys': 8.15.0 - - '@typescript-eslint/type-utils@8.15.0(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - debug: 4.3.7 - eslint: 8.57.1 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.15.0': {} - - '@typescript-eslint/typescript-estree@8.15.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/visitor-keys': 8.15.0 - debug: 4.3.7 - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.15.0(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.15.0 - '@typescript-eslint/types': 8.15.0 - '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.15.0': - dependencies: - '@typescript-eslint/types': 8.15.0 - eslint-visitor-keys: 4.2.0 - - '@ungap/structured-clone@1.2.0': {} - - '@webassemblyjs/ast@1.14.1': - dependencies: - '@webassemblyjs/helper-numbers': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - - '@webassemblyjs/helper-api-error@1.13.2': {} - - '@webassemblyjs/helper-buffer@1.14.1': {} - - '@webassemblyjs/helper-numbers@1.13.2': - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.13.2 - '@webassemblyjs/helper-api-error': 1.13.2 - '@xtuc/long': 4.2.2 - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - - '@webassemblyjs/helper-wasm-section@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/wasm-gen': 1.14.1 - - '@webassemblyjs/ieee754@1.13.2': - dependencies: - '@xtuc/ieee754': 1.2.0 - - '@webassemblyjs/leb128@1.13.2': - dependencies: - '@xtuc/long': 4.2.2 - - '@webassemblyjs/utf8@1.13.2': {} - - '@webassemblyjs/wasm-edit@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/helper-wasm-section': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-opt': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wast-printer': 1.14.1 - - '@webassemblyjs/wasm-gen@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - - '@webassemblyjs/wasm-opt@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - - '@webassemblyjs/wasm-parser@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-api-error': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - - '@webassemblyjs/wast-printer@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@xtuc/long': 4.2.2 - - '@xtuc/ieee754@1.2.0': {} - - '@xtuc/long@4.2.2': {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - acorn-jsx@5.3.2(acorn@8.14.0): - dependencies: - acorn: 8.14.0 - - acorn@8.14.0: {} - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@2.0.1: {} - - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-shim-unscopables: 1.0.2 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - ast-types-flow@0.0.8: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - axe-core@4.10.2: {} - - axobject-query@4.1.0: {} - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.24.2: - dependencies: - caniuse-lite: 1.0.30001683 - electron-to-chromium: 1.5.63 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) - - buffer-from@1.1.2: {} - - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - callsites@3.1.0: {} - - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001683: {} - - cargo-cp-artifact@0.1.9: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chrome-trace-event@1.0.4: {} - - client-only@0.0.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - commander@2.20.3: {} - - commander@4.1.1: {} - - concat-map@0.0.1: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssesc@3.0.0: {} - - csstype@3.1.3: {} - - damerau-levenshtein@1.0.8: {} - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.7: - dependencies: - ms: 2.1.3 - - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - eastasianwidth@0.2.0: {} - - electron-to-chromium@1.5.63: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - enhanced-resolve@5.17.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - es-abstract@1.23.5: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.3 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 - - es-module-lexer@1.5.4: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - escalade@3.2.0: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-next@14.2.13(eslint@8.57.1)(typescript@5.6.3): - dependencies: - '@next/eslint-plugin-next': 14.2.13 - '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-react: 7.37.2(eslint@8.57.1) - eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.3.7 - enhanced-resolve: 5.17.1 - eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) - fast-glob: 3.3.2 - get-tsconfig: 4.8.1 - is-bun-module: 1.2.1 - is-glob: 4.0.3 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - string.prototype.trimend: 1.0.8 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): - dependencies: - aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.10.2 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.57.1 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 - string.prototype.includes: 2.0.1 - - eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-react@7.37.2(eslint@8.57.1): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.0 - eslint: 8.57.1 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - string.prototype.repeat: 1.0.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.3.7 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - event-target-shim@5.0.1: {} - - events@3.3.0: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.2 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.3.2: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - fs-monkey@1.0.6: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - get-tsconfig@4.8.1: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob-to-regexp@0.4.1: {} - - glob@10.3.10: - dependencies: - foreground-child: 3.3.0 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - has-bigints@1.0.2: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - heap-js@2.5.0: {} - - hyperdyperid@1.2.0: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ignore@5.3.2: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-bun-module@1.2.1: - dependencies: - semver: 7.6.3 - - is-callable@1.2.7: {} - - is-core-module@2.15.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.0.2: - dependencies: - call-bind: 1.0.7 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakmap@2.0.2: {} - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - is-weakset@2.0.3: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - iterator.prototype@1.1.3: - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jest-worker@27.5.1: - dependencies: - '@types/node': 20.17.6 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jiti@1.21.6: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lilconfig@2.1.0: {} - - lilconfig@3.1.2: {} - - lines-and-columns@1.2.4: {} - - loader-runner@4.3.0: {} - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.camelcase@4.3.0: {} - - lodash.merge@4.6.2: {} - - long@5.2.3: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@10.4.3: {} - - memfs@4.14.0: - dependencies: - '@jsonjoy.com/json-pack': 1.1.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) - tree-dump: 1.0.2(tslib@2.8.1) - tslib: 2.8.1 - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - minipass@7.1.2: {} - - ms@2.1.3: {} - - ms@3.0.0-canary.1: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.7: {} - - natural-compare@1.4.0: {} - - neo-async@2.6.2: {} - - next@14.2.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@next/env': 14.2.13 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001683 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 14.2.13 - '@next/swc-darwin-x64': 14.2.13 - '@next/swc-linux-arm64-gnu': 14.2.13 - '@next/swc-linux-arm64-musl': 14.2.13 - '@next/swc-linux-x64-gnu': 14.2.13 - '@next/swc-linux-x64-musl': 14.2.13 - '@next/swc-win32-arm64-msvc': 14.2.13 - '@next/swc-win32-ia32-msvc': 14.2.13 - '@next/swc-win32-x64-msvc': 14.2.13 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - node-releases@2.0.18: {} - - normalize-path@3.0.0: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.13.3: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.entries@1.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - pify@2.3.0: {} - - pirates@4.0.6: {} - - possible-typed-array-names@1.0.0: {} - - postcss-import@15.1.0(postcss@8.4.49): - dependencies: - postcss: 8.4.49 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-js@4.0.1(postcss@8.4.49): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.49 - - postcss-load-config@4.0.2(postcss@8.4.49): - dependencies: - lilconfig: 3.1.2 - yaml: 2.6.1 - optionalDependencies: - postcss: 8.4.49 - - postcss-nested@6.2.0(postcss@8.4.49): - dependencies: - postcss: 8.4.49 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.4.31: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.4.49: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prelude-ls@1.2.1: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proto3-json-serializer@2.0.2: - dependencies: - protobufjs: 7.4.0 - - protobufjs@7.4.0: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 20.17.6 - long: 5.2.3 - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - react-dom@18.3.1(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - - react-is@16.13.1: {} - - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - reflect.getprototypeof@1.0.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 - - regexp.prototype.flags@1.5.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - require-directory@2.1.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.1: - dependencies: - tslib: 2.8.1 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - safer-buffer@2.1.2: {} - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - schema-utils@3.3.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - semver@6.3.1: {} - - semver@7.6.3: {} - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.3 - - signal-exit@4.1.0: {} - - source-map-js@1.2.1: {} - - source-map-loader@4.0.2(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11))): - dependencies: - iconv-lite: 0.6.3 - source-map-js: 1.2.1 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11)) - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.4: {} - - streamsearch@1.1.0: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.3 - set-function-name: 2.0.2 - side-channel: 1.0.6 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.5 - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.5 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - styled-jsx@5.1.1(react@18.3.1): - dependencies: - client-only: 0.0.1 - react: 18.3.1 - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - swc-loader@0.2.6(@swc/core@1.9.2(@swc/helpers@0.5.11))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11))): - dependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.11) - '@swc/counter': 0.1.3 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11)) - - tailwindcss@3.4.15: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-nested: 6.2.0(postcss@8.4.49) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - tapable@2.2.1: {} - - terser-webpack-plugin@5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.11))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11))): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11)) - optionalDependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.11) - - terser@5.36.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - text-table@0.2.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - thingies@1.21.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tree-dump@1.0.2(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - ts-api-utils@1.4.0(typescript@5.6.3): - dependencies: - typescript: 5.6.3 - - ts-interface-checker@0.1.13: {} - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.1: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typescript@5.6.3: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - undici-types@6.19.8: {} - - unionfs@4.5.4: - dependencies: - fs-monkey: 1.0.6 - - update-browserslist-db@1.1.1(browserslist@4.24.2): - dependencies: - browserslist: 4.24.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - util-deprecate@1.0.2: {} - - uuid@9.0.1: {} - - watchpack@2.4.2: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - - webpack-sources@3.2.3: {} - - webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11)): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - browserslist: 4.24.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.11))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.11))) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-builtin-type@1.1.4: - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.3 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@4.0.0: - dependencies: - isexe: 3.1.1 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrappy@1.0.2: {} - - y18n@5.0.8: {} - - yaml@2.6.1: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yocto-queue@0.1.0: {} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/postcss.config.mjs b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/postcss.config.mjs deleted file mode 100644 index 1a69fd2..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/postcss.config.mjs +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('postcss-load-config').Config} */ -const config = { - plugins: { - tailwindcss: {}, - }, -}; - -export default config; diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/actions/schedule.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/actions/schedule.ts deleted file mode 100644 index 8185909..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/actions/schedule.ts +++ /dev/null @@ -1,37 +0,0 @@ -"use server"; -import Restack from "@restackio/ai"; -import { Example } from "../components/examplesList"; - -const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); - -export async function scheduleWorkflow( - workflowName: Example["workflowName"], - input: Example["input"] -) { - if (!workflowName || !input) { - throw new Error("Workflow name and input are required"); - } - - const workflowId = `${Date.now()}-${workflowName.toString()}`; - - const runId = await client.scheduleWorkflow({ - workflowName: workflowName as string, - workflowId, - input, - }); - - const result = await client.getWorkflowResult({ - workflowId, - runId, - }); - - return result; -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/components/Examples.tsx b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/components/Examples.tsx deleted file mode 100644 index bf04b18..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/components/Examples.tsx +++ /dev/null @@ -1,52 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { Example, examples } from "./examplesList"; -import { scheduleWorkflow } from "@/app/actions/schedule"; - -const Examples = () => { - const [loading, setLoading] = useState(false); - const [output, setOutput] = useState({}); - - const handleButtonClick = async (example: Example) => { - setLoading(true); - setOutput({}); - try { - const result = await scheduleWorkflow(example.workflowName, example.input); - setOutput(result); - } catch (error) { - console.error("Error scheduling workflow:", error); - setOutput("Error scheduling workflow"); - } finally { - setLoading(false); - } - }; - - return ( -
- {examples.map((example, index) => ( -
-

{example.name}

-

{example.description}

- -
- ))} - {output && ( -
-

Output:

-
-            {JSON.stringify(output, null, 2)}
-          
-
- )} -
- ); -}; - -export default Examples; diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/components/examplesList.tsx b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/components/examplesList.tsx deleted file mode 100644 index 4706554..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/components/examplesList.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export type Example = { - name: string; - description: string; - integrations: string[]; - workflowName: string; - input: Record; -}; - -export const examples = [ - { - name: "RSS Digest Example", - description: "Example workflow to generate a daily digest from an RSS feed", - integrations: ["openbabylon"], - workflowName: "rssDigest", - input: { url: "https://www.pravda.com.ua/rss/" }, - }, -]; diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/favicon.ico b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/favicon.ico and /dev/null differ diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/fonts/GeistMonoVF.woff b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/fonts/GeistMonoVF.woff deleted file mode 100644 index f2ae185..0000000 Binary files a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/fonts/GeistMonoVF.woff and /dev/null differ diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/fonts/GeistVF.woff b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/fonts/GeistVF.woff deleted file mode 100644 index 1b62daa..0000000 Binary files a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/fonts/GeistVF.woff and /dev/null differ diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/globals.css b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/globals.css deleted file mode 100644 index 13d40b8..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/globals.css +++ /dev/null @@ -1,27 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - -body { - color: var(--foreground); - background: var(--background); - font-family: Arial, Helvetica, sans-serif; -} - -@layer utilities { - .text-balance { - text-wrap: balance; - } -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/layout.tsx b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/layout.tsx deleted file mode 100644 index a36cde0..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/layout.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { Metadata } from "next"; -import localFont from "next/font/local"; -import "./globals.css"; - -const geistSans = localFont({ - src: "./fonts/GeistVF.woff", - variable: "--font-geist-sans", - weight: "100 900", -}); -const geistMono = localFont({ - src: "./fonts/GeistMonoVF.woff", - variable: "--font-geist-mono", - weight: "100 900", -}); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/page.tsx b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/page.tsx deleted file mode 100644 index 3832ed7..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/src/app/page.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import Image from "next/image"; -import Examples from "./components/Examples"; // Import the Examples component - -export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Use Restack Engine SDK with{" "} - - @restackio/ai - -
  2. -
  3. - See how to schedule a workflow on - - src/app/actions/schedule.ts - - . -
  4. -
- {/* Use the Examples component */} -
- -
- ); -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/tailwind.config.ts b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/tailwind.config.ts deleted file mode 100644 index 021c393..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/tailwind.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Config } from "tailwindcss"; - -const config: Config = { - content: [ - "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", - "./src/components/**/*.{js,ts,jsx,tsx,mdx}", - "./src/app/**/*.{js,ts,jsx,tsx,mdx}", - ], - theme: { - extend: { - colors: { - background: "var(--background)", - foreground: "var(--foreground)", - }, - }, - }, - plugins: [], -}; -export default config; diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/tsconfig.json b/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/tsconfig.json deleted file mode 100644 index 7b28589..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/frontend/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/package.json b/community/hackathons/defense_quickstart_news_scraper_summarizer/package.json deleted file mode 100644 index 9ea1d86..0000000 --- a/community/hackathons/defense_quickstart_news_scraper_summarizer/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "defense_quickstart_news_scraper_summarizer", - "version": "1.0.0", - "description": "This repository is a quickstart example for using Restack AI to scrape news articles and summarize them.", - "main": "restack_up.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "restack:up": "dotenv -e .env node restack_up.js" - }, - "type": "module", - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "dotenv-cli": "^7.4.2" - } -} \ No newline at end of file diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/restack-cloud-overview.png b/community/hackathons/defense_quickstart_news_scraper_summarizer/restack-cloud-overview.png deleted file mode 100644 index 3e5cfc4..0000000 Binary files a/community/hackathons/defense_quickstart_news_scraper_summarizer/restack-cloud-overview.png and /dev/null differ diff --git a/community/hackathons/defense_quickstart_news_scraper_summarizer/restack-engine-ui.png b/community/hackathons/defense_quickstart_news_scraper_summarizer/restack-engine-ui.png deleted file mode 100644 index b9a1891..0000000 Binary files a/community/hackathons/defense_quickstart_news_scraper_summarizer/restack-engine-ui.png and /dev/null differ diff --git a/community/nextjs/.env.Example b/community/nextjs/.env.Example deleted file mode 100644 index ef05ee5..0000000 --- a/community/nextjs/.env.Example +++ /dev/null @@ -1,7 +0,0 @@ -# Restack - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= \ No newline at end of file diff --git a/community/nextjs/.eslintrc.json b/community/nextjs/.eslintrc.json deleted file mode 100644 index 3722418..0000000 --- a/community/nextjs/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["next/core-web-vitals", "next/typescript"] -} diff --git a/community/nextjs/.gitignore b/community/nextjs/.gitignore deleted file mode 100644 index fd3dbb5..0000000 --- a/community/nextjs/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/community/nextjs/README.md b/community/nextjs/README.md deleted file mode 100644 index 4578073..0000000 --- a/community/nextjs/README.md +++ /dev/null @@ -1,40 +0,0 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. -``` -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` -# Schedule Restack workflow from NextJS frontend - -The example is a NextJS application with front and backend. You can schedule the workflow example from the user interface. - -![Example UI](./restack-examples-ts-nextjs.png) - -When the client successfully schedules the workflow, you can see the started workflow in the Restack Web UI. You should see the following screen: - -![Success Web UI](./restack-examples-ts-nextjs-web-ui.png) - -Now you can add a backend to the example. In other examples, you can see how to ideally structure the backend app with workflows, functions and services. - diff --git a/community/nextjs/next.config.mjs b/community/nextjs/next.config.mjs deleted file mode 100644 index e6b8205..0000000 --- a/community/nextjs/next.config.mjs +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - serverComponentsExternalPackages: ['@restackio/ai'], - }, -} -export default nextConfig; diff --git a/community/nextjs/package.json b/community/nextjs/package.json deleted file mode 100644 index 5696b9a..0000000 --- a/community/nextjs/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "nextjs", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "clean": "rm -rf node_modules" - }, - "dependencies": { - "@restackio/ai": "^0.0.85", - "dotenv": "^16.4.5", - "next": "14.2.13", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.13", - "postcss": "^8", - "tailwindcss": "^3.4.1", - "typescript": "^5" - } -} diff --git a/community/nextjs/postcss.config.mjs b/community/nextjs/postcss.config.mjs deleted file mode 100644 index 1a69fd2..0000000 --- a/community/nextjs/postcss.config.mjs +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('postcss-load-config').Config} */ -const config = { - plugins: { - tailwindcss: {}, - }, -}; - -export default config; diff --git a/community/nextjs/restack-examples-ts-nextjs-web-ui.png b/community/nextjs/restack-examples-ts-nextjs-web-ui.png deleted file mode 100644 index 4adb8a9..0000000 Binary files a/community/nextjs/restack-examples-ts-nextjs-web-ui.png and /dev/null differ diff --git a/community/nextjs/restack-examples-ts-nextjs.png b/community/nextjs/restack-examples-ts-nextjs.png deleted file mode 100644 index e20db8e..0000000 Binary files a/community/nextjs/restack-examples-ts-nextjs.png and /dev/null differ diff --git a/community/nextjs/src/app/actions/trigger.ts b/community/nextjs/src/app/actions/trigger.ts deleted file mode 100644 index 63b98c4..0000000 --- a/community/nextjs/src/app/actions/trigger.ts +++ /dev/null @@ -1,37 +0,0 @@ -"use server"; -import Restack from "@restackio/ai"; -import { Example } from "../components/examplesList"; - -const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); - -export async function triggerWorkflow( - workflowName: Example["workflowName"], - input: Example["input"] -) { - if (!workflowName || !input) { - throw new Error("Workflow name and input are required"); - } - - const workflowId = `${Date.now()}-${workflowName.toString()}`; - - const runId = await client.scheduleWorkflow({ - workflowName: workflowName as string, - workflowId, - input, - }); - - const result = await client.getWorkflowResult({ - workflowId, - runId, - }); - - return result; -} diff --git a/community/nextjs/src/app/components/Examples.tsx b/community/nextjs/src/app/components/Examples.tsx deleted file mode 100644 index 1027950..0000000 --- a/community/nextjs/src/app/components/Examples.tsx +++ /dev/null @@ -1,52 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { Example, examples } from "./examplesList"; -import { triggerWorkflow } from "@/app/actions/Trigger"; - -const Examples = () => { - const [loading, setLoading] = useState(false); - const [output, setOutput] = useState({}); - - const handleButtonClick = async (example: Example) => { - setLoading(true); - setOutput({}); - try { - const result = await triggerWorkflow(example.workflowName, example.input); - setOutput(result); - } catch (error) { - console.error("Error triggering workflow:", error); - setOutput("Error triggering workflow"); - } finally { - setLoading(false); - } - }; - - return ( -
- {examples.map((example, index) => ( -
-

{example.name}

-

{example.description}

- -
- ))} - {output && ( -
-

Output:

-
-            {JSON.stringify(output, null, 2)}
-          
-
- )} -
- ); -}; - -export default Examples; diff --git a/community/nextjs/src/app/components/examplesList.tsx b/community/nextjs/src/app/components/examplesList.tsx deleted file mode 100644 index 9a0542a..0000000 --- a/community/nextjs/src/app/components/examplesList.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export type Example = { - name: string; - description: string; - integrations: string[]; - workflowName: string; - input: Record; -}; - -export const examples = [ - { - name: "Hello world", - description: "Example workflow to say hello and goodbye", - integrations: ["openai"], - workflowName: "helloWorkflow", - input: { name: "test" }, - }, -]; diff --git a/community/nextjs/src/app/favicon.ico b/community/nextjs/src/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/community/nextjs/src/app/favicon.ico and /dev/null differ diff --git a/community/nextjs/src/app/fonts/GeistMonoVF.woff b/community/nextjs/src/app/fonts/GeistMonoVF.woff deleted file mode 100644 index f2ae185..0000000 Binary files a/community/nextjs/src/app/fonts/GeistMonoVF.woff and /dev/null differ diff --git a/community/nextjs/src/app/fonts/GeistVF.woff b/community/nextjs/src/app/fonts/GeistVF.woff deleted file mode 100644 index 1b62daa..0000000 Binary files a/community/nextjs/src/app/fonts/GeistVF.woff and /dev/null differ diff --git a/community/nextjs/src/app/globals.css b/community/nextjs/src/app/globals.css deleted file mode 100644 index 13d40b8..0000000 --- a/community/nextjs/src/app/globals.css +++ /dev/null @@ -1,27 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - -body { - color: var(--foreground); - background: var(--background); - font-family: Arial, Helvetica, sans-serif; -} - -@layer utilities { - .text-balance { - text-wrap: balance; - } -} diff --git a/community/nextjs/src/app/layout.tsx b/community/nextjs/src/app/layout.tsx deleted file mode 100644 index a36cde0..0000000 --- a/community/nextjs/src/app/layout.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { Metadata } from "next"; -import localFont from "next/font/local"; -import "./globals.css"; - -const geistSans = localFont({ - src: "./fonts/GeistVF.woff", - variable: "--font-geist-sans", - weight: "100 900", -}); -const geistMono = localFont({ - src: "./fonts/GeistMonoVF.woff", - variable: "--font-geist-mono", - weight: "100 900", -}); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/community/nextjs/src/app/page.tsx b/community/nextjs/src/app/page.tsx deleted file mode 100644 index 8897389..0000000 --- a/community/nextjs/src/app/page.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import Image from "next/image"; -import Examples from "./components/Examples"; // Import the Examples component - -export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Use Restack Engine SDK with{" "} - - @restackio/ai - -
  2. -
  3. - See how to trigger on - - src/app/actions/trigger.tsx - - . -
  4. -
- {/* Use the Examples component */} -
- -
- ); -} diff --git a/community/nextjs/tailwind.config.ts b/community/nextjs/tailwind.config.ts deleted file mode 100644 index 021c393..0000000 --- a/community/nextjs/tailwind.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Config } from "tailwindcss"; - -const config: Config = { - content: [ - "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", - "./src/components/**/*.{js,ts,jsx,tsx,mdx}", - "./src/app/**/*.{js,ts,jsx,tsx,mdx}", - ], - theme: { - extend: { - colors: { - background: "var(--background)", - foreground: "var(--foreground)", - }, - }, - }, - plugins: [], -}; -export default config; diff --git a/community/nextjs/tsconfig.json b/community/nextjs/tsconfig.json deleted file mode 100644 index 7b28589..0000000 --- a/community/nextjs/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/community/openai/.env.example b/community/openai/.env.example deleted file mode 100644 index adccfc3..0000000 --- a/community/openai/.env.example +++ /dev/null @@ -1,9 +0,0 @@ -OPENAI_API_KEY= - -# Restack - -RESTACK_ENGINE_ID= -RESTACK_ENGINE_ADDRESS= -RESTACK_ENGINE_API_KEY= - -RESTACK_CLOUD_TOKEN= \ No newline at end of file diff --git a/community/openai/package.json b/community/openai/package.json deleted file mode 100644 index 3dd22ed..0000000 --- a/community/openai/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "ts-example-openai", - "version": "1.0.0", - "description": "Basic OpenAI example with Restack TypeScript library", - "main": "index.js", - "scripts": { - "start": "ts-node src/services.ts", - "start.watch": "nodemon src/services.ts", - "dev": "npm run start.watch", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "schedule": "ts-node ./scheduleWorkflow.ts" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "dependencies": { - "@restackio/ai": "^0.0.109", - "@temporalio/workflow": "^1.11.6", - "dotenv": "^16.4.5", - "openai": "^4.71.1", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.3" - }, - "devDependencies": { - "@types/node": "^20.16.9", - "nodemon": "^2.0.22", - "ts-node": "^10.9.2" - } -} diff --git a/community/openai/readme.md b/community/openai/readme.md deleted file mode 100644 index 62c7261..0000000 --- a/community/openai/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# Requirements - -- Node 20 or higher - -```bash -brew install nvm -nvm use 20 -``` - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -``` -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -# Start services - -Where all your code is defined, including workflow steps. - -add OPENAI_API_KEY in .env - -```bash -npm i -npm run build -npm run dev -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -This will start a 'restack' service for workflows and functions, and an 'openai' service for OpenAI functions. - -# Schedule a workflow - -In another shell: - -```bash -npm schedule -``` - -Will schedule to start example workflow immediately. Learn more about [workflows](https://docs.restack.io/features/workflows) - -# Architecture - -```mermaid -flowchart TD - C[fa:fa-bolt scheduleWorkflow client] -->|registers workflow with schedule| E{Restack Engine} - E --> |queries results| C - E -->|pulls queue with input| P1[fa:fa-ship restack pod] - E -->|orchestrates with rate limit| P2[fa:fa-ship openai pod] - P1 -->|runs| W[fa:fa-th-list example workflow] - P1 -->|runs| Go[fa:fa-code goodbye function] - P2 -->|runs| Gr[fa:fa-code greet function] - P1 -->|sends status + output | E - P2 -->|sends status output | E -``` - -## Deploy on Restack - -For more detailed information on deploying your repository to Restack, refer to the [Restack Cloud deployment documentation](https://docs.restack.io/restack-cloud/deployrepo). diff --git a/community/openai/scheduleWorkflow.ts b/community/openai/scheduleWorkflow.ts deleted file mode 100644 index 085e08f..0000000 --- a/community/openai/scheduleWorkflow.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { client } from "./src/client"; - -export type InputSchedule = { - name: string; -}; - -async function scheduleWorkflow(input: InputSchedule) { - try { - const workflowId = `${Date.now()}-helloWorkflow`; - const runId = await client.scheduleWorkflow({ - workflowName: "helloWorkflow", - workflowId, - input, - }); - - const result = await client.getWorkflowResult({ workflowId, runId }); - - console.log("Workflow result:", result); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error("Error scheduling workflow:", error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - name: "test", -}); diff --git a/community/openai/src/client.ts b/community/openai/src/client.ts deleted file mode 100644 index b990acd..0000000 --- a/community/openai/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from "@restackio/ai"; - -import "dotenv/config"; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); diff --git a/community/openai/src/functions/goodbye.ts b/community/openai/src/functions/goodbye.ts deleted file mode 100644 index acf1d86..0000000 --- a/community/openai/src/functions/goodbye.ts +++ /dev/null @@ -1,11 +0,0 @@ -interface Input { - name: string; -} - -interface Output { - message: string; -} - -export async function goodbye(input: Input): Promise { - return { message: `Goodbye, ${input.name}!` }; -} diff --git a/community/openai/src/functions/index.ts b/community/openai/src/functions/index.ts deleted file mode 100644 index b2c7ee2..0000000 --- a/community/openai/src/functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./goodbye"; -export * from "./openai"; \ No newline at end of file diff --git a/community/openai/src/functions/openai/chat/completionsBase.ts b/community/openai/src/functions/openai/chat/completionsBase.ts deleted file mode 100644 index 0889059..0000000 --- a/community/openai/src/functions/openai/chat/completionsBase.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { FunctionFailure, log } from "@restackio/ai/function"; -import OpenAI from "openai/index"; -import { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions"; -import { openaiClient } from "../utils/client"; -import { openaiCost, Price } from "../utils/cost"; -import { ChatCompletion, ChatModel } from "openai/resources/index"; - -export type UsageOutput = { tokens: number; cost: number }; - -export type OpenAIChatInput = { - userContent: string; - systemContent?: string; - model?: ChatModel; - jsonSchema?: { - name: string; - schema: Record; - }; - price?: Price; - apiKey?: string; - params?: ChatCompletionCreateParamsNonStreaming; - tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; - toolChoice?: OpenAI.Chat.Completions.ChatCompletionToolChoiceOption; -}; - -export const openaiChatCompletionsBase = async ({ - userContent, - systemContent = "", - model = "gpt-4o-mini", - jsonSchema, - price, - apiKey, - params, - tools, - toolChoice, -}: OpenAIChatInput): Promise<{ result: ChatCompletion; cost?: number }> => { - try { - const openai = openaiClient({ apiKey }); - - const isO1Model = model.startsWith("o1-"); - - const o1ModelParams = { - temperature: 1, - top_p: 1, - frequency_penalty: 0, - presence_penalty: 0, - }; - - const chatParams: ChatCompletionCreateParamsNonStreaming = { - messages: [ - ...(systemContent ? [{ role: "system" as const, content: systemContent }] : []), - { role: "user" as const, content: userContent }, - ...(params?.messages ?? []), - ], - ...(jsonSchema && { - response_format: { - type: "json_schema", - json_schema: { - name: jsonSchema.name, - strict: true, - schema: jsonSchema.schema, - }, - }, - }), - model, - ...(tools && { tools }), - ...(toolChoice && { tool_choice: toolChoice }), - ...params, - ...(isO1Model && o1ModelParams), - }; - - log.debug("OpenAI chat completion params", { - chatParams, - }); - - const completion = await openai.chat.completions.create(chatParams); - - return { - result: completion, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: completion.usage?.prompt_tokens ?? 0, - output: completion.usage?.completion_tokens ?? 0, - }, - }), - }; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error OpenAI chat: ${error}`); - } -}; \ No newline at end of file diff --git a/community/openai/src/functions/openai/chat/completionsStream.ts b/community/openai/src/functions/openai/chat/completionsStream.ts deleted file mode 100644 index bcd9097..0000000 --- a/community/openai/src/functions/openai/chat/completionsStream.ts +++ /dev/null @@ -1,193 +0,0 @@ -import OpenAI from "openai/index"; -import { ChatCompletionChunk } from "openai/resources/chat/completions"; - -import Restack from "@restackio/ai"; -import { currentWorkflow, log } from "@restackio/ai/function"; - -import { StreamEvent, ToolCallEvent } from "../types/events"; - -import { aggregateStreamChunks } from "../utils/aggregateStream"; -import { mergeToolCalls } from "../utils/mergeToolCalls"; -import { openaiClient } from "../utils/client"; -import { openaiCost, Price } from "../utils/cost"; -import { SendWorkflowEvent } from "@restackio/ai/event"; -import { ChatModel } from "openai/resources/index"; - -export async function openaiChatCompletionsStream({ - model = "gpt-4o-mini", - userName, - newMessage, - assistantName, - messages = [], - tools, - toolEvent, - streamAtCharacter, - streamEvent, - apiKey, - price, -}: { - model?: ChatModel; - userName?: string; - newMessage?: string; - assistantName?: string; - messages?: OpenAI.Chat.Completions.ChatCompletionMessageParam[]; - tools?: OpenAI.Chat.Completions.ChatCompletionTool[]; - toolEvent?: { - workflowEventName: string; - workflow?: SendWorkflowEvent["workflow"]; - }; - streamAtCharacter?: string; - streamEvent?: { - workflowEventName: string; - workflow?: SendWorkflowEvent["workflow"]; - }; - apiKey?: string; - price?: Price; -}) { - const restack = new Restack(); - const workflow = currentWorkflow().workflowExecution; - - log.debug("workflow", { workflow }); - - if (newMessage) { - messages.push({ - role: "user", - name: userName, - content: newMessage, - }); - } - - const openai = openaiClient({ apiKey }); - const chatStream = await openai.chat.completions.create({ - model: model, - messages, - tools, - stream: true, - stream_options: { - include_usage: true, - }, - }); - - const [stream, streamEnd] = chatStream.tee(); - const readableStream = streamEnd.toReadableStream() as unknown as ReadableStream; - const aggregatedStream = await aggregateStreamChunks(readableStream); - - let finishReason: ChatCompletionChunk.Choice["finish_reason"]; - let response: ChatCompletionChunk.Choice.Delta["content"] = ""; - let tokensCountInput = 0; - let tokensCountOutput = 0; - - for await (const chunk of stream) { - let content = chunk.choices[0]?.delta?.content || ""; - finishReason = chunk.choices[0]?.finish_reason; - tokensCountInput += chunk.usage?.prompt_tokens ?? 0; - tokensCountOutput += chunk.usage?.completion_tokens ?? 0; - - if (finishReason === "tool_calls") { - const { toolCalls } = mergeToolCalls(aggregatedStream); - await Promise.all( - toolCalls.map((toolCall) => { - if (toolEvent) { - const functionArguments = JSON.parse( - toolCall.function?.arguments ?? "" - ); - - const input: ToolCallEvent = { - ...toolCall, - function: { - name: toolCall.function?.name ?? "", - input: functionArguments, - }, - assistantName, - }; - - if (toolEvent) { - const workflowEvent = { - event: { - name: toolEvent.workflowEventName, - input, - }, - workflow: { - ...workflow, - ...toolEvent.workflow, - }, - }; - log.debug("toolEvent sendWorkflowEvent", { workflowEvent }); - - restack.sendWorkflowEvent(workflowEvent); - } - } - }) - ); - return { - result: { - messages, - toolCalls, - }, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: tokensCountInput, - output: tokensCountOutput, - }, - }), - }; - } else { - response += content; - if ( - content.trim().slice(-1) === streamAtCharacter || - finishReason === "stop" - ) { - if (response.length) { - const input: StreamEvent = { - chunkId: chunk.id, - response, - assistantName, - isLast: finishReason === "stop", - }; - if (streamEvent) { - const workflowEvent = { - event: { - name: streamEvent.workflowEventName, - input, - }, - workflow: { - ...workflow, - ...streamEvent.workflow, - }, - }; - log.debug("streamEvent sendWorkflowEvent", { workflowEvent }); - restack.sendWorkflowEvent(workflowEvent); - } - } - } - - if (finishReason === "stop") { - const newMessage: OpenAI.Chat.Completions.ChatCompletionMessageParam = { - content: response, - role: "assistant", - name: assistantName, - }; - - messages.push(newMessage); - - return { - result: { - messages, - }, - cost: - price && - openaiCost({ - price, - tokensCount: { - input: tokensCountInput, - output: tokensCountOutput, - }, - }), - }; - } - } - } -} diff --git a/community/openai/src/functions/openai/chat/index.ts b/community/openai/src/functions/openai/chat/index.ts deleted file mode 100644 index 3cb4077..0000000 --- a/community/openai/src/functions/openai/chat/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./completionsBase"; -export * from "./completionsStream"; diff --git a/community/openai/src/functions/openai/index.ts b/community/openai/src/functions/openai/index.ts deleted file mode 100644 index 6a947d6..0000000 --- a/community/openai/src/functions/openai/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./chat"; -export * from "./thread"; diff --git a/community/openai/src/functions/openai/thread/createAssistant.ts b/community/openai/src/functions/openai/thread/createAssistant.ts deleted file mode 100644 index f893399..0000000 --- a/community/openai/src/functions/openai/thread/createAssistant.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ChatModel } from "openai/resources/index"; -import { FunctionFailure } from "@restackio/ai/function"; -import { Assistant, AssistantTool } from "openai/resources/beta/index"; - -import { openaiClient } from "../utils/client"; - -export async function createAssistant({ - apiKey, - name, - instructions, - model = "gpt-4o-mini", - tools = [], -}: { - apiKey: string; - name: string; - instructions: string; - tools?: AssistantTool[]; - model: ChatModel; -}): Promise { - try { - const openai = openaiClient({ apiKey }); - - const assistant = await openai.beta.assistants.create({ - name, - instructions, - model, - tools, - }); - - return assistant; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error creating assistant: ${error}`); - } -} diff --git a/community/openai/src/functions/openai/thread/createMessageOnThread.ts b/community/openai/src/functions/openai/thread/createMessageOnThread.ts deleted file mode 100644 index 63b4a24..0000000 --- a/community/openai/src/functions/openai/thread/createMessageOnThread.ts +++ /dev/null @@ -1,28 +0,0 @@ -import OpenAI from "openai/index"; -import { FunctionFailure } from "@restackio/ai/function"; - -import { openaiClient } from "../utils/client"; - -export async function createMessageOnThread({ - apiKey, - threadId, - content, - role, -}: { - apiKey: string; - threadId: string; - content: string; - role: OpenAI.Beta.Threads.MessageCreateParams["role"]; -}) { - try { - const openai = openaiClient({ apiKey }); - await openai.beta.threads.messages.create(threadId, { - role, - content, - }); - } catch (error) { - throw FunctionFailure.nonRetryable( - `Error creating message thread: ${error}` - ); - } -} diff --git a/community/openai/src/functions/openai/thread/createThread.ts b/community/openai/src/functions/openai/thread/createThread.ts deleted file mode 100644 index 5d29652..0000000 --- a/community/openai/src/functions/openai/thread/createThread.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Thread } from "openai/resources/beta/index"; - -import { openaiClient } from "../utils/client"; - -export async function createThread({ - apiKey, -}: { - apiKey: string; -}): Promise { - try { - const openai = openaiClient({ apiKey }); - const thread = await openai.beta.threads.create(); - - return thread; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error creating thread: ${error}`); - } -} diff --git a/community/openai/src/functions/openai/thread/index.ts b/community/openai/src/functions/openai/thread/index.ts deleted file mode 100644 index 0ef24eb..0000000 --- a/community/openai/src/functions/openai/thread/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./createAssistant"; -export * from "./createMessageOnThread"; -export * from "./createThread"; -export * from "./runThread"; diff --git a/community/openai/src/functions/openai/thread/runThread.ts b/community/openai/src/functions/openai/thread/runThread.ts deleted file mode 100644 index 57d17e6..0000000 --- a/community/openai/src/functions/openai/thread/runThread.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { FunctionFailure } from "@restackio/ai/function"; -import { Stream } from "openai/streaming"; -import { AssistantStreamEvent } from "openai/resources/beta/index"; -import { Run } from "openai/resources/beta/threads/runs/index"; - -import { openaiClient } from "../utils/client"; - -export async function runThread({ - apiKey, - threadId, - assistantId, - stream = false, -}: { - apiKey: string; - threadId: string; - assistantId: string; - stream: boolean; -}): Promise | Run> { - try { - const openai = openaiClient({ apiKey }); - - const run = await openai.beta.threads.runs.create(threadId, { - assistant_id: assistantId, - ...(stream && { stream }), - }); - - return run; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error running thread: ${error}`); - } -} \ No newline at end of file diff --git a/community/openai/src/functions/openai/types/events.ts b/community/openai/src/functions/openai/types/events.ts deleted file mode 100644 index 44b071b..0000000 --- a/community/openai/src/functions/openai/types/events.ts +++ /dev/null @@ -1,17 +0,0 @@ -import OpenAI from "openai/index"; - -export type StreamEvent = { - chunkId?: string; - response: string; - assistantName?: string; - isLast: boolean; -}; - -export type ToolCallEvent = - OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall & { - function: { - name: string; - input: JSON; - }; - assistantName?: string; - }; diff --git a/community/openai/src/functions/openai/types/index.ts b/community/openai/src/functions/openai/types/index.ts deleted file mode 100644 index 1784004..0000000 --- a/community/openai/src/functions/openai/types/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./events"; diff --git a/community/openai/src/functions/openai/utils/aggregateStream.ts b/community/openai/src/functions/openai/utils/aggregateStream.ts deleted file mode 100644 index 18a7d74..0000000 --- a/community/openai/src/functions/openai/utils/aggregateStream.ts +++ /dev/null @@ -1,26 +0,0 @@ -export async function aggregateStreamChunks(stream: ReadableStream) { - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - if (value) chunks.push(value); - } - - const aggregated = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - aggregated.set(chunk, offset); - offset += chunk.length; - } - - const textContent = new TextDecoder().decode(aggregated); - const jsonObjects = textContent - .split("\n") - .filter((line) => line.trim()) - .map((line) => JSON.parse(line)); - return jsonObjects; -} diff --git a/community/openai/src/functions/openai/utils/client.ts b/community/openai/src/functions/openai/utils/client.ts deleted file mode 100644 index 77fd385..0000000 --- a/community/openai/src/functions/openai/utils/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import OpenAI from "openai/index"; -import "dotenv/config"; - -let openaiInstance: OpenAI | null = null; - -export const openaiClient = ({ - apiKey = process.env.OPENAI_API_KEY, -}: { - apiKey?: string; -}): OpenAI => { - if (!apiKey) { - throw new Error("API key is required to create OpenAI client."); - } - - if (!openaiInstance) { - openaiInstance = new OpenAI({ - apiKey, - }); - } - return openaiInstance; -}; diff --git a/community/openai/src/functions/openai/utils/cost.ts b/community/openai/src/functions/openai/utils/cost.ts deleted file mode 100644 index 2724ab6..0000000 --- a/community/openai/src/functions/openai/utils/cost.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type TokensCount = { - input: number; - output: number; -}; - -export type Price = { - input: number; - output: number; -}; -export const openaiCost = ({ - tokensCount, - price, -}: { - tokensCount: TokensCount; - price: Price; -}): number => { - let cost = 0; - const { input: inputTokens, output: outputTokens } = tokensCount; - const { input: inputPrice, output: outputPrice } = price; - - cost = inputTokens * inputPrice + outputTokens * outputPrice; - - return cost; -}; diff --git a/community/openai/src/functions/openai/utils/index.ts b/community/openai/src/functions/openai/utils/index.ts deleted file mode 100644 index 0707ebb..0000000 --- a/community/openai/src/functions/openai/utils/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./aggregateStream"; -export * from "./client"; -export * from "./cost"; -export * from "./mergeToolCalls"; diff --git a/community/openai/src/functions/openai/utils/mergeToolCalls.ts b/community/openai/src/functions/openai/utils/mergeToolCalls.ts deleted file mode 100644 index 600170f..0000000 --- a/community/openai/src/functions/openai/utils/mergeToolCalls.ts +++ /dev/null @@ -1,31 +0,0 @@ -import OpenAI from "openai/index"; -import { ChatCompletionChunk } from "openai/resources/chat/completions.mjs"; - -export function mergeToolCalls(aggregatedStream: ChatCompletionChunk[]) { - const toolCalls: OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall[] = - []; - - aggregatedStream.forEach((chunk) => { - chunk.choices.forEach((choice) => { - if (choice.delta.tool_calls) { - choice.delta.tool_calls.forEach((toolCall) => { - const lastToolCall = toolCalls[toolCalls.length - 1]; - if (toolCall.id) { - toolCalls.push({ - ...toolCall, - function: { ...toolCall.function, arguments: "" }, - }); - } else if ( - lastToolCall && - lastToolCall.function && - toolCall.function?.arguments - ) { - lastToolCall.function.arguments += toolCall.function.arguments; - } - }); - } - }); - }); - - return { toolCalls }; -} diff --git a/community/openai/src/services.ts b/community/openai/src/services.ts deleted file mode 100644 index 850014f..0000000 --- a/community/openai/src/services.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { - goodbye, - openaiChatCompletionsBase, - openaiChatCompletionsStream, -} from "./functions"; -import { client } from "./client"; - -async function services() { - const workflowsPath = require.resolve("./workflows"); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { goodbye }, - }), - // Start the openai service - client.startService({ - taskQueue: "openai", - functions: { openaiChatCompletionsBase, openaiChatCompletionsStream }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/openai/src/workflows/hello.ts b/community/openai/src/workflows/hello.ts deleted file mode 100644 index 220009e..0000000 --- a/community/openai/src/workflows/hello.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { log, step } from "@restackio/ai/workflow"; -import * as functions from "../functions"; -import { z } from "zod"; -import zodToJsonSchema from "zod-to-json-schema"; - -interface Input { - name: string; -} - -export async function helloWorkflow({ name }: Input) { - const userContent = `Greet this person: ${name}. In 4 words or less.`; - - const MessageSchema = z.object({ - message: z.string().describe("The greeting message."), - }); - - const jsonSchema = { - name: "greet", - schema: zodToJsonSchema(MessageSchema), - }; - - // Step 1 create greeting message with openai - - const openaiOutput = await step({ - taskQueue: "openai", - }).openaiChatCompletionsBase({ - userContent, - jsonSchema, - }); - - const greetMessage = openaiOutput.result.choices[0].message.content ?? ""; - const greetCost = openaiOutput.cost; - - log.info("greeted", { greetMessage }); - - // Step 2 create goodbye message with simple function - - const { message: goodbyeMessage } = await step({}).goodbye({ - name, - }); - - log.info("goodbye", { goodbyeMessage }); - - return { - messages: [greetMessage, goodbyeMessage], - cost: greetCost, - }; -} diff --git a/community/openai/src/workflows/index.ts b/community/openai/src/workflows/index.ts deleted file mode 100644 index a132395..0000000 --- a/community/openai/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./hello"; diff --git a/community/openai/tsconfig.json b/community/openai/tsconfig.json deleted file mode 100644 index f4d02b9..0000000 --- a/community/openai/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} \ No newline at end of file diff --git a/community/sendgrid/.env.example b/community/sendgrid/.env.example deleted file mode 100644 index 731c2fe..0000000 --- a/community/sendgrid/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -FROM_EMAIL=email@example.com -SENDGRID_API_KEY=sendgrid-api-key -OPENAI_API_KEY=openai-api-key -TO_EMAIL=to-email@example.com diff --git a/community/sendgrid/package.json b/community/sendgrid/package.json deleted file mode 100644 index 762062f..0000000 --- a/community/sendgrid/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "email-sender", - "version": "1.0.0", - "main": "index.js", - "description": "Sending an email with Sengrid example", - "scripts": { - "start": "ts-node src/services.ts", - "start.watch": "nodemon src/services.ts", - "dev": "npm run start.watch", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "schedule": "ts-node ./scheduleWorkflow.ts", - "schedule-retries": "ts-node ./scheduleWorkflowRetries.ts" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "author": "Restack", - "license": "ISC", - "dependencies": { - "@restackio/ai": "^0.0.109", - "@sendgrid/mail": "^8.1.4", - "dotenv": "^16.4.6", - "openai": "^4.74.0" - }, - "devDependencies": { - "@types/node": "^22.10.1", - "nodemon": "^3.1.7", - "ts-node": "^10.9.2" - } -} diff --git a/community/sendgrid/readme.md b/community/sendgrid/readme.md deleted file mode 100644 index a58aa29..0000000 --- a/community/sendgrid/readme.md +++ /dev/null @@ -1,62 +0,0 @@ -# Overview - -This example showcases how to send emails with a Restack workflow using the sendgrid api. You can easily choose another email provider and update the code. -You can schedule two scenarios of the workflow. - -1. It will be successfull and send an email. -2. The email content generation step will fail once to showcase how Restack handles retries automatically. Once failure is caught, step will be retry automatically and rest of workflow will be executed as expected and email will be sent. - -# Requirements - -- Node 20 or higher - -```bash -brew install nvm -nvm use 20 -``` - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -```bash -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -# Start services - -Where all your code is defined, including workflow steps. - -add OPENAI_API_KEY, SENDGRID_API_KEY, FROM_EMAIL, TO_EMAIL in .env - -```bash -npm i -npm run build -npm run dev -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -# Schedule workflow to send email - -In another shell: - -```bash -npm run schedule -``` - -Will schedule to start example workflow immediately. The code for this is on `scheduleWorkflow.ts`. In here you can see how the sendEmailWorkflow is scheduled to be executed. - -# Schedule workflow to send email with simulated failure and retries - -In another shell: - -```bash -npm run schedule-retries -``` - -This will schedule the example workflow to start immediately. The code for this is in `scheduleWorkflowRetries.ts`. In this file, you can see how the `sendEmailWorkflow` is scheduled for execution. The step to generate email content is intentionally set to fail once, demonstrating how Restack automatically handles retries. After the first failure, the step will succeed on the next retry, and the remaining steps in the workflow will execute as expected. - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [Restack Console](https://console.restack.io) diff --git a/community/sendgrid/scheduleWorkflow.ts b/community/sendgrid/scheduleWorkflow.ts deleted file mode 100644 index 7af357a..0000000 --- a/community/sendgrid/scheduleWorkflow.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { client } from './src/client'; - -import 'dotenv/config'; - -type SendEmailWorkflowInput = { - emailContext: string; - subject: string; - to: string; -}; - -async function scheduleWorkflow(input: SendEmailWorkflowInput) { - try { - const workflowId = `${Date.now()}-sendEmailWorkflow`; - await client.scheduleWorkflow({ - workflowName: 'sendEmailWorkflow', - workflowId, - input, - }); - - console.log('Workflow scheduled successfully'); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error('Error scheduling workflow:', error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - emailContext: - 'This email should contain a greeting. And telling user we have launched a new AI feature with Restack workflows. Workflows now offer logging and automatic retries when one of its steps fails. Name of user is not provided. You can set as goodbye message on the email just say "Best regards" or something like that. No need to mention name of user or name of person sending the email.', - subject: 'Hello from Restack', - to: process.env.TO_EMAIL!, -}); diff --git a/community/sendgrid/scheduleWorkflowRetries.ts b/community/sendgrid/scheduleWorkflowRetries.ts deleted file mode 100644 index d160b2b..0000000 --- a/community/sendgrid/scheduleWorkflowRetries.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { client } from './src/client'; - -import 'dotenv/config'; - -type SendEmailWorkflowInput = { - emailContext: string; - subject: string; - to: string; -}; - -async function scheduleWorkflowWithRetries(input: SendEmailWorkflowInput) { - try { - const workflowId = `${Date.now()}-sendEmailWorkflow`; - await client.scheduleWorkflow({ - workflowName: 'sendEmailWorkflow', - workflowId, - input: { - ...input, - simulateFailure: true, - }, - }); - - console.log('Workflow scheduled successfully'); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error('Error scheduling workflow:', error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflowWithRetries({ - emailContext: - 'This email should contain a greeting. And telling user we have launched a new AI feature with Restack workflows. Workflows now offer logging and automatic retries when one of its steps fails. Name of user is not provided. You can set as goodbye message on the email just say "Best regards" or something like that. No need to mention name of user or name of person sending the email.', - subject: 'Hello from Restack', - to: process.env.TO_EMAIL!, -}); diff --git a/community/sendgrid/src/client.ts b/community/sendgrid/src/client.ts deleted file mode 100644 index dcdb822..0000000 --- a/community/sendgrid/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from '@restackio/ai'; - -import 'dotenv/config'; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); diff --git a/community/sendgrid/src/functions/generateEmailContent.ts b/community/sendgrid/src/functions/generateEmailContent.ts deleted file mode 100644 index fe87462..0000000 --- a/community/sendgrid/src/functions/generateEmailContent.ts +++ /dev/null @@ -1,56 +0,0 @@ -import OpenAI from 'openai/index'; -import { FunctionFailure } from '@restackio/ai/function'; - -type GenerateEmailContentInput = { - emailContext: string; - simulateFailure?: boolean; -}; - -let tries = 0; - -export async function generateEmailContent({ - emailContext, - simulateFailure = false, -}: GenerateEmailContentInput) { - // this is just to simulate a failure and showcase how Restack will automatically retry this function when called from a workflow. - // after it is successful, your workflow will continue with its next steps. - if (simulateFailure && tries === 0) { - tries += 1; - throw FunctionFailure.retryable( - 'Intentional failure to showcase retry logic' - ); - } - if (!process.env.OPENAI_API_KEY) { - throw FunctionFailure.nonRetryable('OPENAI_API_KEY is not set'); - } - - const openai = new OpenAI({ - apiKey: process.env.OPENAI_API_KEY, - }); - - const response = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: [ - { - role: 'system', - content: - 'You are a helpful assistant that generates short emails based on the provided context.', - }, - { - role: 'user', - content: `Generate a short email based on the following context: ${emailContext}`, - }, - ], - max_tokens: 150, - }); - - const text = response.choices[0].message.content; - - if (!text) { - throw FunctionFailure.retryable( - 'Ai could not generate email content, retrying...' - ); - } - - return text; -} diff --git a/community/sendgrid/src/functions/index.ts b/community/sendgrid/src/functions/index.ts deleted file mode 100644 index 7ba99b5..0000000 --- a/community/sendgrid/src/functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './generateEmailContent'; -export * from './sendEmail'; diff --git a/community/sendgrid/src/functions/sendEmail.ts b/community/sendgrid/src/functions/sendEmail.ts deleted file mode 100644 index 5cd2236..0000000 --- a/community/sendgrid/src/functions/sendEmail.ts +++ /dev/null @@ -1,41 +0,0 @@ -import sgMail from '@sendgrid/mail'; -import { FunctionFailure } from '@restackio/ai/function'; - -import { generateEmailContent } from './generateEmailContent'; - -import 'dotenv/config'; - -type EmailInput = { - text: string; - subject: string; - to: string; -}; - -export async function sendEmail({ text, subject, to }: EmailInput) { - const fromEmail = process.env.FROM_EMAIL; - - if (!fromEmail) { - throw FunctionFailure.nonRetryable('FROM_EMAIL is not set'); - } - - if (!process.env.SENDGRID_API_KEY) { - throw FunctionFailure.nonRetryable('SENDGRID_API_KEY is not set'); - } - - sgMail.setApiKey(process.env.SENDGRID_API_KEY); - - const msg = { - to, - from: fromEmail, - subject, - text, - }; - - try { - await sgMail.send(msg); - } catch (error) { - throw FunctionFailure.nonRetryable('Failed to send email'); - } - - return 'Email sent successfully'; -} diff --git a/community/sendgrid/src/services.ts b/community/sendgrid/src/services.ts deleted file mode 100644 index c2a63ee..0000000 --- a/community/sendgrid/src/services.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { generateEmailContent, sendEmail } from './functions'; -import { client } from './client'; - -async function services() { - const workflowsPath = require.resolve('./workflows'); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { sendEmail, generateEmailContent }, - }), - ]); - - console.log('Services running successfully.'); - } catch (e) { - console.error('Failed to run services', e); - } -} - -services().catch((err) => { - console.error('Error running services:', err); -}); diff --git a/community/sendgrid/src/workflows/index.ts b/community/sendgrid/src/workflows/index.ts deleted file mode 100644 index d98f5e7..0000000 --- a/community/sendgrid/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './sendEmail'; diff --git a/community/sendgrid/src/workflows/sendEmail.ts b/community/sendgrid/src/workflows/sendEmail.ts deleted file mode 100644 index 3c7627b..0000000 --- a/community/sendgrid/src/workflows/sendEmail.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { log, step } from '@restackio/ai/workflow'; - -import * as functions from '../functions'; - -type SendEmailWorkflowInput = { - emailContext: string; - subject: string; - to: string; - simulateFailure?: boolean; -}; - -const emailRetryPolicy = { - initialInterval: '10s', // after each failure, wait 10 seconds before retrying - backoffCoefficient: 1, // no exponential backoff, meaning we wait the same amount of time between retries. -}; - -export async function sendEmailWorkflow({ - emailContext, - subject, - to, - simulateFailure = false, -}: SendEmailWorkflowInput) { - const text = await step({ - retry: emailRetryPolicy, - }).generateEmailContent({ - emailContext, - simulateFailure, - }); - - log.info('Email content generated'); - - await step({}).sendEmail({ - text, - subject, - to, - }); - - log.info('Email sent successfully'); - return 'Email sent successfully'; -} diff --git a/community/sendgrid/tsconfig.json b/community/sendgrid/tsconfig.json deleted file mode 100644 index 3c3d758..0000000 --- a/community/sendgrid/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/community/stripe-ai/.env.example b/community/stripe-ai/.env.example deleted file mode 100644 index 239f7fe..0000000 --- a/community/stripe-ai/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -STRIPE_SECRET_KEY=stripe-secret-key -OPENAI_API_KEY=openai-api-key diff --git a/community/stripe-ai/package.json b/community/stripe-ai/package.json deleted file mode 100644 index b1bd162..0000000 --- a/community/stripe-ai/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "stripe-ai-example", - "version": "1.0.0", - "main": "index.js", - "description": "Stripe AI example", - "scripts": { - "start": "ts-node src/services.ts", - "start.watch": "nodemon src/services.ts", - "dev": "npm run start.watch", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "schedule": "ts-node ./scheduleWorkflow.ts" - }, - "nodemonConfig": { - "execMap": { - "ts": "ts-node" - }, - "ext": "ts", - "watch": [ - "src" - ] - }, - "author": "Restack", - "license": "ISC", - "dependencies": { - "@ai-sdk/openai": "^1.0.6", - "@restackio/ai": "^0.0.109", - "@stripe/agent-toolkit": "^0.1.21", - "dotenv": "^16.4.6" - }, - "devDependencies": { - "@types/node": "^22.10.1", - "nodemon": "^3.1.7", - "ts-node": "^10.9.2" - } -} diff --git a/community/stripe-ai/readme.md b/community/stripe-ai/readme.md deleted file mode 100644 index 4dc9adb..0000000 --- a/community/stripe-ai/readme.md +++ /dev/null @@ -1,49 +0,0 @@ -# Overview - -This example showcases how to make interactions with stripe ai. For the purpose of the example we will tell the stripe agent to create a new product with price a set price and to create a payment link for it. The Agent will respond with the payment link of the newly created product. - -# Requirements - -- Node 20 or higher - -```bash -brew install nvm -nvm use 20 -``` - -# Install Restack Web UI - -To install the Restack Web UI, you can use Docker. - -```bash -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -# Start services - -Where all your code is defined, including workflow steps. - -add OPENAI_API_KEY, STRIPE_SECRET_KEY in .env - -```bash -npm i -npm run build -npm run dev -``` - -Your code will be running and syncing with Restack engine to execute workflows or functions. - -# Schedule workflow to send email - -In another shell: - -```bash -npm run schedule -``` - -Will schedule to start example workflow immediately. The code for this is on `scheduleWorkflow.ts`. In here you can see how the createPaymentLinkWorkflow is executed. - - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [Restack Console](https://console.restack.io) diff --git a/community/stripe-ai/scheduleWorkflow.ts b/community/stripe-ai/scheduleWorkflow.ts deleted file mode 100644 index cea2ed5..0000000 --- a/community/stripe-ai/scheduleWorkflow.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { client } from './src/client'; - -import 'dotenv/config'; - -async function scheduleWorkflow() { - try { - const workflowId = `${Date.now()}-sendEmailWorkflow`; - await client.scheduleWorkflow({ - workflowName: 'createPaymentLinkWorkflow', - workflowId, - }); - - console.log('Workflow scheduled successfully'); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error('Error scheduling workflow:', error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow(); diff --git a/community/stripe-ai/src/client.ts b/community/stripe-ai/src/client.ts deleted file mode 100644 index dcdb822..0000000 --- a/community/stripe-ai/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from '@restackio/ai'; - -import 'dotenv/config'; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); diff --git a/community/stripe-ai/src/functions/createPaymentLink.ts b/community/stripe-ai/src/functions/createPaymentLink.ts deleted file mode 100644 index eb7e3f4..0000000 --- a/community/stripe-ai/src/functions/createPaymentLink.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { StripeAgentToolkit } from '@stripe/agent-toolkit/ai-sdk'; -import { openai } from '@ai-sdk/openai'; -import { generateText } from 'ai'; -import { FunctionFailure } from '@restackio/ai/function'; - -import 'dotenv/config'; - -export async function createPaymentLink() { - if (!process.env.STRIPE_SECRET_KEY) { - throw FunctionFailure.nonRetryable('STRIPE_SECRET_KEY is not set'); - } - - if (!process.env.OPENAI_API_KEY) { - throw FunctionFailure.nonRetryable('OPENAI_API_KEY is not set'); - } - - const stripeAgentToolkit = new StripeAgentToolkit({ - secretKey: process.env.STRIPE_SECRET_KEY!, - configuration: { - actions: { - paymentLinks: { - create: true, - }, - products: { - create: true, - }, - prices: { - create: true, - }, - }, - }, - }); - - const result = await generateText({ - model: openai('gpt-4o'), - tools: { - ...stripeAgentToolkit.getTools(), - }, - maxSteps: 5, - prompt: 'Create a payment link for a new product called \"AI-Generated-Product\" with a price of $100.', - }); - - return result.text; -} diff --git a/community/stripe-ai/src/functions/index.ts b/community/stripe-ai/src/functions/index.ts deleted file mode 100644 index adbf8d8..0000000 --- a/community/stripe-ai/src/functions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './createPaymentLink'; diff --git a/community/stripe-ai/src/services.ts b/community/stripe-ai/src/services.ts deleted file mode 100644 index ad9700a..0000000 --- a/community/stripe-ai/src/services.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { client } from './client'; -import { createPaymentLink } from './functions'; - -async function services() { - const workflowsPath = require.resolve('./workflows'); - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { createPaymentLink }, - }), - ]); - - console.log('Services running successfully.'); - } catch (e) { - console.error('Failed to run services', e); - } -} - -services().catch((err) => { - console.error('Error running services:', err); -}); diff --git a/community/stripe-ai/src/workflows/createPaymentLink.ts b/community/stripe-ai/src/workflows/createPaymentLink.ts deleted file mode 100644 index c3a8200..0000000 --- a/community/stripe-ai/src/workflows/createPaymentLink.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { log, step } from "@restackio/ai/workflow"; - -import * as functions from '../functions'; - -export async function createPaymentLinkWorkflow() { - const result = await step({}).createPaymentLink(); - - log.info('Payment link created', { result }); -} diff --git a/community/stripe-ai/src/workflows/index.ts b/community/stripe-ai/src/workflows/index.ts deleted file mode 100644 index adbf8d8..0000000 --- a/community/stripe-ai/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './createPaymentLink'; diff --git a/community/stripe-ai/tsconfig.json b/community/stripe-ai/tsconfig.json deleted file mode 100644 index 3c3d758..0000000 --- a/community/stripe-ai/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/community/whisper/.env.example b/community/whisper/.env.example deleted file mode 100644 index 188fc7c..0000000 --- a/community/whisper/.env.example +++ /dev/null @@ -1 +0,0 @@ -OPENAI_API_KEY=openai-api-key diff --git a/community/whisper/README.md b/community/whisper/README.md deleted file mode 100644 index fa27258..0000000 --- a/community/whisper/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# Overview - -This example showcases how transcribe an audio file and then translate text to a target language. You can use any mp3 file you have at your disposal to test the example. An example test.mp3 file is already provided and can be used when running the workflow. - -# Restack Quickstart - -A sample repository with a simple greeting workflow. - -## Requirements - -- **Node 20+** - -## Start Restack - -To start Restack, use the following Docker command: - -```bash -docker run -d --pull always --name restack -p 5233:5233 -p 6233:6233 -p 7233:7233 -p 9233:9233 ghcr.io/restackio/restack:main -``` - -## Install dependencies and start services - -```bash -npm install -npm run dev -``` - -This will start a Node.js app with Restack Services. -Your code will be running and syncing with Restack to execute workflows or functions. - -## Run workflows - -### from UI - -You can run workflows from the UI by clicking the "Run" button. - -![Run workflows from UI](./screenshot.png) - -### from API - -You can run workflows from the API by using the generated endpoint: - -`POST http://localhost:6233/api/workflows/transcribeAndTranslate` - -with the payload: - -```json -{ - "filePath": "test.mp3", - "targetLanguage": "en" -} -``` - -### from any client - -You can run workflows with any client connected to Restack, for example: - -```bash -npm schedule-workflow -``` - -executes `scheduleWorkflow.ts` which will connect to Restack and execute the `transcribeAndTranslate` workflow. - -## Deploy on Restack Cloud - -To deploy the application on Restack, you can create an account at [https://console.restack.io](https://console.restack.io) diff --git a/community/whisper/package.json b/community/whisper/package.json deleted file mode 100644 index 5379e27..0000000 --- a/community/whisper/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "audio-transcript", - "version": "1.0.0", - "scripts": { - "dev": "open-cli http://localhost:5233 && tsx watch --include src src/services.ts", - "build": "tsc --build", - "clean": "rm -rf node_modules", - "schedule": "ts-node ./scheduleWorkflow.ts" - }, - "author": "", - "license": "ISC", - "description": "", - "dependencies": { - "@restackio/ai": "^0.0.96", - "@temporalio/workflow": "^1.11.6", - "dotenv": "^16.4.7", - "openai": "^4.76.0" - }, - "devDependencies": { - "@types/node": "^22.10.1", - "nodemon": "^3.1.7", - "open-cli": "^8.0.0", - "tsx": "4.19.2", - "typescript": "^5.7.2" - } -} diff --git a/community/whisper/scheduleWorkflow.ts b/community/whisper/scheduleWorkflow.ts deleted file mode 100644 index 0970fb6..0000000 --- a/community/whisper/scheduleWorkflow.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { client } from './src/client'; - -import 'dotenv/config'; - -type TranscribeAndTranslateWorkflowInput = { - filePath: string; - targetLanguage: string; -}; - -async function scheduleWorkflow(input: TranscribeAndTranslateWorkflowInput) { - try { - const workflowId = `${Date.now()}-transcribeAndTranslateWorkflow`; - await client.scheduleWorkflow({ - workflowName: 'transcribeAndTranslate', - workflowId, - input, - }); - - console.log('Workflow scheduled successfully'); - - process.exit(0); // Exit the process successfully - } catch (error) { - console.error('Error scheduling workflow:', error); - process.exit(1); // Exit the process with an error code - } -} - -scheduleWorkflow({ - filePath: './test.mp3', - targetLanguage: 'es', -}); diff --git a/community/whisper/screenshot.png b/community/whisper/screenshot.png deleted file mode 100644 index 4e53a7a..0000000 Binary files a/community/whisper/screenshot.png and /dev/null differ diff --git a/community/whisper/src/client.ts b/community/whisper/src/client.ts deleted file mode 100644 index dcdb822..0000000 --- a/community/whisper/src/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Restack from '@restackio/ai'; - -import 'dotenv/config'; - -export const connectionOptions = { - engineId: process.env.RESTACK_ENGINE_ID!, - address: process.env.RESTACK_ENGINE_ADDRESS!, - apiKey: process.env.RESTACK_ENGINE_API_KEY!, -}; - -export const client = new Restack( - process.env.RESTACK_ENGINE_API_KEY ? connectionOptions : undefined -); diff --git a/community/whisper/src/functions/index.ts b/community/whisper/src/functions/index.ts deleted file mode 100644 index c4a68a8..0000000 --- a/community/whisper/src/functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './transcribeAudio'; -export * from './translateText'; diff --git a/community/whisper/src/functions/transcribeAudio.ts b/community/whisper/src/functions/transcribeAudio.ts deleted file mode 100644 index 75d018e..0000000 --- a/community/whisper/src/functions/transcribeAudio.ts +++ /dev/null @@ -1,31 +0,0 @@ -import fs from 'fs'; -import OpenAI from 'openai'; -import { FunctionFailure } from '@restackio/ai/function'; - -import 'dotenv/config'; - -type TranscribeAudioInput = { - filePath: string; -}; - -export async function transcribeAudio({ filePath }: TranscribeAudioInput) { - if (!process.env.OPENAI_API_KEY) { - throw FunctionFailure.nonRetryable("OPENAI_API_KEY is not set"); - } - - const openai = new OpenAI({ - apiKey: process.env.OPENAI_API_KEY, - }); - - try { - const audioFile = fs.createReadStream(filePath); - const response = await openai.audio.transcriptions.create({ - model: "whisper-1", - file: audioFile, - }); - - return response.text; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error transcribing audio ${error}`); - } -} diff --git a/community/whisper/src/functions/translateText.ts b/community/whisper/src/functions/translateText.ts deleted file mode 100644 index 1cbc5da..0000000 --- a/community/whisper/src/functions/translateText.ts +++ /dev/null @@ -1,28 +0,0 @@ -import OpenAI from "openai"; -import { FunctionFailure } from "@restackio/ai/function"; - -type TranslateTextInput = { - text: string; - targetLanguage: string; -}; - -export async function translateText({ text, targetLanguage }: TranslateTextInput) { - if (!process.env.OPENAI_API_KEY) { - throw FunctionFailure.nonRetryable("OPENAI_API_KEY is not set"); - } - - const openai = new OpenAI({ - apiKey: process.env.OPENAI_API_KEY, - }); - - try { - const prompt = `Translate the following text to ${targetLanguage}:\n\n${text}`; - const response = await openai.chat.completions.create({ - model: "gpt-4", - messages: [{ role: "user", content: prompt }], - }); - return response.choices[0].message.content || "Translation failed."; - } catch (error) { - throw FunctionFailure.nonRetryable(`Error translating text ${error}`); - } -} diff --git a/community/whisper/src/services.ts b/community/whisper/src/services.ts deleted file mode 100644 index 46126d8..0000000 --- a/community/whisper/src/services.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { transcribeAudio, translateText } from "./functions"; -import { client } from "./client"; - -async function services() { - const workflowsPath = require.resolve("./workflows"); - - try { - await Promise.all([ - // Start service with current workflows and functions - client.startService({ - workflowsPath, - functions: { transcribeAudio, translateText }, - }), - ]); - - console.log("Services running successfully."); - } catch (e) { - console.error("Failed to run services", e); - } -} - -services().catch((err) => { - console.error("Error running services:", err); -}); diff --git a/community/whisper/src/workflows/index.ts b/community/whisper/src/workflows/index.ts deleted file mode 100644 index 578bed9..0000000 --- a/community/whisper/src/workflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./transcribeAndTranslate"; diff --git a/community/whisper/src/workflows/transcribeAndTranslate.ts b/community/whisper/src/workflows/transcribeAndTranslate.ts deleted file mode 100644 index 60b8d54..0000000 --- a/community/whisper/src/workflows/transcribeAndTranslate.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { step } from "@restackio/ai/workflow"; - -import * as functions from "../functions"; - -type TranscribeAndTranslateInput = { - filePath: string; - targetLanguage: string; -}; - -export async function transcribeAndTranslate({ - filePath, - targetLanguage, -}: TranscribeAndTranslateInput) { - const transcription = await step({}).transcribeAudio({ - filePath, - }); - - const translation = await step({}).translateText({ - text: transcription, - targetLanguage, - }); - - return { transcription, translation }; -} diff --git a/community/whisper/test.mp3 b/community/whisper/test.mp3 deleted file mode 100644 index 537970b..0000000 Binary files a/community/whisper/test.mp3 and /dev/null differ diff --git a/community/whisper/tsconfig.json b/community/whisper/tsconfig.json deleted file mode 100644 index 3c3d758..0000000 --- a/community/whisper/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "Node16", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -}