diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 95c28bce77..d37ac5d33c 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -31,6 +31,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/ COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public COPY --from=builder --chown=nextjs:nodejs /app/packages/database/migrations ./apps/web/migrations +RUN chown nextjs:nodejs /app USER nextjs diff --git a/apps/web/__tests__/unit/video-processing.test.ts b/apps/web/__tests__/unit/video-processing.test.ts index e9ae285a41..b697be1aca 100644 --- a/apps/web/__tests__/unit/video-processing.test.ts +++ b/apps/web/__tests__/unit/video-processing.test.ts @@ -1,8 +1,10 @@ +import { Effect } from "effect"; import { beforeEach, describe, expect, it, vi } from "vitest"; const updateWhereMock = vi.fn(); const selectWhereMock = vi.fn(); -const startMock = vi.fn(); +const runPromiseMock = vi.fn(); +const fetchMock = vi.fn(); const dbMock = vi.fn(() => ({ update: vi.fn(() => ({ @@ -23,20 +25,49 @@ vi.mock("@cap/database", () => ({ vi.mock("server-only", () => ({})); -vi.mock("workflow/api", () => ({ - start: startMock, +const serverEnvMock = vi.fn(() => ({ + MEDIA_SERVER_URL: "http://media-server:3000", + MEDIA_SERVER_WEBHOOK_SECRET: undefined as string | undefined, + MEDIA_SERVER_WEBHOOK_URL: undefined as string | undefined, + WEB_URL: "http://localhost:3000", })); -vi.mock("@/workflows/process-video", () => ({ - processVideoWorkflow: Symbol("processVideoWorkflow"), +vi.mock("@cap/env", () => ({ + serverEnv: serverEnvMock, +})); + +const mockBucket = { + getInternalSignedObjectUrl: vi.fn(), + getInternalPresignedPutUrl: vi.fn(), +}; + +const getBucketAccessMock = vi.fn(); + +vi.mock("@cap/web-backend", () => ({ + S3Buckets: { + getBucketAccess: getBucketAccessMock, + }, +})); + +vi.mock("@/lib/server", () => ({ + runPromise: runPromiseMock, })); describe("video processing starts", () => { beforeEach(() => { vi.clearAllMocks(); + vi.stubGlobal("fetch", fetchMock); + + getBucketAccessMock.mockReturnValue(Effect.succeed([mockBucket, null])); + mockBucket.getInternalSignedObjectUrl.mockReturnValue( + Effect.succeed("https://signed-url"), + ); + mockBucket.getInternalPresignedPutUrl.mockReturnValue( + Effect.succeed("https://presigned-url"), + ); }); - it("does not start a duplicate workflow when processing is already running", async () => { + it("does not start processing when already running", async () => { updateWhereMock.mockResolvedValueOnce({ affectedRows: 0 }); selectWhereMock.mockResolvedValueOnce([ { @@ -46,12 +77,12 @@ describe("video processing starts", () => { }, ]); - const { startVideoProcessingWorkflow } = await import( + const { startVideoProcessingDirect } = await import( "@/lib/video-processing" ); await expect( - startVideoProcessingWorkflow({ + startVideoProcessingDirect({ videoId: "video-123" as never, userId: "user-123", rawFileKey: "user-123/video-123/raw-upload.webm", @@ -61,42 +92,58 @@ describe("video processing starts", () => { }), ).resolves.toBe("already-processing"); - expect(startMock).not.toHaveBeenCalled(); + expect(fetchMock).not.toHaveBeenCalled(); + expect(runPromiseMock).not.toHaveBeenCalled(); }); - it("starts the workflow after claiming the upload row", async () => { - updateWhereMock.mockResolvedValueOnce({ affectedRows: 1 }); - startMock.mockResolvedValueOnce(undefined); + it("throws and marks error when MEDIA_SERVER_URL is not configured", async () => { + serverEnvMock.mockReturnValue({ + MEDIA_SERVER_URL: undefined, + MEDIA_SERVER_WEBHOOK_SECRET: undefined, + MEDIA_SERVER_WEBHOOK_URL: undefined, + WEB_URL: "http://localhost:3000", + }); + updateWhereMock + .mockResolvedValueOnce({ affectedRows: 1 }) + .mockResolvedValueOnce({ affectedRows: 1 }); - const { startVideoProcessingWorkflow } = await import( + const { startVideoProcessingDirect } = await import( "@/lib/video-processing" ); await expect( - startVideoProcessingWorkflow({ + startVideoProcessingDirect({ videoId: "video-123" as never, userId: "user-123", rawFileKey: "user-123/video-123/raw-upload.webm", bucketId: null, processingMessage: "Starting video processing...", - startFailureMessage: "Video processing could not start.", - mode: "multipart", + startFailureMessage: "MEDIA_SERVER_URL not configured.", }), - ).resolves.toBe("started"); + ).rejects.toThrow("MEDIA_SERVER_URL is not configured"); - expect(startMock).toHaveBeenCalledTimes(1); + expect(updateWhereMock).toHaveBeenCalledTimes(2); + expect(fetchMock).not.toHaveBeenCalled(); }); - it("starts the workflow when mysql returns affectedRows in the first tuple slot", async () => { - updateWhereMock.mockResolvedValueOnce([{ affectedRows: 1 }]); - startMock.mockResolvedValueOnce(undefined); - - const { startVideoProcessingWorkflow } = await import( + it("calls media server and returns started when processing succeeds", async () => { + updateWhereMock.mockResolvedValueOnce({ affectedRows: 1 }); + runPromiseMock + .mockResolvedValueOnce([mockBucket, null]) + .mockResolvedValueOnce("https://raw-signed-url") + .mockResolvedValueOnce("https://output-presigned-url") + .mockResolvedValueOnce("https://thumbnail-presigned-url"); + fetchMock.mockResolvedValueOnce({ + ok: true, + json: () => Promise.resolve({ jobId: "job-abc" }), + }); + + const { startVideoProcessingDirect } = await import( "@/lib/video-processing" ); await expect( - startVideoProcessingWorkflow({ + startVideoProcessingDirect({ videoId: "video-123" as never, userId: "user-123", rawFileKey: "user-123/video-123/raw-upload.webm", @@ -107,44 +154,65 @@ describe("video processing starts", () => { }), ).resolves.toBe("started"); - expect(startMock).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledWith( + "http://media-server:3000/video/process", + expect.objectContaining({ method: "POST" }), + ); }); - it("force restarts a stale processing row", async () => { - updateWhereMock.mockResolvedValueOnce({ affectedRows: 1 }); - startMock.mockResolvedValueOnce(undefined); - - const { startVideoProcessingWorkflow } = await import( + it("works when mysql returns affectedRows in the first tuple slot", async () => { + updateWhereMock.mockResolvedValueOnce([{ affectedRows: 1 }]); + runPromiseMock + .mockResolvedValueOnce([mockBucket, null]) + .mockResolvedValueOnce("https://raw-signed-url") + .mockResolvedValueOnce("https://output-presigned-url") + .mockResolvedValueOnce("https://thumbnail-presigned-url"); + fetchMock.mockResolvedValueOnce({ + ok: true, + json: () => Promise.resolve({ jobId: "job-xyz" }), + }); + + const { startVideoProcessingDirect } = await import( "@/lib/video-processing" ); await expect( - startVideoProcessingWorkflow({ + startVideoProcessingDirect({ videoId: "video-123" as never, userId: "user-123", rawFileKey: "user-123/video-123/raw-upload.webm", bucketId: null, - processingMessage: "Retrying video processing...", - startFailureMessage: "Video processing could not restart.", - forceRestart: true, + processingMessage: "Starting video processing...", + startFailureMessage: "Video processing could not start.", + mode: "multipart", }), ).resolves.toBe("started"); - expect(startMock).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledTimes(1); }); - it("marks the upload as errored when workflow start fails", async () => { + it("marks the upload as errored when media server call fails", async () => { updateWhereMock .mockResolvedValueOnce({ affectedRows: 1 }) .mockResolvedValueOnce({ affectedRows: 1 }); - startMock.mockRejectedValueOnce(new Error("temporary failure")); - - const { startVideoProcessingWorkflow } = await import( + runPromiseMock + .mockResolvedValueOnce([mockBucket, null]) + .mockResolvedValueOnce("https://raw-signed-url") + .mockResolvedValueOnce("https://output-presigned-url") + .mockResolvedValueOnce("https://thumbnail-presigned-url"); + fetchMock.mockResolvedValueOnce({ + ok: false, + status: 500, + json: () => Promise.resolve({ error: "media server error" }), + }); + + const { startVideoProcessingDirect } = await import( "@/lib/video-processing" ); await expect( - startVideoProcessingWorkflow({ + startVideoProcessingDirect({ videoId: "video-123" as never, userId: "user-123", rawFileKey: "user-123/video-123/raw-upload.webm", @@ -152,9 +220,9 @@ describe("video processing starts", () => { processingMessage: "Starting video processing...", startFailureMessage: "Video processing could not start.", }), - ).rejects.toThrow("temporary failure"); + ).rejects.toThrow("media server error"); - expect(startMock).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledTimes(1); expect(updateWhereMock).toHaveBeenCalledTimes(2); }); }); diff --git a/apps/web/actions/video/retry-processing.ts b/apps/web/actions/video/retry-processing.ts index 5caeff8dbf..6f35abec23 100644 --- a/apps/web/actions/video/retry-processing.ts +++ b/apps/web/actions/video/retry-processing.ts @@ -6,7 +6,7 @@ import { videos, videoUploads } from "@cap/database/schema"; import type { Video } from "@cap/web-domain"; import { eq } from "drizzle-orm"; import { - startVideoProcessingWorkflow, + startVideoProcessingDirect, type VideoProcessingStartStatus, } from "@/lib/video-processing"; @@ -62,7 +62,7 @@ export async function retryVideoProcessing({ if (!upload) throw new Error("No upload record found"); if (!upload.rawFileKey) throw new Error("No raw file key found for retry"); - const status = await startVideoProcessingWorkflow({ + const status = await startVideoProcessingDirect({ videoId, userId: user.id, rawFileKey: upload.rawFileKey, diff --git a/apps/web/actions/video/trigger-processing.ts b/apps/web/actions/video/trigger-processing.ts index 05209b0036..294d9ca2b7 100644 --- a/apps/web/actions/video/trigger-processing.ts +++ b/apps/web/actions/video/trigger-processing.ts @@ -5,7 +5,7 @@ import { getCurrentUser } from "@cap/database/auth/session"; import { videos } from "@cap/database/schema"; import type { Video } from "@cap/web-domain"; import { eq } from "drizzle-orm"; -import { startVideoProcessingWorkflow } from "@/lib/video-processing"; +import { startVideoProcessingDirect } from "@/lib/video-processing"; export async function triggerVideoProcessing({ videoId, @@ -27,7 +27,7 @@ export async function triggerVideoProcessing({ if (!video) throw new Error("Video not found"); if (video.ownerId !== user.id) throw new Error("Unauthorized"); - await startVideoProcessingWorkflow({ + await startVideoProcessingDirect({ videoId, userId: user.id, rawFileKey, diff --git a/apps/web/actions/videos/get-status.ts b/apps/web/actions/videos/get-status.ts index 8805576963..2aa1e8aeec 100644 --- a/apps/web/actions/videos/get-status.ts +++ b/apps/web/actions/videos/get-status.ts @@ -58,12 +58,15 @@ export async function getVideoStatus( if (!video.transcriptionStatus && serverEnv().DEEPGRAM_API_KEY) { const activeUpload = await db() - .select({ videoId: videoUploads.videoId }) + .select({ videoId: videoUploads.videoId, phase: videoUploads.phase }) .from(videoUploads) .where(eq(videoUploads.videoId, videoId)) .limit(1); if (activeUpload.length > 0) { + console.log( + `[Get Status] Video ${videoId} has active upload (phase=${activeUpload[0]?.phase}), waiting before transcription`, + ); return { transcriptionStatus: null, aiGenerationStatus: diff --git a/apps/web/app/api/upload/[...route]/multipart.ts b/apps/web/app/api/upload/[...route]/multipart.ts index 8d5cce3cdf..86883d8091 100644 --- a/apps/web/app/api/upload/[...route]/multipart.ts +++ b/apps/web/app/api/upload/[...route]/multipart.ts @@ -22,7 +22,7 @@ import { Hono, type MiddlewareHandler } from "hono"; import { z } from "zod"; import { withAuth } from "@/app/api/utils"; import { runPromise } from "@/lib/server"; -import { startVideoProcessingWorkflow } from "@/lib/video-processing"; +import { startVideoProcessingDirect } from "@/lib/video-processing"; import { stringOrNumberOptional } from "@/utils/zod"; import { getMultipartFileKey, @@ -377,6 +377,9 @@ app.post( ); if (isRawRecorderUpload(subpath)) { + console.log( + `[multipart] Raw recorder upload complete: videoId=${videoId} fileKey=${fileKey}`, + ); yield* db.use((db) => db .update(Db.videos) @@ -398,7 +401,7 @@ app.post( ); const processingStarted = yield* Effect.tryPromise(() => - startVideoProcessingWorkflow({ + startVideoProcessingDirect({ videoId: Video.VideoId.make(videoId), userId: user.id, rawFileKey: fileKey, @@ -409,10 +412,15 @@ app.post( mode: "multipart", }), ).pipe( - Effect.map(() => true), + Effect.map(() => { + console.log( + `[multipart] Processing job started for raw upload ${videoId}`, + ); + return true; + }), Effect.catchAll((error) => Effect.logError( - "Failed to start video processing workflow after raw upload completion", + "Failed to start video processing after raw upload completion", error, ).pipe(Effect.map(() => false)), ), @@ -480,6 +488,10 @@ app.post( ), ); + console.log( + `[multipart] Deleted videoUploads for webMP4 ${videoId} (transcription now unblocked)`, + ); + const mediaServerUrl = serverEnv().MEDIA_SERVER_URL; if (video.source.type === "webMP4" && mediaServerUrl) { const inputUrl = yield* bucket.getInternalSignedObjectUrl(fileKey); @@ -497,11 +509,18 @@ app.post( yield* Effect.tryPromise({ try: async () => { + const webhookSecret = serverEnv().MEDIA_SERVER_WEBHOOK_SECRET; + const remuxHeaders: Record = { + "Content-Type": "application/json", + }; + if (webhookSecret) { + remuxHeaders["x-media-server-secret"] = webhookSecret; + } const response = await fetch( `${mediaServerUrl}/video/process`, { method: "POST", - headers: { "Content-Type": "application/json" }, + headers: remuxHeaders, body: JSON.stringify({ videoId, userId: user.id, diff --git a/apps/web/app/api/webhooks/media-server/progress/route.ts b/apps/web/app/api/webhooks/media-server/progress/route.ts index 10d4d0c706..6bca6e8925 100644 --- a/apps/web/app/api/webhooks/media-server/progress/route.ts +++ b/apps/web/app/api/webhooks/media-server/progress/route.ts @@ -68,7 +68,7 @@ export async function POST(request: NextRequest) { try { const webhookSecret = serverEnv().MEDIA_SERVER_WEBHOOK_SECRET; const authHeader = request.headers.get("x-media-server-secret"); - if (!webhookSecret || authHeader !== webhookSecret) { + if (webhookSecret && authHeader !== webhookSecret) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } @@ -83,6 +83,12 @@ export async function POST(request: NextRequest) { const dbPhase = mapPhaseToDbPhase(payload.phase); + console.log( + "[media-server-webhook] Mapped to dbPhase=%s for video %s", + dbPhase, + payload.videoId, + ); + if (dbPhase === "complete") { if (payload.metadata) { const duration = getValidDuration(payload.metadata.duration); @@ -105,6 +111,11 @@ export async function POST(request: NextRequest) { .from(videos) .where(eq(videos.id, payload.videoId as Video.VideoId)); + const [currentUpload] = await db() + .select({ rawFileKey: videoUploads.rawFileKey }) + .from(videoUploads) + .where(eq(videoUploads.videoId, payload.videoId as Video.VideoId)); + if (currentVideo?.source?.type === "desktopSegments") { await db() .update(videos) @@ -164,6 +175,37 @@ export async function POST(request: NextRequest) { await db() .delete(videoUploads) .where(eq(videoUploads.videoId, payload.videoId as Video.VideoId)); + + console.log( + "[media-server-webhook] Deleted videoUploads for %s (transcription now unblocked)", + payload.videoId, + ); + + if (currentUpload?.rawFileKey) { + const rawFileKey = currentUpload.rawFileKey; + Effect.gen(function* () { + const bucketId = Option.fromNullable( + currentVideo?.bucket ?? null, + ) as Option.Option; + const [bucket] = yield* S3Buckets.getBucketAccess(bucketId); + yield* bucket.deleteObject(rawFileKey); + }) + .pipe(runPromise) + .then(() => { + console.log( + "[media-server-webhook] Cleaned up raw file %s for %s", + rawFileKey, + payload.videoId, + ); + }) + .catch((err) => { + console.warn( + "[media-server-webhook] Failed to clean up raw file for %s:", + payload.videoId, + err, + ); + }); + } } else if (dbPhase === "error") { await db() .update(videoUploads) diff --git a/apps/web/lib/transcribe.ts b/apps/web/lib/transcribe.ts index 0b07f04ab8..43b69c4f2a 100644 --- a/apps/web/lib/transcribe.ts +++ b/apps/web/lib/transcribe.ts @@ -8,8 +8,7 @@ import { import { serverEnv } from "@cap/env"; import type { Video } from "@cap/web-domain"; import { eq } from "drizzle-orm"; -import { start } from "workflow/api"; -import { transcribeVideoWorkflow } from "@/workflows/transcribe"; +import { runTranscription } from "@/workflows/transcribe"; type TranscribeResult = { success: boolean; @@ -111,6 +110,9 @@ export async function transcribeVideo( upload[0]?.phase === "processing" || upload[0]?.phase === "generating_thumbnail" ) { + console.log( + `[transcribeVideo] Video ${videoId} upload still in progress (phase=${upload[0]?.phase}), skipping`, + ); return { success: true, message: "Video upload is still in progress", @@ -118,33 +120,48 @@ export async function transcribeVideo( } try { + await db() + .update(videos) + .set({ transcriptionStatus: "PROCESSING" }) + .where(eq(videos.id, videoId)); + console.log( - `[transcribeVideo] Triggering transcription workflow for video ${videoId}`, + `[transcribeVideo] Starting transcription directly for video ${videoId}`, ); - await start(transcribeVideoWorkflow, [ - { - videoId, - userId, - aiGenerationEnabled, - }, - ]); + runTranscription({ videoId, userId, aiGenerationEnabled }) + .then(() => { + console.log( + `[transcribeVideo] Transcription completed for video ${videoId}`, + ); + }) + .catch((error) => { + console.error( + `[transcribeVideo] Transcription failed for video ${videoId}:`, + error, + ); + db() + .update(videos) + .set({ transcriptionStatus: null }) + .where(eq(videos.id, videoId)) + .catch((err) => + console.error( + `[transcribeVideo] Failed to reset status for ${videoId}:`, + err, + ), + ); + }); return { success: true, - message: "Transcription workflow started", + message: "Transcription started", }; } catch (error) { - console.error("[transcribeVideo] Failed to trigger workflow:", error); - - await db() - .update(videos) - .set({ transcriptionStatus: null }) - .where(eq(videos.id, videoId)); + console.error("[transcribeVideo] Failed to start transcription:", error); return { success: false, - message: "Failed to start transcription workflow", + message: "Failed to start transcription", }; } } diff --git a/apps/web/lib/video-processing.ts b/apps/web/lib/video-processing.ts index 0b61f28dfd..c68fa5f29e 100644 --- a/apps/web/lib/video-processing.ts +++ b/apps/web/lib/video-processing.ts @@ -1,9 +1,11 @@ import { db } from "@cap/database"; import { videoUploads } from "@cap/database/schema"; +import { serverEnv } from "@cap/env"; +import { S3Buckets } from "@cap/web-backend"; import type { S3Bucket, Video } from "@cap/web-domain"; import { and, eq, ne } from "drizzle-orm"; -import { start } from "workflow/api"; -import { processVideoWorkflow } from "@/workflows/process-video"; +import { Option } from "effect"; +import { runPromise } from "@/lib/server"; export type VideoProcessingStartStatus = "started" | "already-processing"; @@ -87,7 +89,68 @@ export async function transitionVideoToProcessing({ throw new Error("Failed to transition upload to processing"); } -export async function startVideoProcessingWorkflow({ +function getInputExtension(rawFileKey: string): string { + const ext = rawFileKey.split(".").at(-1)?.toLowerCase(); + return ext ? `.${ext}` : ".mp4"; +} + +const MEDIA_SERVER_START_MAX_ATTEMPTS = 6; +const MEDIA_SERVER_START_RETRY_BASE_MS = 2000; + +async function callMediaServerProcess( + mediaServerUrl: string, + body: { + videoId: string; + userId: string; + videoUrl: string; + outputPresignedUrl: string; + thumbnailPresignedUrl: string; + webhookUrl: string; + webhookSecret?: string; + inputExtension: string; + }, +): Promise { + for (let attempt = 0; attempt < MEDIA_SERVER_START_MAX_ATTEMPTS; attempt++) { + const headers: Record = { + "Content-Type": "application/json", + }; + if (body.webhookSecret) { + headers["x-media-server-secret"] = body.webhookSecret; + } + + const response = await fetch(`${mediaServerUrl}/video/process`, { + method: "POST", + headers, + body: JSON.stringify(body), + }); + + if (response.ok) { + const { jobId } = (await response.json()) as { jobId: string }; + return jobId; + } + + const errorData = (await response.json().catch(() => ({}))) as { + error?: string; + code?: string; + }; + const errorMessage = errorData.error || "Video processing failed to start"; + const shouldRetry = + response.status === 503 && errorData.code === "SERVER_BUSY"; + + if (shouldRetry && attempt < MEDIA_SERVER_START_MAX_ATTEMPTS - 1) { + await new Promise((resolve) => + setTimeout(resolve, MEDIA_SERVER_START_RETRY_BASE_MS * 2 ** attempt), + ); + continue; + } + + throw new Error(errorMessage); + } + + throw new Error("Video processing failed to start"); +} + +export async function startVideoProcessingDirect({ videoId, userId, rawFileKey, @@ -118,15 +181,53 @@ export async function startVideoProcessingWorkflow({ return status; } + const mediaServerUrl = serverEnv().MEDIA_SERVER_URL; + if (!mediaServerUrl) { + const err = new Error("MEDIA_SERVER_URL is not configured"); + await setVideoProcessingError(videoId, startFailureMessage, err); + throw err; + } + try { - await start(processVideoWorkflow, [ - { - videoId, - userId, - rawFileKey, - bucketId: bucketId as S3Bucket.S3BucketId | null, - }, - ]); + const [bucket] = await S3Buckets.getBucketAccess( + Option.fromNullable(bucketId as S3Bucket.S3BucketId | null), + ).pipe(runPromise); + + const rawVideoUrl = await bucket + .getInternalSignedObjectUrl(rawFileKey) + .pipe(runPromise); + + const outputKey = `${userId}/${videoId}/result.mp4`; + const thumbnailKey = `${userId}/${videoId}/screenshot/screen-capture.jpg`; + + const outputPresignedUrl = await bucket + .getInternalPresignedPutUrl(outputKey, { ContentType: "video/mp4" }) + .pipe(runPromise); + + const thumbnailPresignedUrl = await bucket + .getInternalPresignedPutUrl(thumbnailKey, { ContentType: "image/jpeg" }) + .pipe(runPromise); + + const webhookBaseUrl = + serverEnv().MEDIA_SERVER_WEBHOOK_URL || serverEnv().WEB_URL; + const webhookSecret = serverEnv().MEDIA_SERVER_WEBHOOK_SECRET; + const webhookUrl = `${webhookBaseUrl}/api/webhooks/media-server/progress`; + + const jobId = await callMediaServerProcess(mediaServerUrl, { + videoId, + userId, + videoUrl: rawVideoUrl, + outputPresignedUrl, + thumbnailPresignedUrl, + webhookUrl, + webhookSecret: webhookSecret || undefined, + inputExtension: getInputExtension(rawFileKey), + }); + + console.log( + `[video-processing] Media server job started: videoId=${videoId} jobId=${jobId} webhookUrl=${webhookUrl}`, + ); + return "started"; } catch (error) { const normalizedError = diff --git a/apps/web/package.json b/apps/web/package.json index f26557a0b6..d3e30d8e68 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -142,7 +142,7 @@ "tldts": "^7.0.11", "ua-parser-js": "^1.0.38", "uuid": "^9.0.1", - "workflow": "4.2.0-beta.73", + "workflow": "4.2.4", "zod": "^3.25.76" }, "devDependencies": { diff --git a/apps/web/workflows/process-video.ts b/apps/web/workflows/process-video.ts index 08f1526d8a..8b9ba9efe8 100644 --- a/apps/web/workflows/process-video.ts +++ b/apps/web/workflows/process-video.ts @@ -37,6 +37,10 @@ export async function processVideoWorkflow( const { videoId, userId, rawFileKey, bucketId } = payload; + console.log( + `[process-video] Workflow started: videoId=${videoId} rawFileKey=${rawFileKey}`, + ); + try { await validateProcessingRequest(videoId, rawFileKey); @@ -50,6 +54,10 @@ export async function processVideoWorkflow( await saveMetadataAndComplete(videoId, result.metadata); await cleanupRawUpload(rawFileKey, bucketId); + console.log( + `[process-video] Workflow completed successfully: videoId=${videoId}`, + ); + return { success: true, message: "Video processing completed", @@ -57,6 +65,9 @@ export async function processVideoWorkflow( }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); + console.error( + `[process-video] Workflow failed: videoId=${videoId} error=${errorMessage}`, + ); await setProcessingError(videoId, errorMessage); throw new FatalError(errorMessage); } @@ -260,6 +271,10 @@ async function processVideoOnMediaServer( inputExtension: getInputExtension(rawFileKey), }); + console.log( + `[process-video] Media server job started: videoId=${videoId} jobId=${jobId} webhookUrl=${webhookUrl}`, + ); + const result = await pollForCompletion(mediaServerUrl, jobId); return result; @@ -306,16 +321,29 @@ async function pollForCompletion( if (!status.metadata) { throw new Error("Processing completed but no metadata returned"); } + console.log( + `[process-video] Job ${jobId} complete after ${attempt + 1} poll(s)`, + ); return { metadata: status.metadata }; } if (status.phase === "error") { + console.error( + `[process-video] Job ${jobId} failed: ${status.error || "unknown error"}`, + ); throw new Error(status.error || "Video processing failed"); } if (status.phase === "cancelled") { + console.error(`[process-video] Job ${jobId} was cancelled`); throw new Error("Video processing was cancelled"); } + + if (attempt % 12 === 0) { + console.log( + `[process-video] Job ${jobId} still running: phase=${status.phase} progress=${status.progress}% (poll ${attempt + 1}/${maxAttempts})`, + ); + } } throw new Error("Video processing timed out"); @@ -339,6 +367,10 @@ async function saveMetadataAndComplete( }) .where(eq(videos.id, videoId as Video.VideoId)); + console.log( + `[process-video] Deleting videoUploads for ${videoId} (unblocks transcription)`, + ); + await db() .delete(videoUploads) .where(eq(videoUploads.videoId, videoId as Video.VideoId)); diff --git a/apps/web/workflows/transcribe.ts b/apps/web/workflows/transcribe.ts index 57d55072f9..da463f741e 100644 --- a/apps/web/workflows/transcribe.ts +++ b/apps/web/workflows/transcribe.ts @@ -45,6 +45,46 @@ interface VideoData { isOwnerPro: boolean; } +export async function runTranscription( + payload: TranscribeWorkflowPayload, +): Promise { + const { videoId, userId, aiGenerationEnabled } = payload; + + console.log(`[transcribe-direct] Started: videoId=${videoId}`); + + const videoData = await validateVideo(videoId); + + if (videoData.transcriptionDisabled) { + console.log(`[transcribe-direct] Transcription disabled for ${videoId}`); + await markSkipped(videoId); + return; + } + + const audioUrl = await extractAudio(videoId, userId, videoData.bucketId); + + if (!audioUrl) { + console.log(`[transcribe-direct] No audio detected for ${videoId}`); + await markNoAudio(videoId); + return; + } + + console.log( + `[transcribe-direct] Audio extracted for ${videoId}, sending to Deepgram`, + ); + + const transcription = await transcribeWithDeepgram(audioUrl); + + await saveTranscription(videoId, userId, videoData.bucketId, transcription); + + console.log(`[transcribe-direct] Transcription saved for ${videoId}`); + + await cleanupTempAudio(videoId, userId, videoData.bucketId); + + if (aiGenerationEnabled) { + await queueAiGeneration(videoId, userId); + } +} + export async function transcribeVideoWorkflow( payload: TranscribeWorkflowPayload, ) { @@ -52,9 +92,16 @@ export async function transcribeVideoWorkflow( const { videoId, userId, aiGenerationEnabled } = payload; + console.log( + `[transcribe-workflow] Started: videoId=${videoId} userId=${userId} aiGenerationEnabled=${aiGenerationEnabled}`, + ); + const videoData = await validateVideo(videoId); if (videoData.transcriptionDisabled) { + console.log( + `[transcribe-workflow] Transcription disabled for ${videoId}, skipping`, + ); await markSkipped(videoId); return { success: true, message: "Transcription disabled - skipped" }; } @@ -62,6 +109,9 @@ export async function transcribeVideoWorkflow( const audioUrl = await extractAudio(videoId, userId, videoData.bucketId); if (!audioUrl) { + console.log( + `[transcribe-workflow] No audio detected for ${videoId}, skipping`, + ); await markNoAudio(videoId); return { success: true, @@ -69,6 +119,10 @@ export async function transcribeVideoWorkflow( }; } + console.log( + `[transcribe-workflow] Audio extracted for ${videoId}, sending to Deepgram`, + ); + // const enhancementConfigured = isAudioEnhancementConfigured(); // const shouldEnhanceAudio = videoData.isOwnerPro && enhancementConfigured; @@ -89,6 +143,8 @@ export async function transcribeVideoWorkflow( await saveTranscription(videoId, userId, videoData.bucketId, transcription); + console.log(`[transcribe-workflow] Transcription saved for ${videoId}`); + await cleanupTempAudio(videoId, userId, videoData.bucketId); if (aiGenerationEnabled) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb43a78d38..eba7e077f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,7 +115,7 @@ importers: version: 0.14.10(solid-js@1.9.6) '@solidjs/start': specifier: ^1.1.3 - version: 1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1) + version: 1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1) '@tanstack/solid-query': specifier: ^5.51.21 version: 5.75.4(solid-js@1.9.6) @@ -205,7 +205,7 @@ importers: version: 9.0.1 vinxi: specifier: ^0.5.6 - version: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + version: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) webcodecs: specifier: ^0.1.0 version: 0.1.0 @@ -310,7 +310,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.3.11 + version: 1.3.12 apps/storybook: dependencies: @@ -464,7 +464,7 @@ importers: version: 3.10.0(react-hook-form@7.56.2(react@19.2.4)) '@kubiks/otel-drizzle': specifier: ^2.1.0 - version: 2.1.0(@opentelemetry/api@1.9.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2)) + version: 2.1.0(@opentelemetry/api@1.9.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2)) '@mux/mux-node': specifier: ^8.5.1 version: 8.8.0(encoding@0.1.13) @@ -602,7 +602,7 @@ importers: version: 16.5.0 drizzle-orm: specifier: 0.44.6 - version: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2) + version: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2) dub: specifier: ^0.64.0 version: 0.64.0(@modelcontextprotocol/sdk@1.6.1)(zod@3.25.76) @@ -751,8 +751,8 @@ importers: specifier: ^9.0.1 version: 9.0.1 workflow: - specifier: 4.2.0-beta.73 - version: 4.2.0-beta.73(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.3.5)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.8.3) + specifier: 4.2.4 + version: 4.2.4(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.3.5)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.8.3) zod: specifier: ^3.25.76 version: 3.25.76 @@ -963,7 +963,7 @@ importers: version: 0.47.0(@effect/experimental@0.56.0(@effect/platform@0.92.1(effect@3.18.4))(effect@3.18.4)(ioredis@5.6.1))(@effect/platform@0.92.1(effect@3.18.4))(@effect/sql@0.44.2(@effect/experimental@0.56.0(@effect/platform@0.92.1(effect@3.18.4))(effect@3.18.4)(ioredis@5.6.1))(@effect/platform@0.92.1(effect@3.18.4))(effect@3.18.4))(effect@3.18.4) '@kubiks/otel-drizzle': specifier: ^2.1.0 - version: 2.1.0(@opentelemetry/api@1.9.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2)) + version: 2.1.0(@opentelemetry/api@1.9.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2)) '@mattrax/mysql-planetscale': specifier: ^0.0.3 version: 0.0.3 @@ -984,7 +984,7 @@ importers: version: 1.0.5(react@19.1.1) drizzle-orm: specifier: 0.44.6 - version: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2) + version: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2) dub: specifier: ^0.64.0 version: 0.64.0(@modelcontextprotocol/sdk@1.6.1)(zod@3.25.76) @@ -1388,7 +1388,7 @@ importers: version: 3.1.0(@aws-sdk/credential-provider-web-identity@3.972.26) drizzle-orm: specifier: 0.44.6 - version: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2) + version: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2) effect: specifier: ^3.18.4 version: 3.18.4 @@ -2333,6 +2333,9 @@ packages: '@emnapi/core@1.9.1': resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} @@ -2345,12 +2348,18 @@ packages: '@emnapi/runtime@1.9.1': resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -4255,8 +4264,8 @@ packages: '@napi-rs/wasm-runtime@1.0.6': resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -4868,8 +4877,8 @@ packages: resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} engines: {node: '>=14'} - '@oxc-project/types@0.123.0': - resolution: {integrity: sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew==} + '@oxc-project/types@0.126.0': + resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==} '@oxc-project/types@0.94.0': resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} @@ -5655,95 +5664,111 @@ packages: '@react-email/body@0.0.11': resolution: {integrity: sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/button@0.1.0': resolution: {integrity: sha512-fg4LtgTu5zXxaRSly9cuv6sHVF/hi1lElbRaIA8EPx5coWOBhCto6rCPfawcXpaN2oER7rNHUrcNBkI+lz5F9A==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/code-block@0.1.0': resolution: {integrity: sha512-jSpHFsgqnQXxDIssE4gvmdtFncaFQz5D6e22BnVjcCPk/udK+0A9jRwGFEG8JD2si9ZXBmU4WsuqQEczuZn4ww==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/code-inline@0.0.5': resolution: {integrity: sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/column@0.0.13': resolution: {integrity: sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/components@0.1.0': resolution: {integrity: sha512-Rx0eZk0XuzLKXC5NoMm8xuH72ALVsPYNb/BvcdCJx4EZAoVpQISb4sCqpo9blVYVIazNr4MqWroqFb3ZNrCLMQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/container@0.0.15': resolution: {integrity: sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/font@0.0.9': resolution: {integrity: sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/head@0.0.12': resolution: {integrity: sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/heading@0.0.15': resolution: {integrity: sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/hr@0.0.11': resolution: {integrity: sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/html@0.0.11': resolution: {integrity: sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/img@0.0.11': resolution: {integrity: sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/link@0.0.12': resolution: {integrity: sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/markdown@0.0.15': resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/preview@0.0.13': resolution: {integrity: sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5757,24 +5782,28 @@ packages: '@react-email/row@0.0.12': resolution: {integrity: sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/section@0.0.16': resolution: {integrity: sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/tailwind@1.0.5': resolution: {integrity: sha512-BH00cZSeFfP9HiDASl+sPHi7Hh77W5nzDgdnxtsVr/m3uQD9g180UwxcE3PhOfx0vRdLzQUU8PtmvvDfbztKQg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc '@react-email/text@0.1.5': resolution: {integrity: sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5819,8 +5848,8 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g==} + '@rolldown/binding-android-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -5831,8 +5860,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -5843,8 +5872,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.13': - resolution: {integrity: sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug==} + '@rolldown/binding-darwin-x64@1.0.0-rc.16': + resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -5855,8 +5884,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-rc.13': - resolution: {integrity: sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.16': + resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -5867,8 +5896,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13': - resolution: {integrity: sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': + resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -5879,8 +5908,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -5891,20 +5920,20 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.13': - resolution: {integrity: sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -5915,8 +5944,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.13': - resolution: {integrity: sha512-eRrPvat2YaVQcwwKi/JzOP6MKf1WRnOCr+VaI3cTWz3ZoLcP/654z90lVCJ4dAuMEpPdke0n+qyAqXDZdIC4rA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -5927,8 +5956,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.13': - resolution: {integrity: sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -5939,8 +5968,8 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.13': - resolution: {integrity: sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -5950,9 +5979,9 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.13': - resolution: {integrity: sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': + resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': @@ -5961,8 +5990,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13': - resolution: {integrity: sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -5979,8 +6008,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.13': - resolution: {integrity: sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -5988,8 +6017,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.42': resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} - '@rolldown/pluginutils@1.0.0-rc.13': - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} + '@rolldown/pluginutils@1.0.0-rc.16': + resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -7060,10 +7089,10 @@ packages: react-dom: optional: true - '@storybook/builder-vite@10.4.0-alpha.8': - resolution: {integrity: sha512-weLrxdNknHwHZrGMVfWjAcN48kIG5ipYJAWjKrx2nzhCaZY30DQ1SuVVaDiwVSUfTmncK/MX5weerJjb8Ny66g==} + '@storybook/builder-vite@10.4.0-alpha.10': + resolution: {integrity: sha512-yEH145GAEVrynuCprGbUIeryDv2bGB15RXyu/Yc6gbCAj98cIgCwNnSbH8HAK6AbPy0g9evKhAtCZyK132hCFQ==} peerDependencies: - storybook: ^10.4.0-alpha.8 + storybook: ^10.4.0-alpha.10 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 '@storybook/core@8.6.12': @@ -7074,12 +7103,12 @@ packages: prettier: optional: true - '@storybook/csf-plugin@10.4.0-alpha.8': - resolution: {integrity: sha512-h5GXJaAQGNRhko09qvoVAxPBLvKlQkgDFBgc/3TPZKd2t0fZMErdJPX6ixn4cOONn5SpDqeI/uej0OHC5uazlg==} + '@storybook/csf-plugin@10.4.0-alpha.10': + resolution: {integrity: sha512-YGRRAkZi5cH/eqggvG7u/N6zzJmxThveQ4DZfKxrlyiCTzKW6CTKedyzoHPnDpEf2XWzVz8IZvnM0D1UUs0EFg==} peerDependencies: esbuild: '*' rollup: '*' - storybook: ^10.4.0-alpha.8 + storybook: ^10.4.0-alpha.10 vite: '*' webpack: '*' peerDependenciesMeta: @@ -7735,8 +7764,8 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/bun@1.3.11': - resolution: {integrity: sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg==} + '@types/bun@1.3.12': + resolution: {integrity: sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A==} '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -8444,29 +8473,29 @@ packages: resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} engines: {node: '>=18.0.0'} - '@workflow/astro@4.0.0-beta.47': - resolution: {integrity: sha512-t/9R18hMKrwLVO1Gc61MUTsnRj+ZdQXvur5IkZWlMfo6xgH9RN5xUR8O0b2fN+GRBlMnzdR5hTG+DYH4PrWQ8w==} + '@workflow/astro@4.0.4': + resolution: {integrity: sha512-TVx1SY4KoYSkHS/nkhXP7wz10rYBKJ0o9oQGahS+kCBkGkD5kyKdAc4QR2IpynG/u/vVg599XJj2Bsh9m2Jsrw==} - '@workflow/builders@4.0.1-beta.64': - resolution: {integrity: sha512-RChF5D2XMyW63+1OiRovrQLlsGTpoA+A21SwvuoJ/XpoIIVQhz99z6sEwGABlk0Qj+z4ZJfyuSQdUs+zg7P+Ng==} + '@workflow/builders@4.0.5': + resolution: {integrity: sha512-UmlZOjkiDqb37NZjxpJ56zwg0MFAdv/XSfRJgU8a0JQOGdTiEhJ1pWdg0pAD96pcoDwNqGphSTBhf/QoRdXgnw==} - '@workflow/cli@4.2.0-beta.73': - resolution: {integrity: sha512-2jW1QX8/Y0C+uBOzvk4KZy8BoOwRgPHCI7Hx7hOrHxEmUrKVSj5jJTEWpwmagJl+gxCcbo1tB8YBD5yYRMzfwA==} + '@workflow/cli@4.2.4': + resolution: {integrity: sha512-NtVZNCt9CY2KtpT3FOSpQXIaj/zt8sCFfaNNzOIVCQLwfkGc6Dfi1nFtI6BELY0cWWAmCf3+ZlHOecluEx0Ynw==} hasBin: true - '@workflow/core@4.2.0-beta.73': - resolution: {integrity: sha512-F0DQrw11KO1tG5gIOk493Y+O3OwmI2K31z3/HehCD/HSh7LIgj7gQVwNR78dbkt5+4q3BL8RurRDN35hRqk1tg==} + '@workflow/core@4.2.4': + resolution: {integrity: sha512-uORE+d8KPwf5vTvpq/gcynFl4gmls8m6ESHvsR+AOERlQAXRgEysCBpUAFczCFWU1P16CTEBJvH5S+qpnTWQIA==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: '@opentelemetry/api': optional: true - '@workflow/errors@4.1.0-beta.19': - resolution: {integrity: sha512-AEZefVGpant/4eUJixnjGlK3LfyNPWp/C6YpmAsJbPPaFHPggKE7WT185BCMtXJMbpVKF/d/rNa7fxZ3J/yYhw==} + '@workflow/errors@4.1.1': + resolution: {integrity: sha512-T9x1MNKhoL9uMLP6KJNg2VyNz/Hf3cEB2WUaMU8fCEihDtHdHQ7q8J3sHIzFcHRg1FTnYFmVTk57Ycgfv8lZ5w==} - '@workflow/nest@0.0.0-beta.22': - resolution: {integrity: sha512-8pCwKGSPWscoKfqjca+K/AiI/sUF690iGChmSvMe9PWQKnMVYtcbawaujCf/i0ru+tMmfFO80Vm+iNpMj/YbZQ==} + '@workflow/nest@0.0.4': + resolution: {integrity: sha512-dW2vg3178toaLqPHMtpXJEGQ/EufBPez1Ew0NhMpuo0+IVA7bqNDylK7g0ScMtsCX7CL5GOziW9I2mUVvpYUng==} hasBin: true peerDependencies: '@nestjs/common': '>=10.0.0' @@ -8474,66 +8503,66 @@ packages: '@swc/cli': '>=0.4.0' '@swc/core': '>=1.5.0' - '@workflow/next@4.0.1-beta.69': - resolution: {integrity: sha512-+3As/uSlYhTtHE7r2qFess2HyJI0zVqXu3K7YvKgzNM+td6dl/SF0cbXcUgTy58WeFfPQoGCCumO6LNgC9c1oA==} + '@workflow/next@4.0.5': + resolution: {integrity: sha512-Nos/vWpVj9uHK0w05AFVEULaWQs8R3AQZoJtGCxvjHCUWAI3Od8iQIzC9IeugKaDuufkkzLcZOeWaGV9p+Ey0w==} peerDependencies: next: '>13' peerDependenciesMeta: next: optional: true - '@workflow/nitro@4.0.1-beta.68': - resolution: {integrity: sha512-g5yEEZpncc99fqdXZcQWSC2dvASbhzqLHKB4lOP2da+Sy8i2Fb86hKIwtSTgi/POpr/9WCI3u4F1i8sn3DBhig==} + '@workflow/nitro@4.0.5': + resolution: {integrity: sha512-M/jm+to+QiJI8/8r8tfz/4iayK0/vfsgu1703ec+ifPS8AYY0+LRWLIweb860vnEtydLuZgydIqts5CIgPsZcw==} - '@workflow/nuxt@4.0.1-beta.57': - resolution: {integrity: sha512-pTWDevRsscNoklP2R43a/ENUlBU/dBcQWxlvmrP7eTkK6LmRjvl1+S57fKiMcRzlYvhUB8yOAD9CDaZZ2jMecg==} + '@workflow/nuxt@4.0.5': + resolution: {integrity: sha512-Q7fv0VqhZ8NXrgUOhd+YSc3j1ZVlDratVOcJ8Omxd0j2Mn0feC3CGeglFjaYfuvY/B2t7xG9SCcCXBV74CrEdQ==} - '@workflow/rollup@4.0.0-beta.30': - resolution: {integrity: sha512-ZbJPwo01UyiyzBr6GIv20jYnfXfGm/PZ9yA4ARrkwwZt1X/G1S/J08T33iWYUkXV0RH+6DJUvJioHtn8QbL0DA==} + '@workflow/rollup@4.0.4': + resolution: {integrity: sha512-DqmSp89Y4WVoMkBWkiNll0b5mZ2WA9uwNsRuO4QOU0XHytuCnvTRGMf0ZV6fXAa3KyeXlgS1r0V8SHwt1ZQ7jg==} - '@workflow/serde@4.1.0-beta.2': - resolution: {integrity: sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww==} + '@workflow/serde@4.1.1': + resolution: {integrity: sha512-191/N2w3WlrapuAvtAT1knONuqJ9auOqM8c7yMMM7c6rqXAZQKkNJrOuuj/j0vp7x43rg0+fy90bqT/xQ5ki4w==} - '@workflow/sveltekit@4.0.0-beta.62': - resolution: {integrity: sha512-HetSMA+rh/ZbQTNH55wfSLFEoUhsQpKK7vX6aY35CUwVATiq1Ib8/hgVBM01ZI0HxD+T5HzbZg7wx9dJOJicXw==} + '@workflow/sveltekit@4.0.4': + resolution: {integrity: sha512-aqBJKSHhBUzZnJ08A0aSmimPXIk9o/ayS6zBpQESt6HgX3vrX7MbpklWKP9x0+3NzUDNN368O+Iahp+mJb5E9A==} - '@workflow/swc-plugin@4.1.0-beta.21': - resolution: {integrity: sha512-CcZG8T3oxMNils93OTomXT54pMwqH2IPheiZjg4bEz2aQtIQXGyU3ul0NRCDyLFgQa9tb3mgW18yOsOqajr0Tg==} + '@workflow/swc-plugin@4.1.0': + resolution: {integrity: sha512-FcWKJwzkRqf0u08/WCyg2n1H3932JQpFk3g6edE7trXKFW06a8o4F22k/xgPFsbxAq8UpywcIN7f46H0/uH5Tw==} peerDependencies: '@swc/core': 1.15.3 - '@workflow/typescript-plugin@4.0.1-beta.5': - resolution: {integrity: sha512-5upSEmro3cYqB5JS7qjUVJKovlSIy+Yg3ets2OEQxMn6UATeCf5Qxbrb2EOy02pW2QUdkfu1wZ2XUsbahRQjRg==} + '@workflow/typescript-plugin@4.0.2': + resolution: {integrity: sha512-7bw6aEl+QMZWWZmhJS5bydrSgmxQrG8Kyo5Zhdb7klu+/pBUyNMVTUZmnfe1xRjWborqvOevqYbSDh0a0gwnAw==} peerDependencies: typescript: '>=5.0.0' - '@workflow/utils@4.1.0-beta.13': - resolution: {integrity: sha512-3vVuXZVfLVeJ78MM6D0gNXg6hMZdDYAzmF92p+HxItI0B2Yk1EuDIIUfBXKWwTOKCCuKF4iroZt2u9BFqrs2AQ==} + '@workflow/utils@4.1.1': + resolution: {integrity: sha512-4+yJxzyeOBZsVRG8npvLsafCPt9E4bsFi/oUBBT2yLM5X4v+KUBLMwZOubShwcBix2/VOGau7mumvh12JSKjaA==} - '@workflow/vite@4.0.0-beta.23': - resolution: {integrity: sha512-EM5rDgrkwWN5vAY2YteuL8/bELEv6g2dckTHiEl4SuYNYZK/NLvQV7b57ypMNafWAc2hZ/euplE1fBqsuQEC3Q==} + '@workflow/vite@4.0.4': + resolution: {integrity: sha512-dEw5Dg6zdlsBwwEFYYqRIXApZ4kgqN/vMzZEyEbisJEofKNPDIYP1/nAh22DkYW55Nxa0YOKdqnhxQq+kdvX2A==} - '@workflow/web@4.1.0-beta.45': - resolution: {integrity: sha512-ITqHjQMS5QPj0lx4vGdyhASz/IrqKQcgnv97OBiKvnwcWCH+nszmP59LJ/BL9DTb0AR2ugFWh2FlGe1GJxTTZg==} + '@workflow/web@4.1.5': + resolution: {integrity: sha512-VBdRdOBIs/TsS79TxhnjnYcmXKIOwR57gWL+n/0GSvd7aaMHcvKBybmRUTMYOe0q110KXs31eJ4aLjWLYLQxGA==} - '@workflow/world-local@4.1.0-beta.46': - resolution: {integrity: sha512-jCDcJdQTDwq4+5BTf3OajUtRuDaXM6yYdrGsA0P4PAnY7grgOW+R1Thd4cW4EHJZYhOQ5bfgrCCCMF8nhAwukw==} + '@workflow/world-local@4.1.1': + resolution: {integrity: sha512-qQznGPy15nPD+CO0THxMDwozIrvEOkZuAkpI2S3/+hrvUF07mSHGsGCVp6eVaECSTi3dGseep9rKUXZhU/HGYw==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: '@opentelemetry/api': optional: true - '@workflow/world-vercel@4.1.0-beta.45': - resolution: {integrity: sha512-+2u8BtWnOWgdry22zJj9QSgh4s1WrTy9EvAJKx+sFnG24mrVBAW83IvqxpDIXAAd72PTFnEXyGHP4LUIO2KJag==} + '@workflow/world-vercel@4.1.2': + resolution: {integrity: sha512-GR0l0Hhm8JpILQgHn1gMGKNAlU6ioZEFDtyrM4haxz6JdcUE42JMNRGtw4IeHzsCXcXOZ7+SbVNFnEIVtG5faw==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: '@opentelemetry/api': optional: true - '@workflow/world@4.1.0-beta.14': - resolution: {integrity: sha512-23BC9d7m7DDuGuaLncMHZ/6XFJePsY7Dr2zVecRWpM6NvOmAKV+oiOav/HEBxUCdaccSshSsLRqwdHX9Q9HCZA==} + '@workflow/world@4.1.1': + resolution: {integrity: sha512-OVfswz2SCt1NKSihAIPlPx/ygGdkA8si69xTAZtAZQACphuhmcg5mm28aNPo0/7oxcUVD/tO/AF1uSUF4BGpRw==} peerDependencies: zod: 4.3.6 @@ -8928,6 +8957,7 @@ packages: aws-sdk@2.1692.0: resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} engines: {node: '>= 10.0.0'} + deprecated: The AWS SDK for JavaScript (v2) has reached end-of-support, and no longer receives updates. Please migrate your code to use AWS SDK for JavaScript (v3). More info https://a.co/cUPnyil aws-ssl-profiles@1.1.2: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} @@ -9108,8 +9138,8 @@ packages: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} - bun-types@1.3.11: - resolution: {integrity: sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg==} + bun-types@1.3.12: + resolution: {integrity: sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA==} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} @@ -14026,8 +14056,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-rc.13: - resolution: {integrity: sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw==} + rolldown@1.0.0-rc.16: + resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -14764,12 +14794,12 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me tauri-plugin-context-menu@0.5.0: resolution: {integrity: sha512-CkAjSyxLx26hTXabG5Unbv+GWeH0XYNQB3zTqRxHpp257mWX8I4oASp8YF5T3zxFQEK++ZHqMZHpLrQ3usShRQ==} @@ -15967,8 +15997,8 @@ packages: engines: {node: '>=16'} hasBin: true - workflow@4.2.0-beta.73: - resolution: {integrity: sha512-qojoyPIommGOVCj/LHOZEBRJqlSbijLOKDr5yzBokhc7qO2wJAXixVshPH6mOxHJc22KuYKFMlJu+ocqhDKT0A==} + workflow@4.2.4: + resolution: {integrity: sha512-F7HT6uXIF0YaERtfK9kdXgebeXOUtSuCvQElIJYh5cjYmUS7JcRLsAsQSUeQ4Dcjvnml4t1efHypTR7gk/2d3g==} hasBin: true peerDependencies: '@opentelemetry/api': '1' @@ -17916,6 +17946,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 @@ -17936,6 +17972,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 @@ -17946,6 +17987,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -19044,10 +19090,10 @@ snapshots: '@solid-primitives/utils': 6.3.1(solid-js@1.9.6) solid-js: 1.9.6 - '@kubiks/otel-drizzle@2.1.0(@opentelemetry/api@1.9.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))': + '@kubiks/otel-drizzle@2.1.0(@opentelemetry/api@1.9.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))': dependencies: '@opentelemetry/api': 1.9.0 - drizzle-orm: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2) + drizzle-orm: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2) '@logdna/tail-file@2.2.0': {} @@ -19288,10 +19334,10 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 '@tybys/wasm-util': 0.10.1 optional: true @@ -19537,7 +19583,7 @@ snapshots: '@npmcli/fs@3.1.1': dependencies: - semver: 7.7.3 + semver: 7.7.4 '@npmcli/git@5.0.8': dependencies: @@ -19571,7 +19617,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 pacote: 18.0.6 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - bluebird - supports-color @@ -19588,7 +19634,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.2 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - bluebird @@ -20071,7 +20117,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.37.0': {} - '@oxc-project/types@0.123.0': {} + '@oxc-project/types@0.126.0': {} '@oxc-project/types@0.94.0': {} @@ -21162,67 +21208,67 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.13': + '@rolldown/binding-android-arm64@1.0.0-rc.16': optional: true '@rolldown/binding-darwin-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.13': + '@rolldown/binding-darwin-arm64@1.0.0-rc.16': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.13': + '@rolldown/binding-darwin-x64@1.0.0-rc.16': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.42': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.13': + '@rolldown/binding-freebsd-x64@1.0.0-rc.16': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.13': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.13': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.13': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.13': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': @@ -21230,17 +21276,17 @@ snapshots: '@napi-rs/wasm-runtime': 1.0.6 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.13': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': @@ -21249,12 +21295,12 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.13': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': optional: true '@rolldown/pluginutils@1.0.0-beta.42': {} - '@rolldown/pluginutils@1.0.0-rc.13': {} + '@rolldown/pluginutils@1.0.0-rc.16': {} '@rollup/plugin-alias@5.1.1(rollup@4.40.2)': optionalDependencies: @@ -21505,7 +21551,7 @@ snapshots: '@smithy/abort-controller@4.2.0': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@smithy/abort-controller@4.2.12': @@ -21936,7 +21982,7 @@ snapshots: '@smithy/querystring-builder@4.2.0': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.13.1 '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 @@ -21958,7 +22004,7 @@ snapshots: '@smithy/querystring-parser@4.2.0': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.13.1 tslib: 2.8.1 '@smithy/querystring-parser@4.2.12': @@ -21972,7 +22018,7 @@ snapshots: '@smithy/service-error-classification@4.2.0': dependencies: - '@smithy/types': 4.6.0 + '@smithy/types': 4.13.1 '@smithy/service-error-classification@4.2.12': dependencies: @@ -22531,11 +22577,11 @@ snapshots: dependencies: solid-js: 1.9.6 - '@solidjs/start@1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)': + '@solidjs/start@1.1.3(@testing-library/jest-dom@6.5.0)(@types/node@22.15.17)(jiti@2.6.1)(solid-js@1.9.6)(terser@5.44.0)(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)': dependencies: '@tanstack/server-functions-plugin': 1.119.2(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.13 @@ -22546,7 +22592,7 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.6) tinyglobby: 0.2.13 - vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) vite-plugin-solid: 2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)) transitivePeerDependencies: - '@testing-library/jest-dom' @@ -22676,9 +22722,9 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/builder-vite@10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5))': + '@storybook/builder-vite@10.4.0-alpha.10(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5))': dependencies: - '@storybook/csf-plugin': 10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) + '@storybook/csf-plugin': 10.4.0-alpha.10(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) storybook: 8.6.12(prettier@3.7.4) ts-dedent: 2.2.0 vite: 6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) @@ -22708,7 +22754,7 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5))': + '@storybook/csf-plugin@10.4.0-alpha.10(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5))': dependencies: storybook: 8.6.12(prettier@3.7.4) unplugin: 2.3.11 @@ -23378,9 +23424,9 @@ snapshots: '@types/braces@3.0.5': {} - '@types/bun@1.3.11': + '@types/bun@1.3.12': dependencies: - bun-types: 1.3.11 + bun-types: 1.3.12 '@types/cacheable-request@6.0.3': dependencies: @@ -23922,8 +23968,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -24000,7 +24046,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': dependencies: '@babel/parser': 7.27.2 acorn: 8.14.1 @@ -24011,18 +24057,18 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) - '@vinxi/server-components@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': + '@vinxi/server-components@0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1)) acorn: 8.14.1 acorn-loose: 8.5.0 acorn-typescript: 1.4.13(acorn@8.14.1) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1) '@virtual-grid/core@2.0.1': {} @@ -24306,13 +24352,13 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.1 tslib: 2.8.1 - '@workflow/astro@4.0.0-beta.47(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/astro@4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/rollup': 4.0.0-beta.30(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/vite': 4.0.0-beta.23(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/rollup': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/vite': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) exsolve: 1.0.8 pathe: 2.0.3 transitivePeerDependencies: @@ -24321,13 +24367,13 @@ snapshots: - aws-crt - supports-color - '@workflow/builders@4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/builders@4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/core': 4.2.0-beta.73(@opentelemetry/api@1.9.0) - '@workflow/errors': 4.1.0-beta.19 - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/utils': 4.1.0-beta.13 + '@workflow/core': 4.2.4(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.1 + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/utils': 4.1.1 builtin-modules: 5.0.0 chalk: 5.6.2 enhanced-resolve: 5.19.0 @@ -24341,21 +24387,21 @@ snapshots: - aws-crt - supports-color - '@workflow/cli@4.2.0-beta.73(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/cli@4.2.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: '@oclif/core': 4.8.1 '@oclif/plugin-help': 6.2.37 '@swc/core': 1.15.3(@swc/helpers@0.5.17) '@vercel/cli-auth': 0.0.1 - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/core': 4.2.0-beta.73(@opentelemetry/api@1.9.0) - '@workflow/errors': 4.1.0-beta.19 - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/utils': 4.1.0-beta.13 - '@workflow/web': 4.1.0-beta.45 - '@workflow/world': 4.1.0-beta.14(zod@4.3.6) - '@workflow/world-local': 4.1.0-beta.46(@opentelemetry/api@1.9.0) - '@workflow/world-vercel': 4.1.0-beta.45(@opentelemetry/api@1.9.0) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/core': 4.2.4(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.1 + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/utils': 4.1.1 + '@workflow/web': 4.1.5 + '@workflow/world': 4.1.1(zod@4.3.6) + '@workflow/world-local': 4.1.1(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.1.2(@opentelemetry/api@1.9.0) boxen: 8.0.1 builtin-modules: 5.0.0 chalk: 5.6.2 @@ -24379,24 +24425,25 @@ snapshots: - aws-crt - supports-color - '@workflow/core@4.2.0-beta.73(@opentelemetry/api@1.9.0)': + '@workflow/core@4.2.4(@opentelemetry/api@1.9.0)': dependencies: '@aws-sdk/credential-provider-web-identity': 3.972.13 '@jridgewell/trace-mapping': 0.3.31 '@standard-schema/spec': 1.0.0 '@types/ms': 2.1.0 '@vercel/functions': 3.4.3(@aws-sdk/credential-provider-web-identity@3.972.13) - '@workflow/errors': 4.1.0-beta.19 - '@workflow/serde': 4.1.0-beta.2 - '@workflow/utils': 4.1.0-beta.13 - '@workflow/world': 4.1.0-beta.14(zod@4.3.6) - '@workflow/world-local': 4.1.0-beta.46(@opentelemetry/api@1.9.0) - '@workflow/world-vercel': 4.1.0-beta.45(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.1 + '@workflow/serde': 4.1.1 + '@workflow/utils': 4.1.1 + '@workflow/world': 4.1.1(zod@4.3.6) + '@workflow/world-local': 4.1.1(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.1.2(@opentelemetry/api@1.9.0) debug: 4.4.3(supports-color@8.1.1) devalue: 5.6.3 ms: 2.1.3 nanoid: 5.1.6 seedrandom: 3.0.5 + semver: 7.7.4 ulid: 3.0.1 zod: 4.3.6 optionalDependencies: @@ -24405,19 +24452,19 @@ snapshots: - aws-crt - supports-color - '@workflow/errors@4.1.0-beta.19': + '@workflow/errors@4.1.1': dependencies: - '@workflow/utils': 4.1.0-beta.13 + '@workflow/utils': 4.1.1 ms: 2.1.3 - '@workflow/nest@0.0.0-beta.22(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)': + '@workflow/nest@0.0.4(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)': dependencies: '@nestjs/common': 11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2) '@swc/cli': 0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0) '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' @@ -24425,12 +24472,12 @@ snapshots: - aws-crt - supports-color - '@workflow/next@4.0.1-beta.69(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@workflow/next@4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/core': 4.2.0-beta.73(@opentelemetry/api@1.9.0) - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/core': 4.2.4(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) semver: 7.7.4 watchpack: 2.5.1 optionalDependencies: @@ -24441,14 +24488,14 @@ snapshots: - aws-crt - supports-color - '@workflow/nitro@4.0.1-beta.68(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/nitro@4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/core': 4.2.0-beta.73(@opentelemetry/api@1.9.0) - '@workflow/rollup': 4.0.0-beta.30(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/vite': 4.0.0-beta.23(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/core': 4.2.4(@opentelemetry/api@1.9.0) + '@workflow/rollup': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/vite': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) exsolve: 1.0.8 pathe: 2.0.3 transitivePeerDependencies: @@ -24457,10 +24504,10 @@ snapshots: - aws-crt - supports-color - '@workflow/nuxt@4.0.1-beta.57(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(magicast@0.3.5)': + '@workflow/nuxt@4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(magicast@0.3.5)': dependencies: '@nuxt/kit': 4.4.2(magicast@0.3.5) - '@workflow/nitro': 4.0.1-beta.68(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/nitro': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' @@ -24468,11 +24515,11 @@ snapshots: - magicast - supports-color - '@workflow/rollup@4.0.0-beta.30(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/rollup@4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) exsolve: 1.0.7 transitivePeerDependencies: - '@opentelemetry/api' @@ -24480,15 +24527,15 @@ snapshots: - aws-crt - supports-color - '@workflow/serde@4.1.0-beta.2': {} + '@workflow/serde@4.1.1': {} - '@workflow/sveltekit@4.0.0-beta.62(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/sveltekit@4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/rollup': 4.0.0-beta.30(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/swc-plugin': 4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/vite': 4.0.0-beta.23(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/rollup': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/swc-plugin': 4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/vite': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) exsolve: 1.0.8 fs-extra: 11.3.3 pathe: 2.0.3 @@ -24498,39 +24545,39 @@ snapshots: - aws-crt - supports-color - '@workflow/swc-plugin@4.1.0-beta.21(@swc/core@1.15.3(@swc/helpers@0.5.17))': + '@workflow/swc-plugin@4.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17))': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/typescript-plugin@4.0.1-beta.5(typescript@5.8.3)': + '@workflow/typescript-plugin@4.0.2(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@workflow/utils@4.1.0-beta.13': + '@workflow/utils@4.1.1': dependencies: ms: 2.1.3 - '@workflow/vite@4.0.0-beta.23(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': + '@workflow/vite@4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)': dependencies: - '@workflow/builders': 4.0.1-beta.64(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/builders': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' - aws-crt - supports-color - '@workflow/web@4.1.0-beta.45': + '@workflow/web@4.1.5': dependencies: express: 4.22.1 transitivePeerDependencies: - supports-color - '@workflow/world-local@4.1.0-beta.46(@opentelemetry/api@1.9.0)': + '@workflow/world-local@4.1.1(@opentelemetry/api@1.9.0)': dependencies: '@vercel/queue': 0.1.4 - '@workflow/errors': 4.1.0-beta.19 - '@workflow/utils': 4.1.0-beta.13 - '@workflow/world': 4.1.0-beta.14(zod@4.3.6) + '@workflow/errors': 4.1.1 + '@workflow/utils': 4.1.1 + '@workflow/world': 4.1.1(zod@4.3.6) async-sema: 3.1.1 ulid: 3.0.1 undici: 7.22.0 @@ -24538,19 +24585,19 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 - '@workflow/world-vercel@4.1.0-beta.45(@opentelemetry/api@1.9.0)': + '@workflow/world-vercel@4.1.2(@opentelemetry/api@1.9.0)': dependencies: '@vercel/oidc': 3.2.0 '@vercel/queue': 0.1.4 - '@workflow/errors': 4.1.0-beta.19 - '@workflow/world': 4.1.0-beta.14(zod@4.3.6) + '@workflow/errors': 4.1.1 + '@workflow/world': 4.1.1(zod@4.3.6) cbor-x: 1.6.0 undici: 7.22.0 zod: 4.3.6 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@workflow/world@4.1.0-beta.14(zod@4.3.6)': + '@workflow/world@4.1.1(zod@4.3.6)': dependencies: ulid: 3.0.1 zod: 4.3.6 @@ -24679,6 +24726,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -25177,7 +25228,7 @@ snapshots: bytes: 3.1.2 content-type: 1.0.5 debug: 4.4.3(supports-color@8.1.1) - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.6.3 on-finished: 2.4.1 qs: 6.14.0 @@ -25261,7 +25312,7 @@ snapshots: builtin-modules@5.0.0: {} - bun-types@1.3.11: + bun-types@1.3.12: dependencies: '@types/node': 20.19.21 @@ -25828,9 +25879,9 @@ snapshots: dayjs@1.11.13: {} - db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2): + db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2): optionalDependencies: - drizzle-orm: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2) + drizzle-orm: 0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2) mysql2: 3.15.2 debounce@2.2.0: {} @@ -26108,12 +26159,12 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2): + drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2): optionalDependencies: '@cloudflare/workers-types': 4.20250507.0 '@opentelemetry/api': 1.9.0 '@planetscale/database': 1.19.0 - bun-types: 1.3.11 + bun-types: 1.3.12 mysql2: 3.15.2 dts-resolver@2.1.2: {} @@ -27262,7 +27313,7 @@ snapshots: etag: 1.8.1 finalhandler: 1.3.2 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 @@ -29805,7 +29856,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nitropack@2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(xml2js@0.6.2): + nitropack@2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(xml2js@0.6.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@netlify/functions': 3.1.5(encoding@0.1.13)(rollup@4.40.2) @@ -29827,7 +29878,7 @@ snapshots: cookie-es: 2.0.0 croner: 9.0.0 crossws: 0.3.5 - db0: 0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2) + db0: 0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2) defu: 6.1.4 destr: 2.0.5 dot-prop: 9.0.0 @@ -29859,7 +29910,7 @@ snapshots: pretty-bytes: 6.1.1 radix3: 1.1.2 rollup: 4.40.2 - rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-rc.13)(rollup@4.40.2) + rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-rc.16)(rollup@4.40.2) scule: 1.3.0 semver: 7.7.2 serve-placeholder: 2.0.2 @@ -29873,7 +29924,7 @@ snapshots: unenv: 2.0.0-rc.15 unimport: 5.0.1 unplugin-utils: 0.2.4 - unstorage: 1.16.0(@planetscale/database@1.19.0)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(ioredis@5.6.1) + unstorage: 1.16.0(@planetscale/database@1.19.0)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(ioredis@5.6.1) untyped: 2.0.0 unwasm: 0.3.9 youch: 4.1.0-beta.7 @@ -30002,7 +30053,7 @@ snapshots: npm-install-checks@6.3.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 npm-normalize-package-bin@3.0.1: {} @@ -30010,7 +30061,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-name: 5.0.1 npm-packlist@8.0.2: @@ -30022,7 +30073,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 11.0.3 - semver: 7.7.3 + semver: 7.7.4 npm-registry-fetch@17.1.0: dependencies: @@ -31297,7 +31348,7 @@ snapshots: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.16.11(rolldown@1.0.0-rc.13)(typescript@5.8.3): + rolldown-plugin-dts@0.16.11(rolldown@1.0.0-rc.16)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 @@ -31308,7 +31359,7 @@ snapshots: dts-resolver: 2.1.2 get-tsconfig: 4.11.0 magic-string: 0.30.19 - rolldown: 1.0.0-rc.13 + rolldown: 1.0.0-rc.16 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -31336,26 +31387,26 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42 - rolldown@1.0.0-rc.13: + rolldown@1.0.0-rc.16: dependencies: - '@oxc-project/types': 0.123.0 - '@rolldown/pluginutils': 1.0.0-rc.13 + '@oxc-project/types': 0.126.0 + '@rolldown/pluginutils': 1.0.0-rc.16 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.13 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.13 - '@rolldown/binding-darwin-x64': 1.0.0-rc.13 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.13 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.13 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.13 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.13 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.13 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.13 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.13 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.13 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.13 + '@rolldown/binding-android-arm64': 1.0.0-rc.16 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.16 + '@rolldown/binding-darwin-x64': 1.0.0-rc.16 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16 rollup-plugin-inject@3.0.2: dependencies: @@ -31367,14 +31418,14 @@ snapshots: dependencies: rollup-plugin-inject: 3.0.2 - rollup-plugin-visualizer@5.14.0(rolldown@1.0.0-rc.13)(rollup@4.40.2): + rollup-plugin-visualizer@5.14.0(rolldown@1.0.0-rc.16)(rollup@4.40.2): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-rc.13 + rolldown: 1.0.0-rc.16 rollup: 4.40.2 rollup-pluginutils@2.8.2: @@ -32000,7 +32051,7 @@ snapshots: storybook-solidjs-vite@1.0.0-beta.7(@storybook/test@8.6.12(storybook@8.6.12(prettier@3.7.4)))(esbuild@0.25.5)(rollup@4.40.2)(solid-js@1.9.6)(storybook@8.6.12(prettier@3.7.4))(vite-plugin-solid@2.11.6(@testing-library/jest-dom@6.5.0)(solid-js@1.9.6)(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1)))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)): dependencies: - '@storybook/builder-vite': 10.4.0-alpha.8(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) + '@storybook/builder-vite': 10.4.0-alpha.10(esbuild@0.25.5)(rollup@4.40.2)(storybook@8.6.12(prettier@3.7.4))(vite@6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1))(webpack@5.101.3(esbuild@0.25.5)) '@storybook/types': 9.0.0-alpha.1(storybook@8.6.12(prettier@3.7.4)) magic-string: 0.30.17 solid-js: 1.9.6 @@ -32641,8 +32692,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-rc.13 - rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-rc.13)(typescript@5.8.3) + rolldown: 1.0.0-rc.16 + rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-rc.16)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.15 @@ -33122,7 +33173,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 - unstorage@1.16.0(@planetscale/database@1.19.0)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(ioredis@5.6.1): + unstorage@1.16.0(@planetscale/database@1.19.0)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(ioredis@5.6.1): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -33134,7 +33185,7 @@ snapshots: ufo: 1.6.1 optionalDependencies: '@planetscale/database': 1.19.0 - db0: 0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2) + db0: 0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2) ioredis: 5.6.1 untun@0.1.3: @@ -33300,7 +33351,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1): + vinxi@0.5.6(@planetscale/database@1.19.0)(@types/node@22.15.17)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.6.1)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(terser@5.44.0)(xml2js@0.6.2)(yaml@2.8.1): dependencies: '@babel/core': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) @@ -33322,7 +33373,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.13)(xml2js@0.6.2) + nitropack: 2.11.11(@planetscale/database@1.19.0)(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(encoding@0.1.13)(mysql2@3.15.2)(rolldown@1.0.0-rc.16)(xml2js@0.6.2) node-fetch-native: 1.6.6 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -33333,7 +33384,7 @@ snapshots: ufo: 1.6.1 unctx: 2.4.1 unenv: 1.10.0 - unstorage: 1.16.0(@planetscale/database@1.19.0)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.11)(mysql2@3.15.2))(mysql2@3.15.2))(ioredis@5.6.1) + unstorage: 1.16.0(@planetscale/database@1.19.0)(db0@0.3.2(drizzle-orm@0.44.6(@cloudflare/workers-types@4.20250507.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.12)(mysql2@3.15.2))(mysql2@3.15.2))(ioredis@5.6.1) vite: 6.3.5(@types/node@22.15.17)(jiti@2.6.1)(terser@5.44.0)(yaml@2.8.1) zod: 3.25.76 transitivePeerDependencies: @@ -33811,20 +33862,20 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250408.0 '@cloudflare/workerd-windows-64': 1.20250408.0 - workflow@4.2.0-beta.73(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.3.5)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.8.3): - dependencies: - '@workflow/astro': 4.0.0-beta.47(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/cli': 4.2.0-beta.73(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/core': 4.2.0-beta.73(@opentelemetry/api@1.9.0) - '@workflow/errors': 4.1.0-beta.19 - '@workflow/nest': 0.0.0-beta.22(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17) - '@workflow/next': 4.0.1-beta.69(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) - '@workflow/nitro': 4.0.1-beta.68(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/nuxt': 4.0.1-beta.57(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(magicast@0.3.5) - '@workflow/rollup': 4.0.0-beta.30(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/sveltekit': 4.0.0-beta.62(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) - '@workflow/typescript-plugin': 4.0.1-beta.5(typescript@5.8.3) - '@workflow/utils': 4.1.0-beta.13 + workflow@4.2.4(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.3.5)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(typescript@5.8.3): + dependencies: + '@workflow/astro': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/cli': 4.2.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/core': 4.2.4(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.1.1 + '@workflow/nest': 0.0.4(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.17(@nestjs/common@11.1.17(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.0)(@swc/cli@0.8.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17) + '@workflow/next': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(next@16.2.1(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + '@workflow/nitro': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/nuxt': 4.0.5(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17)(magicast@0.3.5) + '@workflow/rollup': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/sveltekit': 4.0.4(@opentelemetry/api@1.9.0)(@swc/helpers@0.5.17) + '@workflow/typescript-plugin': 4.0.2(typescript@5.8.3) + '@workflow/utils': 4.1.1 ms: 2.1.3 optionalDependencies: '@opentelemetry/api': 1.9.0