From 9de7a00373a0bd5a18884320fa4198a50eefd0a9 Mon Sep 17 00:00:00 2001 From: Vikhyath Mondreti Date: Wed, 17 Sep 2025 15:41:13 -0700 Subject: [PATCH] improvement(code-structure): move db into separate package (#1364) * improvement(code-structure): move db into separate package * make db separate package * remake bun lock * update imports to not maintain two separate ones * fix CI for tests by adding dummy url * vercel build fix attempt * update bun lock * regenerate bun lock * fix mocks * remove db commands from apps/sim package json --- .github/workflows/ci.yml | 6 +- README.md | 5 +- apps/sim/app/api/__test-utils__/utils.ts | 14 +- .../api/auth/oauth/connections/route.test.ts | 6 +- .../app/api/auth/oauth/connections/route.ts | 3 +- .../api/auth/oauth/credentials/route.test.ts | 4 +- .../app/api/auth/oauth/credentials/route.ts | 4 +- .../api/auth/oauth/disconnect/route.test.ts | 4 +- .../app/api/auth/oauth/disconnect/route.ts | 4 +- .../api/auth/oauth/microsoft/file/route.ts | 4 +- .../api/auth/oauth/microsoft/files/route.ts | 4 +- apps/sim/app/api/auth/oauth/utils.test.ts | 2 +- apps/sim/app/api/auth/oauth/utils.ts | 4 +- .../api/auth/oauth/wealthbox/item/route.ts | 4 +- .../api/auth/oauth/wealthbox/items/route.ts | 4 +- apps/sim/app/api/billing/portal/route.ts | 4 +- apps/sim/app/api/billing/route.ts | 4 +- apps/sim/app/api/billing/update-cost/route.ts | 4 +- .../sim/app/api/chat/[subdomain]/otp/route.ts | 4 +- .../app/api/chat/[subdomain]/route.test.ts | 8 +- apps/sim/app/api/chat/[subdomain]/route.ts | 4 +- apps/sim/app/api/chat/edit/[id]/route.test.ts | 4 +- apps/sim/app/api/chat/edit/[id]/route.ts | 4 +- apps/sim/app/api/chat/route.test.ts | 4 +- apps/sim/app/api/chat/route.ts | 4 +- .../chat/subdomains/validate/route.test.ts | 4 +- .../app/api/chat/subdomains/validate/route.ts | 4 +- apps/sim/app/api/chat/utils.test.ts | 2 +- apps/sim/app/api/chat/utils.ts | 4 +- .../api/copilot/api-keys/validate/route.ts | 4 +- apps/sim/app/api/copilot/chat/route.test.ts | 4 +- apps/sim/app/api/copilot/chat/route.ts | 4 +- .../chat/update-messages/route.test.ts | 4 +- .../api/copilot/chat/update-messages/route.ts | 4 +- apps/sim/app/api/copilot/chats/route.ts | 4 +- .../copilot/checkpoints/revert/route.test.ts | 4 +- .../api/copilot/checkpoints/revert/route.ts | 4 +- .../app/api/copilot/checkpoints/route.test.ts | 4 +- apps/sim/app/api/copilot/checkpoints/route.ts | 4 +- apps/sim/app/api/copilot/feedback/route.ts | 4 +- apps/sim/app/api/environment/route.ts | 4 +- apps/sim/app/api/folders/[id]/route.test.ts | 36 +- apps/sim/app/api/folders/[id]/route.ts | 4 +- apps/sim/app/api/folders/route.test.ts | 2 +- apps/sim/app/api/folders/route.ts | 4 +- .../[id]/documents/[documentId]/route.test.ts | 2 +- .../knowledge/[id]/documents/route.test.ts | 2 +- apps/sim/app/api/knowledge/[id]/route.test.ts | 2 +- apps/sim/app/api/knowledge/route.test.ts | 2 +- .../app/api/knowledge/search/route.test.ts | 2 +- .../app/api/knowledge/search/utils.test.ts | 2 +- apps/sim/app/api/knowledge/search/utils.ts | 4 +- apps/sim/app/api/knowledge/utils.test.ts | 2 +- apps/sim/app/api/knowledge/utils.ts | 4 +- apps/sim/app/api/logs/[id]/route.ts | 4 +- apps/sim/app/api/logs/cleanup/route.ts | 6 +- .../api/logs/execution/[executionId]/route.ts | 4 +- apps/sim/app/api/logs/route.ts | 4 +- .../app/api/mcp/servers/[id]/refresh/route.ts | 4 +- apps/sim/app/api/mcp/servers/[id]/route.ts | 4 +- apps/sim/app/api/mcp/servers/route.ts | 4 +- apps/sim/app/api/memory/[id]/route.ts | 4 +- apps/sim/app/api/memory/route.ts | 4 +- .../[id]/invitations/[invitationId]/route.ts | 12 +- .../organizations/[id]/invitations/route.ts | 20 +- .../[id]/members/[memberId]/route.ts | 4 +- .../api/organizations/[id]/members/route.ts | 4 +- apps/sim/app/api/organizations/[id]/route.ts | 4 +- .../organizations/[id]/workspaces/route.ts | 4 +- apps/sim/app/api/schedules/[id]/route.ts | 4 +- .../app/api/schedules/[id]/status/route.ts | 4 +- .../app/api/schedules/execute/route.test.ts | 6 +- apps/sim/app/api/schedules/execute/route.ts | 4 +- apps/sim/app/api/schedules/route.test.ts | 6 +- apps/sim/app/api/schedules/route.ts | 4 +- apps/sim/app/api/templates/[id]/route.ts | 4 +- apps/sim/app/api/templates/[id]/star/route.ts | 4 +- apps/sim/app/api/templates/[id]/use/route.ts | 4 +- apps/sim/app/api/templates/route.ts | 4 +- apps/sim/app/api/tools/custom/route.test.ts | 4 +- apps/sim/app/api/tools/custom/route.ts | 4 +- apps/sim/app/api/tools/gmail/label/route.ts | 4 +- apps/sim/app/api/tools/gmail/labels/route.ts | 4 +- .../tools/microsoft_planner/tasks/route.ts | 4 +- .../app/api/tools/onedrive/folder/route.ts | 4 +- .../app/api/tools/onedrive/folders/route.ts | 4 +- .../app/api/tools/outlook/folders/route.ts | 4 +- .../app/api/tools/sharepoint/site/route.ts | 4 +- .../app/api/tools/sharepoint/sites/route.ts | 4 +- .../sim/app/api/tools/wealthbox/item/route.ts | 4 +- .../app/api/tools/wealthbox/items/route.ts | 4 +- .../app/api/users/me/api-keys/[id]/route.ts | 4 +- apps/sim/app/api/users/me/api-keys/route.ts | 4 +- apps/sim/app/api/users/me/profile/route.ts | 4 +- apps/sim/app/api/users/me/settings/route.ts | 4 +- .../subscription/[id]/transfer/route.test.ts | 4 +- .../me/subscription/[id]/transfer/route.ts | 4 +- apps/sim/app/api/v1/logs/[id]/route.ts | 4 +- .../v1/logs/executions/[executionId]/route.ts | 14 +- apps/sim/app/api/v1/logs/filters.ts | 2 +- apps/sim/app/api/v1/logs/route.ts | 4 +- apps/sim/app/api/wand-generate/route.ts | 4 +- apps/sim/app/api/webhooks/[id]/route.ts | 4 +- apps/sim/app/api/webhooks/route.ts | 4 +- apps/sim/app/api/webhooks/test/route.ts | 4 +- .../api/webhooks/trigger/[path]/route.test.ts | 8 +- .../app/api/webhooks/trigger/[path]/route.ts | 4 +- .../api/workflows/[id]/autolayout/route.ts | 4 +- .../api/workflows/[id]/chat/status/route.ts | 4 +- .../api/workflows/[id]/deploy/route.test.ts | 8 +- .../app/api/workflows/[id]/deploy/route.ts | 4 +- .../app/api/workflows/[id]/deployed/route.ts | 4 +- .../app/api/workflows/[id]/duplicate/route.ts | 4 +- .../api/workflows/[id]/execute/route.test.ts | 4 +- .../app/api/workflows/[id]/execute/route.ts | 4 +- .../[id]/log-webhook/[webhookId]/route.ts | 4 +- .../api/workflows/[id]/log-webhook/route.ts | 4 +- .../workflows/[id]/log-webhook/test/route.ts | 4 +- .../[id]/revert-to-deployed/route.ts | 4 +- apps/sim/app/api/workflows/[id]/route.test.ts | 26 +- apps/sim/app/api/workflows/[id]/route.ts | 4 +- .../sim/app/api/workflows/[id]/state/route.ts | 4 +- .../sim/app/api/workflows/[id]/stats/route.ts | 4 +- .../app/api/workflows/[id]/variables/route.ts | 4 +- apps/sim/app/api/workflows/[id]/yaml/route.ts | 4 +- .../app/api/workflows/public/[id]/route.ts | 4 +- apps/sim/app/api/workflows/route.ts | 4 +- .../app/api/workflows/yaml/export/route.ts | 4 +- .../workspaces/[id]/api-keys/[keyId]/route.ts | 4 +- .../app/api/workspaces/[id]/api-keys/route.ts | 4 +- .../api/workspaces/[id]/environment/route.ts | 4 +- .../api/workspaces/[id]/permissions/route.ts | 4 +- apps/sim/app/api/workspaces/[id]/route.ts | 6 +- .../invitations/[invitationId]/route.test.ts | 8 +- .../invitations/[invitationId]/route.ts | 16 +- .../api/workspaces/invitations/route.test.ts | 4 +- .../app/api/workspaces/invitations/route.ts | 18 +- .../app/api/workspaces/members/[id]/route.ts | 4 +- apps/sim/app/api/workspaces/members/route.ts | 4 +- apps/sim/app/api/workspaces/route.ts | 4 +- .../[workspaceId]/templates/[id]/page.tsx | 4 +- .../[workspaceId]/templates/page.tsx | 4 +- apps/sim/background/logs-webhook-delivery.ts | 12 +- apps/sim/background/webhook-execution.ts | 4 +- apps/sim/background/workflow-execution.ts | 4 +- apps/sim/drizzle.config.ts | 4 +- apps/sim/hooks/use-workspace-permissions.ts | 2 +- apps/sim/lib/api-key/service.ts | 4 +- apps/sim/lib/auth.ts | 4 +- apps/sim/lib/auth/credential-access.ts | 4 +- apps/sim/lib/auth/hybrid.ts | 4 +- apps/sim/lib/billing/authorization.ts | 4 +- .../lib/billing/calculations/usage-monitor.ts | 4 +- apps/sim/lib/billing/core/billing.ts | 4 +- apps/sim/lib/billing/core/organization.ts | 4 +- apps/sim/lib/billing/core/subscription.ts | 4 +- apps/sim/lib/billing/core/usage.ts | 4 +- apps/sim/lib/billing/organization.ts | 4 +- .../lib/billing/validation/seat-management.ts | 4 +- apps/sim/lib/billing/webhooks/enterprise.ts | 4 +- apps/sim/lib/billing/webhooks/invoices.ts | 4 +- apps/sim/lib/copilot/process-contents.ts | 8 +- .../tools/server/docs/search-documentation.ts | 4 +- .../server/user/get-oauth-credentials.ts | 4 +- .../server/user/set-environment-variables.ts | 4 +- .../tools/server/workflow/edit-workflow.ts | 4 +- .../server/workflow/get-workflow-console.ts | 4 +- apps/sim/lib/email/unsubscribe.ts | 4 +- apps/sim/lib/environment/utils.ts | 4 +- apps/sim/lib/idempotency/cleanup.ts | 4 +- apps/sim/lib/idempotency/service.ts | 4 +- apps/sim/lib/knowledge/chunks/service.ts | 4 +- apps/sim/lib/knowledge/documents/service.ts | 4 +- apps/sim/lib/knowledge/service.ts | 4 +- apps/sim/lib/knowledge/tags/service.ts | 4 +- apps/sim/lib/logs/events.ts | 4 +- apps/sim/lib/logs/execution/logger.ts | 18 +- .../lib/logs/execution/snapshot/service.ts | 4 +- apps/sim/lib/mcp/service.ts | 4 +- apps/sim/lib/permissions/utils.test.ts | 6 +- apps/sim/lib/permissions/utils.ts | 4 +- .../sim/lib/webhooks/gmail-polling-service.ts | 4 +- .../lib/webhooks/outlook-polling-service.ts | 4 +- apps/sim/lib/webhooks/utils.ts | 4 +- apps/sim/lib/workflows/db-helpers.test.ts | 4 +- apps/sim/lib/workflows/db-helpers.ts | 4 +- .../lib/workflows/execution-files-server.ts | 4 +- apps/sim/lib/workflows/utils.ts | 4 +- apps/sim/next.config.ts | 1 + apps/sim/package.json | 11 +- .../scripts/migrate-deployment-versions.ts | 177 --------- apps/sim/scripts/process-docs-embeddings.ts | 4 +- apps/sim/services/queue/RateLimiter.test.ts | 4 +- apps/sim/services/queue/RateLimiter.ts | 4 +- apps/sim/services/queue/types.ts | 2 +- apps/sim/socket-server/database/operations.ts | 4 +- apps/sim/socket-server/handlers/subblocks.ts | 4 +- apps/sim/socket-server/handlers/variables.ts | 4 +- apps/sim/socket-server/index.test.ts | 2 +- .../socket-server/middleware/permissions.ts | 4 +- apps/sim/socket-server/rooms/manager.ts | 4 +- apps/sim/tsconfig.json | 4 +- apps/sim/vitest.config.ts | 9 +- bun.lock | 190 ++++----- docker-compose.local.yml | 1 + docker-compose.prod.yml | 1 + docker/db.Dockerfile | 12 +- docker/realtime.Dockerfile | 3 +- helm/sim/templates/deployment-app.yaml | 2 +- package.json | 7 +- {apps/sim => packages}/db/consts.ts | 0 packages/db/drizzle.config.ts | 10 + {apps/sim => packages}/db/index.ts | 18 +- .../migrations/0000_careless_black_knight.sql | 0 .../db/migrations/0001_foamy_dakota_north.sql | 0 .../db/migrations/0002_previous_xavin.sql | 0 .../db/migrations/0003_smiling_hammerhead.sql | 0 .../db/migrations/0004_nasty_mesmero.sql | 0 .../db/migrations/0005_shocking_domino.sql | 0 .../db/migrations/0006_plain_zzzax.sql | 0 .../migrations/0007_mute_stepford_cuckoos.sql | 0 .../db/migrations/0008_quick_paladin.sql | 0 .../db/migrations/0009_cynical_bullseye.sql | 0 .../db/migrations/0010_flashy_nebula.sql | 0 .../db/migrations/0011_youthful_iron_lad.sql | 0 .../migrations/0012_minor_dexter_bennett.sql | 0 .../db/migrations/0013_dusty_aaron_stack.sql | 0 .../db/migrations/0014_nice_dragon_lord.sql | 0 .../db/migrations/0015_brief_martin_li.sql | 0 .../db/migrations/0016_cultured_butterfly.sql | 0 .../db/migrations/0017_curious_ink.sql | 0 .../db/migrations/0018_sleepy_champions.sql | 0 .../db/migrations/0019_even_lorna_dane.sql | 0 .../db/migrations/0020_clear_skreet.sql | 0 .../db/migrations/0021_shocking_korath.sql | 0 .../db/migrations/0022_gray_galactus.sql | 0 .../migrations/0023_nervous_tyger_tiger.sql | 0 .../db/migrations/0024_next_whizzer.sql | 0 .../db/migrations/0025_curved_jubilee.sql | 0 .../db/migrations/0026_daily_killraven.sql | 0 .../db/migrations/0027_careless_gamora.sql | 0 .../db/migrations/0028_absent_triton.sql | 0 .../db/migrations/0030_happy_joseph.sql | 0 .../db/migrations/0031_lively_nico_minoru.sql | 0 .../db/migrations/0032_rare_nico_minoru.sql | 0 .../db/migrations/0033_solid_stellaris.sql | 0 .../db/migrations/0034_brainy_revanche.sql | 0 .../db/migrations/0035_slim_energizer.sql | 0 .../db/migrations/0036_married_skreet.sql | 0 .../migrations/0037_outgoing_madame_hydra.sql | 0 .../db/migrations/0038_shocking_thor.sql | 0 .../db/migrations/0039_tranquil_speed.sql | 0 .../migrations/0040_silky_monster_badoon.sql | 0 .../db/migrations/0041_sparkling_ma_gnuci.sql | 0 .../db/migrations/0042_breezy_miracleman.sql | 0 .../migrations/0043_silent_the_anarchist.sql | 0 .../migrations/0044_uneven_killer_shrike.sql | 0 .../db/migrations/0045_sour_chameleon.sql | 0 .../db/migrations/0046_loose_blizzard.sql | 0 .../db/migrations/0047_new_triathlon.sql | 0 .../db/migrations/0048_flawless_ultron.sql | 0 .../db/migrations/0049_fancy_cardiac.sql | 0 .../migrations/0050_big_mattie_franklin.sql | 0 .../db/migrations/0051_typical_expediter.sql | 0 .../migrations/0052_fluffy_shinobi_shaw.sql | 0 .../migrations/0053_gigantic_gabe_jones.sql | 0 .../db/migrations/0054_naive_raider.sql | 0 .../migrations/0055_amused_ender_wiggin.sql | 0 .../0056_adorable_franklin_richards.sql | 0 .../migrations/0057_charming_star_brand.sql | 0 .../db/migrations/0058_clean_shiva.sql | 0 .../db/migrations/0059_odd_may_parker.sql | 0 .../db/migrations/0060_ordinary_nick_fury.sql | 0 .../migrations/0061_swift_doctor_spectrum.sql | 0 .../0062_previous_phantom_reporter.sql | 0 .../db/migrations/0063_lame_sandman.sql | 0 .../db/migrations/0064_elite_hedge_knight.sql | 0 .../migrations/0065_solid_newton_destine.sql | 0 .../db/migrations/0066_talented_mentor.sql | 0 .../db/migrations/0067_safe_bushwacker.sql | 0 .../db/migrations/0068_fine_hardball.sql | 0 .../db/migrations/0069_lonely_spirit.sql | 0 .../0070_charming_wrecking_crew.sql | 0 .../db/migrations/0071_free_sharon_carter.sql | 0 .../db/migrations/0072_powerful_legion.sql | 0 .../db/migrations/0073_hot_champions.sql | 0 .../migrations/0074_abnormal_dreadnoughts.sql | 0 .../db/migrations/0075_lush_moonstone.sql | 0 .../db/migrations/0076_damp_vector.sql | 0 .../0077_missing_doc_processing.sql | 0 .../db/migrations/0077_rapid_chimera.sql | 0 .../db/migrations/0078_supreme_madrox.sql | 0 .../db/migrations/0079_shocking_shriek.sql | 0 .../db/migrations/0080_left_riptide.sql | 0 .../db/migrations/0081_yellow_shadow_king.sql | 0 .../db/migrations/0082_light_blockbuster.sql | 0 .../0083_ambiguous_dreadnoughts.sql | 0 .../db/migrations/0084_even_lockheed.sql | 0 .../db/migrations/0085_daffy_blacklash.sql | 0 .../migrations/0086_breezy_sister_grimm.sql | 0 .../db/migrations/0087_wealthy_landau.sql | 0 .../db/migrations/0088_serious_firestar.sql | 0 .../db/migrations/0089_amused_pete_wisdom.sql | 0 .../db/migrations/0090_fearless_zaladane.sql | 0 .../db/migrations/meta/0000_snapshot.json | 0 .../db/migrations/meta/0001_snapshot.json | 0 .../db/migrations/meta/0002_snapshot.json | 0 .../db/migrations/meta/0003_snapshot.json | 0 .../db/migrations/meta/0004_snapshot.json | 0 .../db/migrations/meta/0005_snapshot.json | 0 .../db/migrations/meta/0006_snapshot.json | 0 .../db/migrations/meta/0007_snapshot.json | 0 .../db/migrations/meta/0008_snapshot.json | 0 .../db/migrations/meta/0009_snapshot.json | 0 .../db/migrations/meta/0010_snapshot.json | 0 .../db/migrations/meta/0011_snapshot.json | 0 .../db/migrations/meta/0012_snapshot.json | 0 .../db/migrations/meta/0013_snapshot.json | 0 .../db/migrations/meta/0014_snapshot.json | 0 .../db/migrations/meta/0015_snapshot.json | 0 .../db/migrations/meta/0016_snapshot.json | 0 .../db/migrations/meta/0017_snapshot.json | 0 .../db/migrations/meta/0018_snapshot.json | 0 .../db/migrations/meta/0019_snapshot.json | 0 .../db/migrations/meta/0020_snapshot.json | 0 .../db/migrations/meta/0021_snapshot.json | 0 .../db/migrations/meta/0022_snapshot.json | 0 .../db/migrations/meta/0023_snapshot.json | 0 .../db/migrations/meta/0024_snapshot.json | 0 .../db/migrations/meta/0025_snapshot.json | 0 .../db/migrations/meta/0026_snapshot.json | 0 .../db/migrations/meta/0027_snapshot.json | 0 .../db/migrations/meta/0028_snapshot.json | 0 .../db/migrations/meta/0030_snapshot.json | 0 .../db/migrations/meta/0031_snapshot.json | 0 .../db/migrations/meta/0032_snapshot.json | 0 .../db/migrations/meta/0033_snapshot.json | 0 .../db/migrations/meta/0034_snapshot.json | 0 .../db/migrations/meta/0035_snapshot.json | 0 .../db/migrations/meta/0036_snapshot.json | 0 .../db/migrations/meta/0037_snapshot.json | 0 .../db/migrations/meta/0038_snapshot.json | 0 .../db/migrations/meta/0039_snapshot.json | 0 .../db/migrations/meta/0040_snapshot.json | 0 .../db/migrations/meta/0041_snapshot.json | 0 .../db/migrations/meta/0042_snapshot.json | 0 .../db/migrations/meta/0043_snapshot.json | 0 .../db/migrations/meta/0044_snapshot.json | 0 .../db/migrations/meta/0045_snapshot.json | 0 .../db/migrations/meta/0046_snapshot.json | 0 .../db/migrations/meta/0047_snapshot.json | 0 .../db/migrations/meta/0048_snapshot.json | 0 .../db/migrations/meta/0049_snapshot.json | 0 .../db/migrations/meta/0050_snapshot.json | 0 .../db/migrations/meta/0051_snapshot.json | 0 .../db/migrations/meta/0052_snapshot.json | 0 .../db/migrations/meta/0053_snapshot.json | 0 .../db/migrations/meta/0054_snapshot.json | 0 .../db/migrations/meta/0055_snapshot.json | 0 .../db/migrations/meta/0056_snapshot.json | 0 .../db/migrations/meta/0057_snapshot.json | 0 .../db/migrations/meta/0058_snapshot.json | 0 .../db/migrations/meta/0059_snapshot.json | 0 .../db/migrations/meta/0060_snapshot.json | 0 .../db/migrations/meta/0061_snapshot.json | 0 .../db/migrations/meta/0062_snapshot.json | 0 .../db/migrations/meta/0063_snapshot.json | 0 .../db/migrations/meta/0064_snapshot.json | 0 .../db/migrations/meta/0065_snapshot.json | 0 .../db/migrations/meta/0066_snapshot.json | 0 .../db/migrations/meta/0067_snapshot.json | 0 .../db/migrations/meta/0068_snapshot.json | 0 .../db/migrations/meta/0069_snapshot.json | 0 .../db/migrations/meta/0070_snapshot.json | 0 .../db/migrations/meta/0071_snapshot.json | 0 .../db/migrations/meta/0072_snapshot.json | 0 .../db/migrations/meta/0073_snapshot.json | 0 .../db/migrations/meta/0074_snapshot.json | 0 .../db/migrations/meta/0075_snapshot.json | 0 .../db/migrations/meta/0076_snapshot.json | 0 .../db/migrations/meta/0077_snapshot.json | 0 .../db/migrations/meta/0078_snapshot.json | 0 .../db/migrations/meta/0079_snapshot.json | 0 .../db/migrations/meta/0080_snapshot.json | 0 .../db/migrations/meta/0081_snapshot.json | 0 .../db/migrations/meta/0082_snapshot.json | 0 .../db/migrations/meta/0083_snapshot.json | 0 .../db/migrations/meta/0084_snapshot.json | 0 .../db/migrations/meta/0085_snapshot.json | 0 .../db/migrations/meta/0086_snapshot.json | 0 .../db/migrations/meta/0087_snapshot.json | 0 .../db/migrations/meta/0088_snapshot.json | 0 .../db/migrations/meta/0089_snapshot.json | 0 .../db/migrations/meta/0090_snapshot.json | 0 .../db/migrations/meta/_journal.json | 0 packages/db/package.json | 38 ++ {apps/sim => packages}/db/schema.ts | 0 .../db/scripts/migrate-deployment-versions.ts | 370 ++++++++++++++++++ packages/db/tsconfig.json | 21 + scripts/bun.lock | 201 ---------- 400 files changed, 1054 insertions(+), 966 deletions(-) delete mode 100644 apps/sim/scripts/migrate-deployment-versions.ts rename {apps/sim => packages}/db/consts.ts (100%) create mode 100644 packages/db/drizzle.config.ts rename {apps/sim => packages}/db/index.ts (65%) rename {apps/sim => packages}/db/migrations/0000_careless_black_knight.sql (100%) rename {apps/sim => packages}/db/migrations/0001_foamy_dakota_north.sql (100%) rename {apps/sim => packages}/db/migrations/0002_previous_xavin.sql (100%) rename {apps/sim => packages}/db/migrations/0003_smiling_hammerhead.sql (100%) rename {apps/sim => packages}/db/migrations/0004_nasty_mesmero.sql (100%) rename {apps/sim => packages}/db/migrations/0005_shocking_domino.sql (100%) rename {apps/sim => packages}/db/migrations/0006_plain_zzzax.sql (100%) rename {apps/sim => packages}/db/migrations/0007_mute_stepford_cuckoos.sql (100%) rename {apps/sim => packages}/db/migrations/0008_quick_paladin.sql (100%) rename {apps/sim => packages}/db/migrations/0009_cynical_bullseye.sql (100%) rename {apps/sim => packages}/db/migrations/0010_flashy_nebula.sql (100%) rename {apps/sim => packages}/db/migrations/0011_youthful_iron_lad.sql (100%) rename {apps/sim => packages}/db/migrations/0012_minor_dexter_bennett.sql (100%) rename {apps/sim => packages}/db/migrations/0013_dusty_aaron_stack.sql (100%) rename {apps/sim => packages}/db/migrations/0014_nice_dragon_lord.sql (100%) rename {apps/sim => packages}/db/migrations/0015_brief_martin_li.sql (100%) rename {apps/sim => packages}/db/migrations/0016_cultured_butterfly.sql (100%) rename {apps/sim => packages}/db/migrations/0017_curious_ink.sql (100%) rename {apps/sim => packages}/db/migrations/0018_sleepy_champions.sql (100%) rename {apps/sim => packages}/db/migrations/0019_even_lorna_dane.sql (100%) rename {apps/sim => packages}/db/migrations/0020_clear_skreet.sql (100%) rename {apps/sim => packages}/db/migrations/0021_shocking_korath.sql (100%) rename {apps/sim => packages}/db/migrations/0022_gray_galactus.sql (100%) rename {apps/sim => packages}/db/migrations/0023_nervous_tyger_tiger.sql (100%) rename {apps/sim => packages}/db/migrations/0024_next_whizzer.sql (100%) rename {apps/sim => packages}/db/migrations/0025_curved_jubilee.sql (100%) rename {apps/sim => packages}/db/migrations/0026_daily_killraven.sql (100%) rename {apps/sim => packages}/db/migrations/0027_careless_gamora.sql (100%) rename {apps/sim => packages}/db/migrations/0028_absent_triton.sql (100%) rename {apps/sim => packages}/db/migrations/0030_happy_joseph.sql (100%) rename {apps/sim => packages}/db/migrations/0031_lively_nico_minoru.sql (100%) rename {apps/sim => packages}/db/migrations/0032_rare_nico_minoru.sql (100%) rename {apps/sim => packages}/db/migrations/0033_solid_stellaris.sql (100%) rename {apps/sim => packages}/db/migrations/0034_brainy_revanche.sql (100%) rename {apps/sim => packages}/db/migrations/0035_slim_energizer.sql (100%) rename {apps/sim => packages}/db/migrations/0036_married_skreet.sql (100%) rename {apps/sim => packages}/db/migrations/0037_outgoing_madame_hydra.sql (100%) rename {apps/sim => packages}/db/migrations/0038_shocking_thor.sql (100%) rename {apps/sim => packages}/db/migrations/0039_tranquil_speed.sql (100%) rename {apps/sim => packages}/db/migrations/0040_silky_monster_badoon.sql (100%) rename {apps/sim => packages}/db/migrations/0041_sparkling_ma_gnuci.sql (100%) rename {apps/sim => packages}/db/migrations/0042_breezy_miracleman.sql (100%) rename {apps/sim => packages}/db/migrations/0043_silent_the_anarchist.sql (100%) rename {apps/sim => packages}/db/migrations/0044_uneven_killer_shrike.sql (100%) rename {apps/sim => packages}/db/migrations/0045_sour_chameleon.sql (100%) rename {apps/sim => packages}/db/migrations/0046_loose_blizzard.sql (100%) rename {apps/sim => packages}/db/migrations/0047_new_triathlon.sql (100%) rename {apps/sim => packages}/db/migrations/0048_flawless_ultron.sql (100%) rename {apps/sim => packages}/db/migrations/0049_fancy_cardiac.sql (100%) rename {apps/sim => packages}/db/migrations/0050_big_mattie_franklin.sql (100%) rename {apps/sim => packages}/db/migrations/0051_typical_expediter.sql (100%) rename {apps/sim => packages}/db/migrations/0052_fluffy_shinobi_shaw.sql (100%) rename {apps/sim => packages}/db/migrations/0053_gigantic_gabe_jones.sql (100%) rename {apps/sim => packages}/db/migrations/0054_naive_raider.sql (100%) rename {apps/sim => packages}/db/migrations/0055_amused_ender_wiggin.sql (100%) rename {apps/sim => packages}/db/migrations/0056_adorable_franklin_richards.sql (100%) rename {apps/sim => packages}/db/migrations/0057_charming_star_brand.sql (100%) rename {apps/sim => packages}/db/migrations/0058_clean_shiva.sql (100%) rename {apps/sim => packages}/db/migrations/0059_odd_may_parker.sql (100%) rename {apps/sim => packages}/db/migrations/0060_ordinary_nick_fury.sql (100%) rename {apps/sim => packages}/db/migrations/0061_swift_doctor_spectrum.sql (100%) rename {apps/sim => packages}/db/migrations/0062_previous_phantom_reporter.sql (100%) rename {apps/sim => packages}/db/migrations/0063_lame_sandman.sql (100%) rename {apps/sim => packages}/db/migrations/0064_elite_hedge_knight.sql (100%) rename {apps/sim => packages}/db/migrations/0065_solid_newton_destine.sql (100%) rename {apps/sim => packages}/db/migrations/0066_talented_mentor.sql (100%) rename {apps/sim => packages}/db/migrations/0067_safe_bushwacker.sql (100%) rename {apps/sim => packages}/db/migrations/0068_fine_hardball.sql (100%) rename {apps/sim => packages}/db/migrations/0069_lonely_spirit.sql (100%) rename {apps/sim => packages}/db/migrations/0070_charming_wrecking_crew.sql (100%) rename {apps/sim => packages}/db/migrations/0071_free_sharon_carter.sql (100%) rename {apps/sim => packages}/db/migrations/0072_powerful_legion.sql (100%) rename {apps/sim => packages}/db/migrations/0073_hot_champions.sql (100%) rename {apps/sim => packages}/db/migrations/0074_abnormal_dreadnoughts.sql (100%) rename {apps/sim => packages}/db/migrations/0075_lush_moonstone.sql (100%) rename {apps/sim => packages}/db/migrations/0076_damp_vector.sql (100%) rename {apps/sim => packages}/db/migrations/0077_missing_doc_processing.sql (100%) rename {apps/sim => packages}/db/migrations/0077_rapid_chimera.sql (100%) rename {apps/sim => packages}/db/migrations/0078_supreme_madrox.sql (100%) rename {apps/sim => packages}/db/migrations/0079_shocking_shriek.sql (100%) rename {apps/sim => packages}/db/migrations/0080_left_riptide.sql (100%) rename {apps/sim => packages}/db/migrations/0081_yellow_shadow_king.sql (100%) rename {apps/sim => packages}/db/migrations/0082_light_blockbuster.sql (100%) rename {apps/sim => packages}/db/migrations/0083_ambiguous_dreadnoughts.sql (100%) rename {apps/sim => packages}/db/migrations/0084_even_lockheed.sql (100%) rename {apps/sim => packages}/db/migrations/0085_daffy_blacklash.sql (100%) rename {apps/sim => packages}/db/migrations/0086_breezy_sister_grimm.sql (100%) rename {apps/sim => packages}/db/migrations/0087_wealthy_landau.sql (100%) rename {apps/sim => packages}/db/migrations/0088_serious_firestar.sql (100%) rename {apps/sim => packages}/db/migrations/0089_amused_pete_wisdom.sql (100%) rename {apps/sim => packages}/db/migrations/0090_fearless_zaladane.sql (100%) rename {apps/sim => packages}/db/migrations/meta/0000_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0001_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0002_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0003_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0004_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0005_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0006_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0007_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0008_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0009_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0010_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0011_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0012_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0013_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0014_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0015_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0016_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0017_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0018_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0019_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0020_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0021_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0022_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0023_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0024_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0025_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0026_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0027_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0028_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0030_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0031_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0032_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0033_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0034_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0035_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0036_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0037_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0038_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0039_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0040_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0041_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0042_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0043_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0044_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0045_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0046_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0047_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0048_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0049_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0050_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0051_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0052_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0053_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0054_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0055_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0056_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0057_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0058_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0059_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0060_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0061_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0062_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0063_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0064_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0065_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0066_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0067_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0068_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0069_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0070_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0071_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0072_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0073_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0074_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0075_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0076_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0077_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0078_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0079_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0080_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0081_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0082_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0083_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0084_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0085_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0086_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0087_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0088_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0089_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/0090_snapshot.json (100%) rename {apps/sim => packages}/db/migrations/meta/_journal.json (100%) create mode 100644 packages/db/package.json rename {apps/sim => packages}/db/schema.ts (100%) create mode 100644 packages/db/scripts/migrate-deployment-versions.ts create mode 100644 packages/db/tsconfig.json delete mode 100644 scripts/bun.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffd68d8b8..2d523dafb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,7 @@ jobs: env: NODE_OPTIONS: '--no-warnings' NEXT_PUBLIC_APP_URL: 'https://www.sim.ai' + DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio' ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only run: bun run test @@ -39,6 +40,7 @@ jobs: env: NODE_OPTIONS: '--no-warnings' NEXT_PUBLIC_APP_URL: 'https://www.sim.ai' + DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio' STRIPE_SECRET_KEY: 'dummy_key_for_ci_only' STRIPE_WEBHOOK_SECRET: 'dummy_secret_for_ci_only' RESEND_API_KEY: 'dummy_key_for_ci_only' @@ -71,7 +73,7 @@ jobs: run: bun install - name: Apply migrations - working-directory: ./apps/sim + working-directory: ./packages/db env: DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }} - run: bunx drizzle-kit migrate + run: bunx drizzle-kit migrate --config=./drizzle.config.ts diff --git a/README.md b/README.md index c702f2633..bc3e04a09 100644 --- a/README.md +++ b/README.md @@ -125,10 +125,11 @@ Update your `.env` file with the database URL: DATABASE_URL="postgresql://postgres:your_password@localhost:5432/simstudio" ``` -4. Set up the database: +4. Set up the database (from packages/db): ```bash -bunx drizzle-kit migrate +cd packages/db +bunx drizzle-kit migrate --config=./drizzle.config.ts ``` 5. Start the development servers: diff --git a/apps/sim/app/api/__test-utils__/utils.ts b/apps/sim/app/api/__test-utils__/utils.ts index 493de52b2..4cdfdf4c0 100644 --- a/apps/sim/app/api/__test-utils__/utils.ts +++ b/apps/sim/app/api/__test-utils__/utils.ts @@ -349,7 +349,7 @@ export function mockExecutionDependencies() { })), })) - vi.mock('@/db', () => ({ + vi.mock('@sim/db', () => ({ db: mockDb, })) } @@ -395,7 +395,7 @@ export async function getMockedDependencies() { const workflowUtilsModule = await import('@/lib/workflows/utils') const executorModule = await import('@/executor') const serializerModule = await import('@/serializer') - const dbModule = await import('@/db') + const dbModule = await import('@sim/db') return { decryptSecret: utilsModule.decryptSecret, @@ -428,7 +428,7 @@ export function mockScheduleStatusDb({ schedule?: any[] workflow?: any[] } = {}) { - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { let callCount = 0 const select = vi.fn().mockImplementation(() => ({ @@ -469,7 +469,7 @@ export function mockScheduleExecuteDb({ workflowRecord?: any envRecord?: any }): void { - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const select = vi.fn().mockImplementation(() => ({ from: vi.fn().mockImplementation((table: any) => { const tbl = String(table) @@ -544,7 +544,7 @@ export function mockAuth(user: MockUser = mockUser): MockAuthResult { * Mock common schema patterns */ export function mockCommonSchemas() { - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ workflowFolder: { id: 'id', userId: 'userId', @@ -597,7 +597,7 @@ export function mockDrizzleOrm() { * Mock knowledge-related database schemas */ export function mockKnowledgeSchemas() { - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ knowledgeBase: { id: 'kb_id', userId: 'user_id', @@ -1091,7 +1091,7 @@ export function createMockDatabase(options: MockDatabaseOptions = {}) { transaction: createTransactionMock(), } - vi.doMock('@/db', () => ({ db: mockDb })) + vi.doMock('@sim/db', () => ({ db: mockDb })) return { mockDb, diff --git a/apps/sim/app/api/auth/oauth/connections/route.test.ts b/apps/sim/app/api/auth/oauth/connections/route.test.ts index 16797efb1..aced9eed2 100644 --- a/apps/sim/app/api/auth/oauth/connections/route.test.ts +++ b/apps/sim/app/api/auth/oauth/connections/route.test.ts @@ -34,13 +34,11 @@ describe('OAuth Connections API Route', () => { getSession: mockGetSession, })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDb, - })) - - vi.doMock('@/db/schema', () => ({ account: { userId: 'userId', providerId: 'providerId' }, user: { email: 'email', id: 'id' }, + eq: vi.fn((field, value) => ({ field, value, type: 'eq' })), })) vi.doMock('drizzle-orm', () => ({ diff --git a/apps/sim/app/api/auth/oauth/connections/route.ts b/apps/sim/app/api/auth/oauth/connections/route.ts index 4cc270b1f..881d50a97 100644 --- a/apps/sim/app/api/auth/oauth/connections/route.ts +++ b/apps/sim/app/api/auth/oauth/connections/route.ts @@ -1,11 +1,10 @@ +import { account, db, user } from '@sim/db' import { eq } from 'drizzle-orm' import { jwtDecode } from 'jwt-decode' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { account, user } from '@/db/schema' const logger = createLogger('OAuthConnectionsAPI') diff --git a/apps/sim/app/api/auth/oauth/credentials/route.test.ts b/apps/sim/app/api/auth/oauth/credentials/route.test.ts index 7187a8a6c..e67b2de1f 100644 --- a/apps/sim/app/api/auth/oauth/credentials/route.test.ts +++ b/apps/sim/app/api/auth/oauth/credentials/route.test.ts @@ -45,11 +45,11 @@ describe('OAuth Credentials API Route', () => { parseProvider: mockParseProvider, })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDb, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ account: { userId: 'userId', providerId: 'providerId' }, user: { email: 'email', id: 'id' }, })) diff --git a/apps/sim/app/api/auth/oauth/credentials/route.ts b/apps/sim/app/api/auth/oauth/credentials/route.ts index d301e76d0..abb263e8d 100644 --- a/apps/sim/app/api/auth/oauth/credentials/route.ts +++ b/apps/sim/app/api/auth/oauth/credentials/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { account, user, workflow } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { jwtDecode } from 'jwt-decode' import { type NextRequest, NextResponse } from 'next/server' @@ -7,8 +9,6 @@ import type { OAuthService } from '@/lib/oauth/oauth' import { parseProvider } from '@/lib/oauth/oauth' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { account, user, workflow } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/disconnect/route.test.ts b/apps/sim/app/api/auth/oauth/disconnect/route.test.ts index f4fa9cd08..deeabb89d 100644 --- a/apps/sim/app/api/auth/oauth/disconnect/route.test.ts +++ b/apps/sim/app/api/auth/oauth/disconnect/route.test.ts @@ -32,11 +32,11 @@ describe('OAuth Disconnect API Route', () => { getSession: mockGetSession, })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDb, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ account: { userId: 'userId', providerId: 'providerId' }, })) diff --git a/apps/sim/app/api/auth/oauth/disconnect/route.ts b/apps/sim/app/api/auth/oauth/disconnect/route.ts index e7dc062c1..0dae18ef1 100644 --- a/apps/sim/app/api/auth/oauth/disconnect/route.ts +++ b/apps/sim/app/api/auth/oauth/disconnect/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { and, eq, like, or } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/microsoft/file/route.ts b/apps/sim/app/api/auth/oauth/microsoft/file/route.ts index 6028242f7..da3e30314 100644 --- a/apps/sim/app/api/auth/oauth/microsoft/file/route.ts +++ b/apps/sim/app/api/auth/oauth/microsoft/file/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/microsoft/files/route.ts b/apps/sim/app/api/auth/oauth/microsoft/files/route.ts index 8ce7e39b6..c3cc6e7f6 100644 --- a/apps/sim/app/api/auth/oauth/microsoft/files/route.ts +++ b/apps/sim/app/api/auth/oauth/microsoft/files/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/utils.test.ts b/apps/sim/app/api/auth/oauth/utils.test.ts index 725557294..c76ed05bf 100644 --- a/apps/sim/app/api/auth/oauth/utils.test.ts +++ b/apps/sim/app/api/auth/oauth/utils.test.ts @@ -31,7 +31,7 @@ describe('OAuth Utils', () => { getSession: vi.fn().mockResolvedValue(mockSession), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDb, })) diff --git a/apps/sim/app/api/auth/oauth/utils.ts b/apps/sim/app/api/auth/oauth/utils.ts index 666e20a09..feade337e 100644 --- a/apps/sim/app/api/auth/oauth/utils.ts +++ b/apps/sim/app/api/auth/oauth/utils.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { account, workflow } from '@sim/db/schema' import { and, desc, eq } from 'drizzle-orm' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { refreshOAuthToken } from '@/lib/oauth/oauth' -import { db } from '@/db' -import { account, workflow } from '@/db/schema' const logger = createLogger('OAuthUtilsAPI') diff --git a/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts b/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts index d691fd5c7..5a8d9f084 100644 --- a/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts +++ b/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts b/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts index 92511bc1a..eea0ebff8 100644 --- a/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts +++ b/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/billing/portal/route.ts b/apps/sim/app/api/billing/portal/route.ts index 838b4bfff..f7a980cb2 100644 --- a/apps/sim/app/api/billing/portal/route.ts +++ b/apps/sim/app/api/billing/portal/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { subscription as subscriptionTable, user } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { requireStripeClient } from '@/lib/billing/stripe-client' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { subscription as subscriptionTable, user } from '@/db/schema' const logger = createLogger('BillingPortal') diff --git a/apps/sim/app/api/billing/route.ts b/apps/sim/app/api/billing/route.ts index 616a3fa6f..b9c7bb4b7 100644 --- a/apps/sim/app/api/billing/route.ts +++ b/apps/sim/app/api/billing/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { member, userStats } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { getSimplifiedBillingSummary } from '@/lib/billing/core/billing' import { getOrganizationBillingData } from '@/lib/billing/core/organization' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, userStats } from '@/db/schema' const logger = createLogger('UnifiedBillingAPI') diff --git a/apps/sim/app/api/billing/update-cost/route.ts b/apps/sim/app/api/billing/update-cost/route.ts index 137f5b164..816b7e997 100644 --- a/apps/sim/app/api/billing/update-cost/route.ts +++ b/apps/sim/app/api/billing/update-cost/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { userStats } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { checkInternalApiKey } from '@/lib/copilot/utils' import { isBillingEnabled } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { userStats } from '@/db/schema' import { calculateCost } from '@/providers/utils' const logger = createLogger('billing-update-cost') diff --git a/apps/sim/app/api/chat/[subdomain]/otp/route.ts b/apps/sim/app/api/chat/[subdomain]/otp/route.ts index a4185b147..6b000f8d4 100644 --- a/apps/sim/app/api/chat/[subdomain]/otp/route.ts +++ b/apps/sim/app/api/chat/[subdomain]/otp/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { chat } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { z } from 'zod' @@ -8,8 +10,6 @@ import { getRedisClient, markMessageAsProcessed, releaseLock } from '@/lib/redis import { generateRequestId } from '@/lib/utils' import { addCorsHeaders, setChatAuthCookie } from '@/app/api/chat/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat } from '@/db/schema' const logger = createLogger('ChatOtpAPI') diff --git a/apps/sim/app/api/chat/[subdomain]/route.test.ts b/apps/sim/app/api/chat/[subdomain]/route.test.ts index e4dc36583..bce1e005f 100644 --- a/apps/sim/app/api/chat/[subdomain]/route.test.ts +++ b/apps/sim/app/api/chat/[subdomain]/route.test.ts @@ -84,7 +84,7 @@ describe('Chat Subdomain API Route', () => { }), })) - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockSelect = vi.fn().mockImplementation((fields) => { if (fields && fields.isDeployed !== undefined) { return { @@ -153,7 +153,7 @@ describe('Chat Subdomain API Route', () => { }) it('should return 404 for non-existent subdomain', async () => { - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockLimit = vi.fn().mockReturnValue([]) const mockWhere = vi.fn().mockReturnValue({ limit: mockLimit }) const mockFrom = vi.fn().mockReturnValue({ where: mockWhere }) @@ -181,7 +181,7 @@ describe('Chat Subdomain API Route', () => { }) it('should return 403 for inactive chat', async () => { - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockLimit = vi.fn().mockReturnValue([ { id: 'chat-id', @@ -299,7 +299,7 @@ describe('Chat Subdomain API Route', () => { it('should return 503 when workflow is not available', async () => { // Override the default workflow result to return non-deployed - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { // Track call count to return different results let callCount = 0 diff --git a/apps/sim/app/api/chat/[subdomain]/route.ts b/apps/sim/app/api/chat/[subdomain]/route.ts index abd18a12d..d667b2e85 100644 --- a/apps/sim/app/api/chat/[subdomain]/route.ts +++ b/apps/sim/app/api/chat/[subdomain]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { chat, workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' @@ -10,8 +12,6 @@ import { validateChatAuth, } from '@/app/api/chat/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat, workflow } from '@/db/schema' const logger = createLogger('ChatSubdomainAPI') diff --git a/apps/sim/app/api/chat/edit/[id]/route.test.ts b/apps/sim/app/api/chat/edit/[id]/route.test.ts index 13367a1fb..445ed4abf 100644 --- a/apps/sim/app/api/chat/edit/[id]/route.test.ts +++ b/apps/sim/app/api/chat/edit/[id]/route.test.ts @@ -30,7 +30,7 @@ describe('Chat Edit API Route', () => { mockSet.mockReturnValue({ where: mockWhere }) mockDelete.mockReturnValue({ where: mockWhere }) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, update: mockUpdate, @@ -38,7 +38,7 @@ describe('Chat Edit API Route', () => { }, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ chat: { id: 'id', subdomain: 'subdomain', userId: 'userId' }, })) diff --git a/apps/sim/app/api/chat/edit/[id]/route.ts b/apps/sim/app/api/chat/edit/[id]/route.ts index 08babbcd5..2a56fe955 100644 --- a/apps/sim/app/api/chat/edit/[id]/route.ts +++ b/apps/sim/app/api/chat/edit/[id]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { chat } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { z } from 'zod' @@ -8,8 +10,6 @@ import { getEmailDomain } from '@/lib/urls/utils' import { encryptSecret } from '@/lib/utils' import { checkChatAccess } from '@/app/api/chat/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/chat/route.test.ts b/apps/sim/app/api/chat/route.test.ts index f1172695a..030871a92 100644 --- a/apps/sim/app/api/chat/route.test.ts +++ b/apps/sim/app/api/chat/route.test.ts @@ -29,14 +29,14 @@ describe('Chat API Route', () => { mockInsert.mockReturnValue({ values: mockValues }) mockValues.mockReturnValue({ returning: mockReturning }) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, insert: mockInsert, }, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ chat: { userId: 'userId', subdomain: 'subdomain' }, workflow: { id: 'id', userId: 'userId', isDeployed: 'isDeployed' }, })) diff --git a/apps/sim/app/api/chat/route.ts b/apps/sim/app/api/chat/route.ts index 77f055bf9..333643e9c 100644 --- a/apps/sim/app/api/chat/route.ts +++ b/apps/sim/app/api/chat/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { chat } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { v4 as uuidv4 } from 'uuid' @@ -9,8 +11,6 @@ import { createLogger } from '@/lib/logs/console/logger' import { encryptSecret } from '@/lib/utils' import { checkWorkflowAccessForChatCreation } from '@/app/api/chat/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat } from '@/db/schema' const logger = createLogger('ChatAPI') diff --git a/apps/sim/app/api/chat/subdomains/validate/route.test.ts b/apps/sim/app/api/chat/subdomains/validate/route.test.ts index 6887cdb88..4a20e1784 100644 --- a/apps/sim/app/api/chat/subdomains/validate/route.test.ts +++ b/apps/sim/app/api/chat/subdomains/validate/route.test.ts @@ -27,14 +27,14 @@ describe('Subdomain Validation API Route', () => { mockWhere.mockReturnValue({ limit: mockLimit }) // Mock the database - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, }, })) // Mock the schema - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ chat: { subdomain: 'subdomain', }, diff --git a/apps/sim/app/api/chat/subdomains/validate/route.ts b/apps/sim/app/api/chat/subdomains/validate/route.ts index 2ff743f1e..2bafb4fca 100644 --- a/apps/sim/app/api/chat/subdomains/validate/route.ts +++ b/apps/sim/app/api/chat/subdomains/validate/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { chat } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat } from '@/db/schema' const logger = createLogger('SubdomainValidateAPI') diff --git a/apps/sim/app/api/chat/utils.test.ts b/apps/sim/app/api/chat/utils.test.ts index b9f756b77..8a50e5161 100644 --- a/apps/sim/app/api/chat/utils.test.ts +++ b/apps/sim/app/api/chat/utils.test.ts @@ -7,7 +7,7 @@ import type { NextResponse } from 'next/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { env } from '@/lib/env' -vi.mock('@/db', () => ({ +vi.mock('@sim/db', () => ({ db: { select: vi.fn(), update: vi.fn(), diff --git a/apps/sim/app/api/chat/utils.ts b/apps/sim/app/api/chat/utils.ts index 67ab219ac..c69e41ad0 100644 --- a/apps/sim/app/api/chat/utils.ts +++ b/apps/sim/app/api/chat/utils.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { chat, userStats, workflow } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' @@ -12,8 +14,6 @@ import { processStreamingBlockLogs } from '@/lib/tokenization' import { getEmailDomain } from '@/lib/urls/utils' import { decryptSecret, generateRequestId } from '@/lib/utils' import { getBlock } from '@/blocks' -import { db } from '@/db' -import { chat, userStats, workflow } from '@/db/schema' import { Executor } from '@/executor' import type { BlockLog, ExecutionResult } from '@/executor/types' import { Serializer } from '@/serializer' diff --git a/apps/sim/app/api/copilot/api-keys/validate/route.ts b/apps/sim/app/api/copilot/api-keys/validate/route.ts index d1c257ee4..48b063f69 100644 --- a/apps/sim/app/api/copilot/api-keys/validate/route.ts +++ b/apps/sim/app/api/copilot/api-keys/validate/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { userStats } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { checkInternalApiKey } from '@/lib/copilot/utils' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { userStats } from '@/db/schema' const logger = createLogger('CopilotApiKeysValidate') diff --git a/apps/sim/app/api/copilot/chat/route.test.ts b/apps/sim/app/api/copilot/chat/route.test.ts index e92ddf738..2a57ccb68 100644 --- a/apps/sim/app/api/copilot/chat/route.test.ts +++ b/apps/sim/app/api/copilot/chat/route.test.ts @@ -46,7 +46,7 @@ describe('Copilot Chat API Route', () => { mockUpdate.mockReturnValue({ set: mockSet }) mockSet.mockReturnValue({ where: mockWhere }) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, insert: mockInsert, @@ -54,7 +54,7 @@ describe('Copilot Chat API Route', () => { }, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ copilotChats: { id: 'id', userId: 'userId', diff --git a/apps/sim/app/api/copilot/chat/route.ts b/apps/sim/app/api/copilot/chat/route.ts index 194525878..8bf4b676f 100644 --- a/apps/sim/app/api/copilot/chat/route.ts +++ b/apps/sim/app/api/copilot/chat/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { copilotChats } from '@sim/db/schema' import { and, desc, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -18,8 +20,6 @@ import { generateChatTitle } from '@/lib/sim-agent/utils' import { createFileContent, isSupportedFileType } from '@/lib/uploads/file-utils' import { S3_COPILOT_CONFIG } from '@/lib/uploads/setup' import { downloadFile, getStorageProvider } from '@/lib/uploads/storage-client' -import { db } from '@/db' -import { copilotChats } from '@/db/schema' const logger = createLogger('CopilotChatAPI') diff --git a/apps/sim/app/api/copilot/chat/update-messages/route.test.ts b/apps/sim/app/api/copilot/chat/update-messages/route.test.ts index 0d6818e1b..4ab1e654b 100644 --- a/apps/sim/app/api/copilot/chat/update-messages/route.test.ts +++ b/apps/sim/app/api/copilot/chat/update-messages/route.test.ts @@ -32,14 +32,14 @@ describe('Copilot Chat Update Messages API Route', () => { mockUpdate.mockReturnValue({ set: mockSet }) mockSet.mockReturnValue({ where: vi.fn().mockResolvedValue(undefined) }) // Different where for update - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, update: mockUpdate, }, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ copilotChats: { id: 'id', userId: 'userId', diff --git a/apps/sim/app/api/copilot/chat/update-messages/route.ts b/apps/sim/app/api/copilot/chat/update-messages/route.ts index d64f6b3b6..d4e0ebfae 100644 --- a/apps/sim/app/api/copilot/chat/update-messages/route.ts +++ b/apps/sim/app/api/copilot/chat/update-messages/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { copilotChats } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -9,8 +11,6 @@ import { createUnauthorizedResponse, } from '@/lib/copilot/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { copilotChats } from '@/db/schema' const logger = createLogger('CopilotChatUpdateAPI') diff --git a/apps/sim/app/api/copilot/chats/route.ts b/apps/sim/app/api/copilot/chats/route.ts index 46ce9b624..49301e8db 100644 --- a/apps/sim/app/api/copilot/chats/route.ts +++ b/apps/sim/app/api/copilot/chats/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { copilotChats } from '@sim/db/schema' import { desc, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { @@ -6,8 +8,6 @@ import { createUnauthorizedResponse, } from '@/lib/copilot/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { copilotChats } from '@/db/schema' const logger = createLogger('CopilotChatsListAPI') diff --git a/apps/sim/app/api/copilot/checkpoints/revert/route.test.ts b/apps/sim/app/api/copilot/checkpoints/revert/route.test.ts index 60acef180..3cd75ccd0 100644 --- a/apps/sim/app/api/copilot/checkpoints/revert/route.test.ts +++ b/apps/sim/app/api/copilot/checkpoints/revert/route.test.ts @@ -28,13 +28,13 @@ describe('Copilot Checkpoints Revert API Route', () => { mockWhere.mockReturnValue({ then: mockThen }) mockThen.mockResolvedValue(null) // Default: no data found - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, }, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ workflowCheckpoints: { id: 'id', userId: 'userId', diff --git a/apps/sim/app/api/copilot/checkpoints/revert/route.ts b/apps/sim/app/api/copilot/checkpoints/revert/route.ts index 12851cddd..a6c70de3f 100644 --- a/apps/sim/app/api/copilot/checkpoints/revert/route.ts +++ b/apps/sim/app/api/copilot/checkpoints/revert/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflowCheckpoints, workflow as workflowTable } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -9,8 +11,6 @@ import { createUnauthorizedResponse, } from '@/lib/copilot/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflowCheckpoints, workflow as workflowTable } from '@/db/schema' const logger = createLogger('CheckpointRevertAPI') diff --git a/apps/sim/app/api/copilot/checkpoints/route.test.ts b/apps/sim/app/api/copilot/checkpoints/route.test.ts index cbddd0c1e..a34457339 100644 --- a/apps/sim/app/api/copilot/checkpoints/route.test.ts +++ b/apps/sim/app/api/copilot/checkpoints/route.test.ts @@ -49,14 +49,14 @@ describe('Copilot Checkpoints API Route', () => { mockInsert.mockReturnValue({ values: mockValues }) mockValues.mockReturnValue({ returning: mockReturning }) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, insert: mockInsert, }, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ copilotChats: mockCopilotChats, workflowCheckpoints: mockWorkflowCheckpoints, })) diff --git a/apps/sim/app/api/copilot/checkpoints/route.ts b/apps/sim/app/api/copilot/checkpoints/route.ts index 391e4ac90..55722b430 100644 --- a/apps/sim/app/api/copilot/checkpoints/route.ts +++ b/apps/sim/app/api/copilot/checkpoints/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { copilotChats, workflowCheckpoints } from '@sim/db/schema' import { and, desc, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -9,8 +11,6 @@ import { createUnauthorizedResponse, } from '@/lib/copilot/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { copilotChats, workflowCheckpoints } from '@/db/schema' const logger = createLogger('WorkflowCheckpointsAPI') diff --git a/apps/sim/app/api/copilot/feedback/route.ts b/apps/sim/app/api/copilot/feedback/route.ts index e2b129a06..a71e293f8 100644 --- a/apps/sim/app/api/copilot/feedback/route.ts +++ b/apps/sim/app/api/copilot/feedback/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { copilotFeedback } from '@sim/db/schema' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { @@ -8,8 +10,6 @@ import { createUnauthorizedResponse, } from '@/lib/copilot/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { copilotFeedback } from '@/db/schema' const logger = createLogger('CopilotFeedbackAPI') diff --git a/apps/sim/app/api/environment/route.ts b/apps/sim/app/api/environment/route.ts index 4f575c49d..c26c1dbfd 100644 --- a/apps/sim/app/api/environment/route.ts +++ b/apps/sim/app/api/environment/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { environment } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { decryptSecret, encryptSecret, generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { environment } from '@/db/schema' import type { EnvironmentVariable } from '@/stores/settings/environment/types' const logger = createLogger('EnvironmentAPI') diff --git a/apps/sim/app/api/folders/[id]/route.test.ts b/apps/sim/app/api/folders/[id]/route.test.ts index b9d26eb59..9fdd18cd4 100644 --- a/apps/sim/app/api/folders/[id]/route.test.ts +++ b/apps/sim/app/api/folders/[id]/route.test.ts @@ -127,7 +127,7 @@ describe('Individual Folder API Route', () => { mockAuthenticatedUser() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder Name', @@ -152,7 +152,7 @@ describe('Individual Folder API Route', () => { mockAuthenticatedUser() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -171,7 +171,7 @@ describe('Individual Folder API Route', () => { mockUnauthenticated() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -193,7 +193,7 @@ describe('Individual Folder API Route', () => { mockGetUserEntityPermissions.mockResolvedValue('read') // Read-only permissions const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -215,7 +215,7 @@ describe('Individual Folder API Route', () => { mockGetUserEntityPermissions.mockResolvedValue('write') // Write permissions const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -237,7 +237,7 @@ describe('Individual Folder API Route', () => { mockGetUserEntityPermissions.mockResolvedValue('admin') // Admin permissions const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -258,7 +258,7 @@ describe('Individual Folder API Route', () => { mockAuthenticatedUser() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -293,7 +293,7 @@ describe('Individual Folder API Route', () => { }), }) - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: ' Folder With Spaces ', @@ -314,7 +314,7 @@ describe('Individual Folder API Route', () => { const dbMock = createFolderDbMock({ throwError: true, }) - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder', @@ -340,7 +340,7 @@ describe('Individual Folder API Route', () => { mockAuthenticatedUser() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: '', // Empty name @@ -359,7 +359,7 @@ describe('Individual Folder API Route', () => { mockAuthenticatedUser() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) // Create a request with invalid JSON const req = new Request('http://localhost:3000/api/folders/folder-1', { @@ -396,7 +396,7 @@ describe('Individual Folder API Route', () => { folderLookupResult: { id: 'folder-3', parentId: null, name: 'Folder 3' }, circularCheckResults, }) - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('PUT', { name: 'Updated Folder 3', @@ -425,7 +425,7 @@ describe('Individual Folder API Route', () => { }) // Mock the recursive deletion function - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) @@ -445,7 +445,7 @@ describe('Individual Folder API Route', () => { mockUnauthenticated() const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) @@ -465,7 +465,7 @@ describe('Individual Folder API Route', () => { mockGetUserEntityPermissions.mockResolvedValue('read') // Read-only permissions const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) @@ -485,7 +485,7 @@ describe('Individual Folder API Route', () => { mockGetUserEntityPermissions.mockResolvedValue('write') // Write permissions (not enough for delete) const dbMock = createFolderDbMock() - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) @@ -507,7 +507,7 @@ describe('Individual Folder API Route', () => { const dbMock = createFolderDbMock({ folderLookupResult: mockFolder, }) - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) @@ -528,7 +528,7 @@ describe('Individual Folder API Route', () => { const dbMock = createFolderDbMock({ throwError: true, }) - vi.doMock('@/db', () => dbMock) + vi.doMock('@sim/db', () => dbMock) const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) diff --git a/apps/sim/app/api/folders/[id]/route.ts b/apps/sim/app/api/folders/[id]/route.ts index a686fca0b..4ebad9e4c 100644 --- a/apps/sim/app/api/folders/[id]/route.ts +++ b/apps/sim/app/api/folders/[id]/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { workflow, workflowFolder } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { workflow, workflowFolder } from '@/db/schema' const logger = createLogger('FoldersIDAPI') diff --git a/apps/sim/app/api/folders/route.test.ts b/apps/sim/app/api/folders/route.test.ts index f05aff1e1..6f59c4a88 100644 --- a/apps/sim/app/api/folders/route.test.ts +++ b/apps/sim/app/api/folders/route.test.ts @@ -75,7 +75,7 @@ describe('Folders API Route', () => { mockGetUserEntityPermissions.mockResolvedValue('admin') - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, insert: mockInsert, diff --git a/apps/sim/app/api/folders/route.ts b/apps/sim/app/api/folders/route.ts index 0451870cb..7e11b1782 100644 --- a/apps/sim/app/api/folders/route.ts +++ b/apps/sim/app/api/folders/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { workflowFolder } from '@sim/db/schema' import { and, asc, desc, eq, isNull } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { workflowFolder } from '@/db/schema' const logger = createLogger('FoldersAPI') diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts index 8d3449407..22c37b90f 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts @@ -83,7 +83,7 @@ describe('Document By ID API Route', () => { beforeEach(async () => { resetMocks() - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) diff --git a/apps/sim/app/api/knowledge/[id]/documents/route.test.ts b/apps/sim/app/api/knowledge/[id]/documents/route.test.ts index 84ef5cf9b..8709c1ba2 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/route.test.ts @@ -90,7 +90,7 @@ describe('Knowledge Base Documents API Route', () => { beforeEach(async () => { resetMocks() - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) diff --git a/apps/sim/app/api/knowledge/[id]/route.test.ts b/apps/sim/app/api/knowledge/[id]/route.test.ts index 66b9e544b..bbe491d46 100644 --- a/apps/sim/app/api/knowledge/[id]/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/route.test.ts @@ -72,7 +72,7 @@ describe('Knowledge Base By ID API Route', () => { beforeEach(async () => { vi.clearAllMocks() - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) diff --git a/apps/sim/app/api/knowledge/route.test.ts b/apps/sim/app/api/knowledge/route.test.ts index 0d3d81fcd..a80fe2774 100644 --- a/apps/sim/app/api/knowledge/route.test.ts +++ b/apps/sim/app/api/knowledge/route.test.ts @@ -33,7 +33,7 @@ describe('Knowledge Base API Route', () => { beforeEach(async () => { vi.clearAllMocks() - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) diff --git a/apps/sim/app/api/knowledge/search/route.test.ts b/apps/sim/app/api/knowledge/search/route.test.ts index ea0885924..68e5b97ba 100644 --- a/apps/sim/app/api/knowledge/search/route.test.ts +++ b/apps/sim/app/api/knowledge/search/route.test.ts @@ -128,7 +128,7 @@ describe('Knowledge Search API Route', () => { beforeEach(async () => { vi.clearAllMocks() - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) diff --git a/apps/sim/app/api/knowledge/search/utils.test.ts b/apps/sim/app/api/knowledge/search/utils.test.ts index c71757b9b..0261349eb 100644 --- a/apps/sim/app/api/knowledge/search/utils.test.ts +++ b/apps/sim/app/api/knowledge/search/utils.test.ts @@ -15,7 +15,7 @@ vi.mock('@/lib/logs/console/logger', () => ({ error: vi.fn(), })), })) -vi.mock('@/db') +vi.mock('@sim/db') vi.mock('@/lib/knowledge/documents/utils', () => ({ retryWithExponentialBackoff: (fn: any) => fn(), })) diff --git a/apps/sim/app/api/knowledge/search/utils.ts b/apps/sim/app/api/knowledge/search/utils.ts index d3f03e375..365623e87 100644 --- a/apps/sim/app/api/knowledge/search/utils.ts +++ b/apps/sim/app/api/knowledge/search/utils.ts @@ -1,7 +1,7 @@ +import { db } from '@sim/db' +import { document, embedding } from '@sim/db/schema' import { and, eq, inArray, isNull, sql } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { document, embedding } from '@/db/schema' const logger = createLogger('KnowledgeSearchUtils') diff --git a/apps/sim/app/api/knowledge/utils.test.ts b/apps/sim/app/api/knowledge/utils.test.ts index a35ca9a76..19ac490a9 100644 --- a/apps/sim/app/api/knowledge/utils.test.ts +++ b/apps/sim/app/api/knowledge/utils.test.ts @@ -84,7 +84,7 @@ vi.stubGlobal( }) ) -vi.mock('@/db', () => { +vi.mock('@sim/db', () => { const selectBuilder = { from(table: any) { return { diff --git a/apps/sim/app/api/knowledge/utils.ts b/apps/sim/app/api/knowledge/utils.ts index 215163878..29ec910b2 100644 --- a/apps/sim/app/api/knowledge/utils.ts +++ b/apps/sim/app/api/knowledge/utils.ts @@ -1,7 +1,7 @@ +import { db } from '@sim/db' +import { document, embedding, knowledgeBase } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { document, embedding, knowledgeBase } from '@/db/schema' export interface KnowledgeBaseData { id: string diff --git a/apps/sim/app/api/logs/[id]/route.ts b/apps/sim/app/api/logs/[id]/route.ts index 1f94fa18f..015197597 100644 --- a/apps/sim/app/api/logs/[id]/route.ts +++ b/apps/sim/app/api/logs/[id]/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowExecutionLogs } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { permissions, workflow, workflowExecutionLogs } from '@/db/schema' const logger = createLogger('LogDetailsByIdAPI') diff --git a/apps/sim/app/api/logs/cleanup/route.ts b/apps/sim/app/api/logs/cleanup/route.ts index 55ca2b35b..a64cbdf7f 100644 --- a/apps/sim/app/api/logs/cleanup/route.ts +++ b/apps/sim/app/api/logs/cleanup/route.ts @@ -1,4 +1,7 @@ import { PutObjectCommand } from '@aws-sdk/client-s3' +// Dynamic import for S3 client to avoid client-side bundling +import { db } from '@sim/db' +import { subscription, user, workflow, workflowExecutionLogs } from '@sim/db/schema' import { and, eq, inArray, lt, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { verifyCronAuth } from '@/lib/auth/internal' @@ -6,9 +9,6 @@ import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { snapshotService } from '@/lib/logs/execution/snapshot/service' import { deleteFile, isUsingCloudStorage } from '@/lib/uploads' -// Dynamic import for S3 client to avoid client-side bundling -import { db } from '@/db' -import { subscription, user, workflow, workflowExecutionLogs } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/logs/execution/[executionId]/route.ts b/apps/sim/app/api/logs/execution/[executionId]/route.ts index decfeea95..0a6058c10 100644 --- a/apps/sim/app/api/logs/execution/[executionId]/route.ts +++ b/apps/sim/app/api/logs/execution/[executionId]/route.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { workflowExecutionLogs, workflowExecutionSnapshots } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflowExecutionLogs, workflowExecutionSnapshots } from '@/db/schema' const logger = createLogger('LogsByExecutionIdAPI') diff --git a/apps/sim/app/api/logs/route.ts b/apps/sim/app/api/logs/route.ts index cfe6fbfb6..a359a2f6d 100644 --- a/apps/sim/app/api/logs/route.ts +++ b/apps/sim/app/api/logs/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowExecutionLogs } from '@sim/db/schema' import { and, desc, eq, gte, inArray, lte, type SQL, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { permissions, workflow, workflowExecutionLogs } from '@/db/schema' const logger = createLogger('LogsAPI') diff --git a/apps/sim/app/api/mcp/servers/[id]/refresh/route.ts b/apps/sim/app/api/mcp/servers/[id]/refresh/route.ts index 3f1da8b06..df1adfd02 100644 --- a/apps/sim/app/api/mcp/servers/[id]/refresh/route.ts +++ b/apps/sim/app/api/mcp/servers/[id]/refresh/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { mcpServers } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { withMcpAuth } from '@/lib/mcp/middleware' import { mcpService } from '@/lib/mcp/service' import { createMcpErrorResponse, createMcpSuccessResponse } from '@/lib/mcp/utils' -import { db } from '@/db' -import { mcpServers } from '@/db/schema' const logger = createLogger('McpServerRefreshAPI') diff --git a/apps/sim/app/api/mcp/servers/[id]/route.ts b/apps/sim/app/api/mcp/servers/[id]/route.ts index a60b275c1..e64ca9a63 100644 --- a/apps/sim/app/api/mcp/servers/[id]/route.ts +++ b/apps/sim/app/api/mcp/servers/[id]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { mcpServers } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' @@ -5,8 +7,6 @@ import { getParsedBody, withMcpAuth } from '@/lib/mcp/middleware' import { mcpService } from '@/lib/mcp/service' import { validateMcpServerUrl } from '@/lib/mcp/url-validator' import { createMcpErrorResponse, createMcpSuccessResponse } from '@/lib/mcp/utils' -import { db } from '@/db' -import { mcpServers } from '@/db/schema' const logger = createLogger('McpServerAPI') diff --git a/apps/sim/app/api/mcp/servers/route.ts b/apps/sim/app/api/mcp/servers/route.ts index de3151c31..6c82eb275 100644 --- a/apps/sim/app/api/mcp/servers/route.ts +++ b/apps/sim/app/api/mcp/servers/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { mcpServers } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' @@ -6,8 +8,6 @@ import { mcpService } from '@/lib/mcp/service' import type { McpTransport } from '@/lib/mcp/types' import { validateMcpServerUrl } from '@/lib/mcp/url-validator' import { createMcpErrorResponse, createMcpSuccessResponse } from '@/lib/mcp/utils' -import { db } from '@/db' -import { mcpServers } from '@/db/schema' const logger = createLogger('McpServersAPI') diff --git a/apps/sim/app/api/memory/[id]/route.ts b/apps/sim/app/api/memory/[id]/route.ts index 5887fb450..de33f2e56 100644 --- a/apps/sim/app/api/memory/[id]/route.ts +++ b/apps/sim/app/api/memory/[id]/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { memory } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { memory } from '@/db/schema' const logger = createLogger('MemoryByIdAPI') diff --git a/apps/sim/app/api/memory/route.ts b/apps/sim/app/api/memory/route.ts index 3c23fcb8d..8ce962be6 100644 --- a/apps/sim/app/api/memory/route.ts +++ b/apps/sim/app/api/memory/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { memory } from '@sim/db/schema' import { and, eq, isNull, like } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { memory } from '@/db/schema' const logger = createLogger('MemoryAPI') diff --git a/apps/sim/app/api/organizations/[id]/invitations/[invitationId]/route.ts b/apps/sim/app/api/organizations/[id]/invitations/[invitationId]/route.ts index 236ffd3a9..13519d3b9 100644 --- a/apps/sim/app/api/organizations/[id]/invitations/[invitationId]/route.ts +++ b/apps/sim/app/api/organizations/[id]/invitations/[invitationId]/route.ts @@ -1,9 +1,5 @@ import { randomUUID } from 'crypto' -import { and, eq } from 'drizzle-orm' -import { type NextRequest, NextResponse } from 'next/server' -import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' +import { db } from '@sim/db' import { invitation, member, @@ -12,7 +8,11 @@ import { user, type WorkspaceInvitationStatus, workspaceInvitation, -} from '@/db/schema' +} from '@sim/db/schema' +import { and, eq } from 'drizzle-orm' +import { type NextRequest, NextResponse } from 'next/server' +import { getSession } from '@/lib/auth' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('OrganizationInvitation') diff --git a/apps/sim/app/api/organizations/[id]/invitations/route.ts b/apps/sim/app/api/organizations/[id]/invitations/route.ts index 86de13aa1..cb2d96653 100644 --- a/apps/sim/app/api/organizations/[id]/invitations/route.ts +++ b/apps/sim/app/api/organizations/[id]/invitations/route.ts @@ -1,4 +1,14 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { + invitation, + member, + organization, + user, + type WorkspaceInvitationStatus, + workspace, + workspaceInvitation, +} from '@sim/db/schema' import { and, eq, inArray, isNull } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { @@ -16,16 +26,6 @@ import { quickValidateEmail } from '@/lib/email/validation' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { hasWorkspaceAdminAccess } from '@/lib/permissions/utils' -import { db } from '@/db' -import { - invitation, - member, - organization, - user, - type WorkspaceInvitationStatus, - workspace, - workspaceInvitation, -} from '@/db/schema' const logger = createLogger('OrganizationInvitations') diff --git a/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts b/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts index 7a26e29ae..ab4deaca6 100644 --- a/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts +++ b/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { member, user, userStats } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { getUserUsageData } from '@/lib/billing/core/usage' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, user, userStats } from '@/db/schema' const logger = createLogger('OrganizationMemberAPI') diff --git a/apps/sim/app/api/organizations/[id]/members/route.ts b/apps/sim/app/api/organizations/[id]/members/route.ts index 445539a00..193ace369 100644 --- a/apps/sim/app/api/organizations/[id]/members/route.ts +++ b/apps/sim/app/api/organizations/[id]/members/route.ts @@ -1,4 +1,6 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { invitation, member, organization, user, userStats } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getEmailSubject, renderInvitationEmail } from '@/components/emails/render-email' @@ -9,8 +11,6 @@ import { sendEmail } from '@/lib/email/mailer' import { quickValidateEmail } from '@/lib/email/validation' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { invitation, member, organization, user, userStats } from '@/db/schema' const logger = createLogger('OrganizationMembersAPI') diff --git a/apps/sim/app/api/organizations/[id]/route.ts b/apps/sim/app/api/organizations/[id]/route.ts index 2096e2a15..f05a52c78 100644 --- a/apps/sim/app/api/organizations/[id]/route.ts +++ b/apps/sim/app/api/organizations/[id]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { member, organization } from '@sim/db/schema' import { and, eq, ne } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' @@ -7,8 +9,6 @@ import { updateOrganizationSeats, } from '@/lib/billing/validation/seat-management' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, organization } from '@/db/schema' const logger = createLogger('OrganizationAPI') diff --git a/apps/sim/app/api/organizations/[id]/workspaces/route.ts b/apps/sim/app/api/organizations/[id]/workspaces/route.ts index 8fb95ce81..b4f3fb507 100644 --- a/apps/sim/app/api/organizations/[id]/workspaces/route.ts +++ b/apps/sim/app/api/organizations/[id]/workspaces/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { member, permissions, user, workspace } from '@sim/db/schema' import { and, eq, or } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, permissions, user, workspace } from '@/db/schema' const logger = createLogger('OrganizationWorkspacesAPI') diff --git a/apps/sim/app/api/schedules/[id]/route.ts b/apps/sim/app/api/schedules/[id]/route.ts index c9c5b5fc1..2c7492993 100644 --- a/apps/sim/app/api/schedules/[id]/route.ts +++ b/apps/sim/app/api/schedules/[id]/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { workflow, workflowSchedule } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { workflow, workflowSchedule } from '@/db/schema' const logger = createLogger('ScheduleAPI') diff --git a/apps/sim/app/api/schedules/[id]/status/route.ts b/apps/sim/app/api/schedules/[id]/status/route.ts index 7756ed257..3f3d3d7b2 100644 --- a/apps/sim/app/api/schedules/[id]/status/route.ts +++ b/apps/sim/app/api/schedules/[id]/status/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { workflow, workflowSchedule } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { workflow, workflowSchedule } from '@/db/schema' const logger = createLogger('ScheduleStatusAPI') diff --git a/apps/sim/app/api/schedules/execute/route.test.ts b/apps/sim/app/api/schedules/execute/route.test.ts index c7d14b89a..6adfe533a 100644 --- a/apps/sim/app/api/schedules/execute/route.test.ts +++ b/apps/sim/app/api/schedules/execute/route.test.ts @@ -33,7 +33,7 @@ describe('Scheduled Workflow Execution API Route', () => { })), })) - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockDb = { select: vi.fn().mockImplementation(() => ({ from: vi.fn().mockImplementation((table: string) => { @@ -147,7 +147,7 @@ describe('Scheduled Workflow Execution API Route', () => { }) it('should handle case with no due schedules', async () => { - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockDb = { select: vi.fn().mockImplementation(() => ({ from: vi.fn().mockImplementation(() => ({ @@ -183,7 +183,7 @@ describe('Scheduled Workflow Execution API Route', () => { }) it('should handle scheduler-level errors gracefully', async () => { - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockDb = { select: vi.fn().mockImplementation(() => { throw new Error('Database error') diff --git a/apps/sim/app/api/schedules/execute/route.ts b/apps/sim/app/api/schedules/execute/route.ts index 1a00f741c..a58030639 100644 --- a/apps/sim/app/api/schedules/execute/route.ts +++ b/apps/sim/app/api/schedules/execute/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { userStats, workflow, workflowSchedule } from '@sim/db/schema' import { Cron } from 'croner' import { and, eq, lte, not, sql } from 'drizzle-orm' import { NextResponse } from 'next/server' @@ -18,8 +20,6 @@ import { import { decryptSecret, generateRequestId } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { updateWorkflowRunCounts } from '@/lib/workflows/utils' -import { db } from '@/db' -import { userStats, workflow, workflowSchedule } from '@/db/schema' import { Executor } from '@/executor' import { Serializer } from '@/serializer' import { RateLimiter } from '@/services/queue' diff --git a/apps/sim/app/api/schedules/route.test.ts b/apps/sim/app/api/schedules/route.test.ts index 6638820a5..a118560c6 100644 --- a/apps/sim/app/api/schedules/route.test.ts +++ b/apps/sim/app/api/schedules/route.test.ts @@ -52,7 +52,7 @@ describe('Schedule Configuration API Route', () => { // Create mock database with test schedules // Mock the database to return workflow data for authorization check - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { let callCount = 0 const mockDb = { select: vi.fn().mockImplementation(() => ({ @@ -201,7 +201,7 @@ describe('Schedule Configuration API Route', () => { where: vi.fn().mockResolvedValue([]), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockImplementation(() => ({ from: vi.fn().mockImplementation(() => ({ @@ -271,7 +271,7 @@ describe('Schedule Configuration API Route', () => { */ it('should handle errors gracefully', async () => { // Mock the db to throw an error on insert - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockImplementation(() => ({ from: vi.fn().mockImplementation(() => ({ diff --git a/apps/sim/app/api/schedules/route.ts b/apps/sim/app/api/schedules/route.ts index dc610a6d5..a47acec32 100644 --- a/apps/sim/app/api/schedules/route.ts +++ b/apps/sim/app/api/schedules/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow, workflowSchedule } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -13,8 +15,6 @@ import { validateCronExpression, } from '@/lib/schedules/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { workflow, workflowSchedule } from '@/db/schema' const logger = createLogger('ScheduledAPI') diff --git a/apps/sim/app/api/templates/[id]/route.ts b/apps/sim/app/api/templates/[id]/route.ts index b7e5039ae..8420e6b51 100644 --- a/apps/sim/app/api/templates/[id]/route.ts +++ b/apps/sim/app/api/templates/[id]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { templates, workflow } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { hasAdminPermission } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { templates, workflow } from '@/db/schema' const logger = createLogger('TemplateByIdAPI') diff --git a/apps/sim/app/api/templates/[id]/star/route.ts b/apps/sim/app/api/templates/[id]/star/route.ts index da281ca49..9bcf55e31 100644 --- a/apps/sim/app/api/templates/[id]/star/route.ts +++ b/apps/sim/app/api/templates/[id]/star/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { templateStars, templates } from '@sim/db/schema' import { and, eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { templateStars, templates } from '@/db/schema' const logger = createLogger('TemplateStarAPI') diff --git a/apps/sim/app/api/templates/[id]/use/route.ts b/apps/sim/app/api/templates/[id]/use/route.ts index 33a02976c..f228ec666 100644 --- a/apps/sim/app/api/templates/[id]/use/route.ts +++ b/apps/sim/app/api/templates/[id]/use/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { templates, workflow, workflowBlocks, workflowEdges } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { templates, workflow, workflowBlocks, workflowEdges } from '@/db/schema' const logger = createLogger('TemplateUseAPI') diff --git a/apps/sim/app/api/templates/route.ts b/apps/sim/app/api/templates/route.ts index 9bc8ec9b6..76383d647 100644 --- a/apps/sim/app/api/templates/route.ts +++ b/apps/sim/app/api/templates/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { templateStars, templates, workflow } from '@sim/db/schema' import { and, desc, eq, ilike, or, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' @@ -5,8 +7,6 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { templateStars, templates, workflow } from '@/db/schema' const logger = createLogger('TemplatesAPI') diff --git a/apps/sim/app/api/tools/custom/route.test.ts b/apps/sim/app/api/tools/custom/route.test.ts index 949ad1e64..6f34f26fd 100644 --- a/apps/sim/app/api/tools/custom/route.test.ts +++ b/apps/sim/app/api/tools/custom/route.test.ts @@ -91,7 +91,7 @@ describe('Custom Tools API Routes', () => { mockDelete.mockReturnValue({ where: mockWhere }) // Mock database - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: mockSelect, insert: mockInsert, @@ -110,7 +110,7 @@ describe('Custom Tools API Routes', () => { })) // Mock schema - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ customTools: { userId: 'userId', // Add these properties to enable WHERE clauses with eq() id: 'id', diff --git a/apps/sim/app/api/tools/custom/route.ts b/apps/sim/app/api/tools/custom/route.ts index 885a69717..23327c9a3 100644 --- a/apps/sim/app/api/tools/custom/route.ts +++ b/apps/sim/app/api/tools/custom/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { customTools } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { getUserId } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { customTools } from '@/db/schema' const logger = createLogger('CustomToolsAPI') diff --git a/apps/sim/app/api/tools/gmail/label/route.ts b/apps/sim/app/api/tools/gmail/label/route.ts index 2d3ae5df4..5a0e8aa6d 100644 --- a/apps/sim/app/api/tools/gmail/label/route.ts +++ b/apps/sim/app/api/tools/gmail/label/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/gmail/labels/route.ts b/apps/sim/app/api/tools/gmail/labels/route.ts index aa90e28f0..3b177d4f4 100644 --- a/apps/sim/app/api/tools/gmail/labels/route.ts +++ b/apps/sim/app/api/tools/gmail/labels/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' const logger = createLogger('GmailLabelsAPI') diff --git a/apps/sim/app/api/tools/microsoft_planner/tasks/route.ts b/apps/sim/app/api/tools/microsoft_planner/tasks/route.ts index f25802e8c..c898e0338 100644 --- a/apps/sim/app/api/tools/microsoft_planner/tasks/route.ts +++ b/apps/sim/app/api/tools/microsoft_planner/tasks/route.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' import type { PlannerTask } from '@/tools/microsoft_planner/types' const logger = createLogger('MicrosoftPlannerTasksAPI') diff --git a/apps/sim/app/api/tools/onedrive/folder/route.ts b/apps/sim/app/api/tools/onedrive/folder/route.ts index d29ad7e57..49d2befb6 100644 --- a/apps/sim/app/api/tools/onedrive/folder/route.ts +++ b/apps/sim/app/api/tools/onedrive/folder/route.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/onedrive/folders/route.ts b/apps/sim/app/api/tools/onedrive/folders/route.ts index 4194addfb..b62d41179 100644 --- a/apps/sim/app/api/tools/onedrive/folders/route.ts +++ b/apps/sim/app/api/tools/onedrive/folders/route.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/outlook/folders/route.ts b/apps/sim/app/api/tools/outlook/folders/route.ts index 0e52c164d..78d75e494 100644 --- a/apps/sim/app/api/tools/outlook/folders/route.ts +++ b/apps/sim/app/api/tools/outlook/folders/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/sharepoint/site/route.ts b/apps/sim/app/api/tools/sharepoint/site/route.ts index 225bd748e..a31a8ed94 100644 --- a/apps/sim/app/api/tools/sharepoint/site/route.ts +++ b/apps/sim/app/api/tools/sharepoint/site/route.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/sharepoint/sites/route.ts b/apps/sim/app/api/tools/sharepoint/sites/route.ts index 93bc5bd09..3448ff22e 100644 --- a/apps/sim/app/api/tools/sharepoint/sites/route.ts +++ b/apps/sim/app/api/tools/sharepoint/sites/route.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' import type { SharepointSite } from '@/tools/sharepoint/types' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/wealthbox/item/route.ts b/apps/sim/app/api/tools/wealthbox/item/route.ts index ee0c21108..a57d40544 100644 --- a/apps/sim/app/api/tools/wealthbox/item/route.ts +++ b/apps/sim/app/api/tools/wealthbox/item/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/wealthbox/items/route.ts b/apps/sim/app/api/tools/wealthbox/items/route.ts index 999df67bb..579cd9087 100644 --- a/apps/sim/app/api/tools/wealthbox/items/route.ts +++ b/apps/sim/app/api/tools/wealthbox/items/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account } from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/users/me/api-keys/[id]/route.ts b/apps/sim/app/api/users/me/api-keys/[id]/route.ts index c0e13defa..cbd093092 100644 --- a/apps/sim/app/api/users/me/api-keys/[id]/route.ts +++ b/apps/sim/app/api/users/me/api-keys/[id]/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { apiKey } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { apiKey } from '@/db/schema' const logger = createLogger('ApiKeyAPI') diff --git a/apps/sim/app/api/users/me/api-keys/route.ts b/apps/sim/app/api/users/me/api-keys/route.ts index 4f24a4302..ca4e78d57 100644 --- a/apps/sim/app/api/users/me/api-keys/route.ts +++ b/apps/sim/app/api/users/me/api-keys/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { apiKey } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { nanoid } from 'nanoid' import { type NextRequest, NextResponse } from 'next/server' import { createApiKey, getApiKeyDisplayFormat } from '@/lib/api-key/auth' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { apiKey } from '@/db/schema' const logger = createLogger('ApiKeysAPI') diff --git a/apps/sim/app/api/users/me/profile/route.ts b/apps/sim/app/api/users/me/profile/route.ts index 6801376bc..074ca0add 100644 --- a/apps/sim/app/api/users/me/profile/route.ts +++ b/apps/sim/app/api/users/me/profile/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { user } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { user } from '@/db/schema' const logger = createLogger('UpdateUserProfileAPI') diff --git a/apps/sim/app/api/users/me/settings/route.ts b/apps/sim/app/api/users/me/settings/route.ts index 658ff3c29..a5a2d7265 100644 --- a/apps/sim/app/api/users/me/settings/route.ts +++ b/apps/sim/app/api/users/me/settings/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { settings } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { nanoid } from 'nanoid' import { NextResponse } from 'next/server' @@ -5,8 +7,6 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { settings } from '@/db/schema' const logger = createLogger('UserSettingsAPI') diff --git a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts index 8606665bf..77192d8d7 100644 --- a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts +++ b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts @@ -29,7 +29,7 @@ describe('Subscription Transfer API Routes', () => { createLogger: vi.fn().mockReturnValue(mockLogger), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDb, })) @@ -60,7 +60,7 @@ describe('Subscription Transfer API Routes', () => { }), })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ subscription: { id: 'id', referenceId: 'referenceId' }, organization: { id: 'id' }, member: { userId: 'userId', organizationId: 'organizationId', role: 'role' }, diff --git a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts index a7a8ca7e8..3a2986b53 100644 --- a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts +++ b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { member, organization, subscription } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, organization, subscription } from '@/db/schema' const logger = createLogger('SubscriptionTransferAPI') diff --git a/apps/sim/app/api/v1/logs/[id]/route.ts b/apps/sim/app/api/v1/logs/[id]/route.ts index f2be5918a..aa53fb496 100644 --- a/apps/sim/app/api/v1/logs/[id]/route.ts +++ b/apps/sim/app/api/v1/logs/[id]/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowExecutionLogs } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { createApiResponse, getUserLimits } from '@/app/api/v1/logs/meta' import { checkRateLimit, createRateLimitResponse } from '@/app/api/v1/middleware' -import { db } from '@/db' -import { permissions, workflow, workflowExecutionLogs } from '@/db/schema' const logger = createLogger('V1LogDetailsAPI') diff --git a/apps/sim/app/api/v1/logs/executions/[executionId]/route.ts b/apps/sim/app/api/v1/logs/executions/[executionId]/route.ts index 6800a1155..a68cd0f31 100644 --- a/apps/sim/app/api/v1/logs/executions/[executionId]/route.ts +++ b/apps/sim/app/api/v1/logs/executions/[executionId]/route.ts @@ -1,15 +1,15 @@ -import { and, eq } from 'drizzle-orm' -import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console/logger' -import { createApiResponse, getUserLimits } from '@/app/api/v1/logs/meta' -import { checkRateLimit, createRateLimitResponse } from '@/app/api/v1/middleware' -import { db } from '@/db' +import { db } from '@sim/db' import { permissions, workflow, workflowExecutionLogs, workflowExecutionSnapshots, -} from '@/db/schema' +} from '@sim/db/schema' +import { and, eq } from 'drizzle-orm' +import { type NextRequest, NextResponse } from 'next/server' +import { createLogger } from '@/lib/logs/console/logger' +import { createApiResponse, getUserLimits } from '@/app/api/v1/logs/meta' +import { checkRateLimit, createRateLimitResponse } from '@/app/api/v1/middleware' const logger = createLogger('V1ExecutionAPI') diff --git a/apps/sim/app/api/v1/logs/filters.ts b/apps/sim/app/api/v1/logs/filters.ts index d2061d4a4..825739daa 100644 --- a/apps/sim/app/api/v1/logs/filters.ts +++ b/apps/sim/app/api/v1/logs/filters.ts @@ -1,5 +1,5 @@ +import { workflow, workflowExecutionLogs } from '@sim/db/schema' import { and, desc, eq, gte, inArray, lte, type SQL, sql } from 'drizzle-orm' -import { workflow, workflowExecutionLogs } from '@/db/schema' export interface LogFilters { workspaceId: string diff --git a/apps/sim/app/api/v1/logs/route.ts b/apps/sim/app/api/v1/logs/route.ts index aba568c58..69b95273d 100644 --- a/apps/sim/app/api/v1/logs/route.ts +++ b/apps/sim/app/api/v1/logs/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowExecutionLogs } from '@sim/db/schema' import { and, eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { createLogger } from '@/lib/logs/console/logger' import { buildLogFilters, getOrderBy } from '@/app/api/v1/logs/filters' import { createApiResponse, getUserLimits } from '@/app/api/v1/logs/meta' import { checkRateLimit, createRateLimitResponse } from '@/app/api/v1/middleware' -import { db } from '@/db' -import { permissions, workflow, workflowExecutionLogs } from '@/db/schema' const logger = createLogger('V1LogsAPI') diff --git a/apps/sim/app/api/wand-generate/route.ts b/apps/sim/app/api/wand-generate/route.ts index 9a1954e2e..099bc3ea5 100644 --- a/apps/sim/app/api/wand-generate/route.ts +++ b/apps/sim/app/api/wand-generate/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { userStats, workflow } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import OpenAI, { AzureOpenAI } from 'openai' @@ -5,8 +7,6 @@ import { env } from '@/lib/env' import { getCostMultiplier, isBillingEnabled } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { userStats, workflow } from '@/db/schema' import { getModelPricing } from '@/providers/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/webhooks/[id]/route.ts b/apps/sim/app/api/webhooks/[id]/route.ts index 31d465c32..672d04a2d 100644 --- a/apps/sim/app/api/webhooks/[id]/route.ts +++ b/apps/sim/app/api/webhooks/[id]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { webhook, workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' @@ -6,8 +8,6 @@ import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' import { getOAuthToken } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { webhook, workflow } from '@/db/schema' const logger = createLogger('WebhookAPI') diff --git a/apps/sim/app/api/webhooks/route.ts b/apps/sim/app/api/webhooks/route.ts index 64cd2eb4a..04727bc33 100644 --- a/apps/sim/app/api/webhooks/route.ts +++ b/apps/sim/app/api/webhooks/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { webhook, workflow } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { nanoid } from 'nanoid' import { type NextRequest, NextResponse } from 'next/server' @@ -7,8 +9,6 @@ import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' import { getOAuthToken } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { webhook, workflow } from '@/db/schema' const logger = createLogger('WebhooksAPI') diff --git a/apps/sim/app/api/webhooks/test/route.ts b/apps/sim/app/api/webhooks/test/route.ts index 698a385d3..3bd05846c 100644 --- a/apps/sim/app/api/webhooks/test/route.ts +++ b/apps/sim/app/api/webhooks/test/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { webhook } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { webhook } from '@/db/schema' const logger = createLogger('WebhookTestAPI') diff --git a/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts b/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts index e0c0eb1f3..15ee84509 100644 --- a/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts +++ b/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts @@ -86,7 +86,7 @@ vi.mock('@/executor', () => ({ })), })) -vi.mock('@/db', () => { +vi.mock('@sim/db', () => { const dbMock = { select: vi.fn().mockImplementation((columns) => ({ from: vi.fn().mockImplementation((table) => ({ @@ -202,7 +202,7 @@ describe('Webhook Trigger API Route', () => { const req = new NextRequest(new URL(mockUrl)) // Mock database to return a WhatsApp webhook with matching token - const { db } = await import('@/db') + const { db } = await import('@sim/db') const whereMock = vi.fn().mockReturnValue([ { id: 'webhook-id', @@ -250,7 +250,7 @@ describe('Webhook Trigger API Route', () => { */ it('should handle 404 for non-existent webhooks', async () => { // Configure DB mock to return empty result (no webhook found) - const { db } = await import('@/db') + const { db } = await import('@sim/db') const limitMock = vi.fn().mockReturnValue([]) const whereMock = vi.fn().mockReturnValue({ limit: limitMock }) const innerJoinMock = vi.fn().mockReturnValue({ where: whereMock }) @@ -281,7 +281,7 @@ describe('Webhook Trigger API Route', () => { describe('Generic Webhook Authentication', () => { const setupGenericWebhook = async (config: Record) => { - const { db } = await import('@/db') + const { db } = await import('@sim/db') const limitMock = vi.fn().mockReturnValue([ { webhook: { diff --git a/apps/sim/app/api/webhooks/trigger/[path]/route.ts b/apps/sim/app/api/webhooks/trigger/[path]/route.ts index 76ca29e83..74dbb0897 100644 --- a/apps/sim/app/api/webhooks/trigger/[path]/route.ts +++ b/apps/sim/app/api/webhooks/trigger/[path]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { webhook, workflow } from '@sim/db/schema' import { tasks } from '@trigger.dev/sdk' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' @@ -13,8 +15,6 @@ import { validateMicrosoftTeamsSignature, } from '@/lib/webhooks/utils' import { executeWebhookJob } from '@/background/webhook-execution' -import { db } from '@/db' -import { webhook, workflow } from '@/db/schema' import { RateLimiter } from '@/services/queue' const logger = createLogger('WebhookTriggerAPI') diff --git a/apps/sim/app/api/workflows/[id]/autolayout/route.ts b/apps/sim/app/api/workflows/[id]/autolayout/route.ts index 0d8e86f0d..23ee28ccd 100644 --- a/apps/sim/app/api/workflows/[id]/autolayout/route.ts +++ b/apps/sim/app/api/workflows/[id]/autolayout/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow as workflowTable } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -10,8 +12,6 @@ import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { getAllBlocks } from '@/blocks/registry' import type { BlockConfig } from '@/blocks/types' import { resolveOutputType } from '@/blocks/utils' -import { db } from '@/db' -import { workflow as workflowTable } from '@/db/schema' import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/workflows/[id]/chat/status/route.ts b/apps/sim/app/api/workflows/[id]/chat/status/route.ts index 137c25136..d6d98dfbe 100644 --- a/apps/sim/app/api/workflows/[id]/chat/status/route.ts +++ b/apps/sim/app/api/workflows/[id]/chat/status/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { chat } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat } from '@/db/schema' const logger = createLogger('ChatStatusAPI') diff --git a/apps/sim/app/api/workflows/[id]/deploy/route.test.ts b/apps/sim/app/api/workflows/[id]/deploy/route.test.ts index 753e99fde..3b085bf2b 100644 --- a/apps/sim/app/api/workflows/[id]/deploy/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/deploy/route.test.ts @@ -99,7 +99,7 @@ describe('Workflow Deployment API Route', () => { })) // Mock the database schema module - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ workflow: {}, apiKey: {}, workflowBlocks: {}, @@ -115,7 +115,7 @@ describe('Workflow Deployment API Route', () => { // Mock the database module with proper chainable query builder let selectCallCount = 0 - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockImplementation(() => { selectCallCount++ @@ -186,7 +186,7 @@ describe('Workflow Deployment API Route', () => { * Test GET deployment status */ it('should fetch deployment info successfully', async () => { - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -234,7 +234,7 @@ describe('Workflow Deployment API Route', () => { }), }) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { update: mockUpdate, }, diff --git a/apps/sim/app/api/workflows/[id]/deploy/route.ts b/apps/sim/app/api/workflows/[id]/deploy/route.ts index caaedee42..ab13d28d4 100644 --- a/apps/sim/app/api/workflows/[id]/deploy/route.ts +++ b/apps/sim/app/api/workflows/[id]/deploy/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { apiKey, workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@sim/db/schema' import { and, desc, eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { v4 as uuidv4 } from 'uuid' @@ -6,8 +8,6 @@ import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { validateWorkflowAccess } from '@/app/api/workflows/middleware' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { apiKey, workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' const logger = createLogger('WorkflowDeployAPI') diff --git a/apps/sim/app/api/workflows/[id]/deployed/route.ts b/apps/sim/app/api/workflows/[id]/deployed/route.ts index f4662627c..bf6e91492 100644 --- a/apps/sim/app/api/workflows/[id]/deployed/route.ts +++ b/apps/sim/app/api/workflows/[id]/deployed/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { validateWorkflowAccess } from '@/app/api/workflows/middleware' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { workflow } from '@/db/schema' const logger = createLogger('WorkflowDeployedStateAPI') diff --git a/apps/sim/app/api/workflows/[id]/duplicate/route.ts b/apps/sim/app/api/workflows/[id]/duplicate/route.ts index 8f1dc984e..8cf53b742 100644 --- a/apps/sim/app/api/workflows/[id]/duplicate/route.ts +++ b/apps/sim/app/api/workflows/[id]/duplicate/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' import type { Variable } from '@/stores/panel/variables/types' import type { LoopConfig, ParallelConfig } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/app/api/workflows/[id]/execute/route.test.ts b/apps/sim/app/api/workflows/[id]/execute/route.test.ts index 8d7aceb53..ebdd92dba 100644 --- a/apps/sim/app/api/workflows/[id]/execute/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/execute/route.test.ts @@ -78,7 +78,7 @@ describe('Workflow Execution API Route', () => { }), })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ subscription: { plan: 'plan', referenceId: 'referenceId', @@ -205,7 +205,7 @@ describe('Workflow Execution API Route', () => { }), })) - vi.doMock('@/db', () => { + vi.doMock('@sim/db', () => { const mockDb = { select: vi.fn().mockImplementation((columns) => ({ from: vi.fn().mockImplementation((table) => ({ diff --git a/apps/sim/app/api/workflows/[id]/execute/route.ts b/apps/sim/app/api/workflows/[id]/execute/route.ts index e71ae5f62..73c10606c 100644 --- a/apps/sim/app/api/workflows/[id]/execute/route.ts +++ b/apps/sim/app/api/workflows/[id]/execute/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { userStats } from '@sim/db/schema' import { tasks } from '@trigger.dev/sdk' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' @@ -19,8 +21,6 @@ import { } from '@/lib/workflows/utils' import { validateWorkflowAccess } from '@/app/api/workflows/middleware' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { userStats } from '@/db/schema' import { Executor } from '@/executor' import { Serializer } from '@/serializer' import { RateLimitError, RateLimiter, type TriggerType } from '@/services/queue' diff --git a/apps/sim/app/api/workflows/[id]/log-webhook/[webhookId]/route.ts b/apps/sim/app/api/workflows/[id]/log-webhook/[webhookId]/route.ts index f08297cb2..db2100fda 100644 --- a/apps/sim/app/api/workflows/[id]/log-webhook/[webhookId]/route.ts +++ b/apps/sim/app/api/workflows/[id]/log-webhook/[webhookId]/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowLogWebhook } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { encryptSecret } from '@/lib/utils' -import { db } from '@/db' -import { permissions, workflow, workflowLogWebhook } from '@/db/schema' const logger = createLogger('WorkflowLogWebhookUpdate') diff --git a/apps/sim/app/api/workflows/[id]/log-webhook/route.ts b/apps/sim/app/api/workflows/[id]/log-webhook/route.ts index b60bb05ca..5287effc7 100644 --- a/apps/sim/app/api/workflows/[id]/log-webhook/route.ts +++ b/apps/sim/app/api/workflows/[id]/log-webhook/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowLogWebhook } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' @@ -5,8 +7,6 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { encryptSecret } from '@/lib/utils' -import { db } from '@/db' -import { permissions, workflow, workflowLogWebhook } from '@/db/schema' const logger = createLogger('WorkflowLogWebhookAPI') diff --git a/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts b/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts index e7497f619..fdd9be09d 100644 --- a/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts +++ b/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts @@ -1,12 +1,12 @@ import { createHmac } from 'crypto' +import { db } from '@sim/db' +import { permissions, workflow, workflowLogWebhook } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { decryptSecret } from '@/lib/utils' -import { db } from '@/db' -import { permissions, workflow, workflowLogWebhook } from '@/db/schema' const logger = createLogger('WorkflowLogWebhookTestAPI') diff --git a/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts b/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts index 078ff9f5e..42327774b 100644 --- a/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts +++ b/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { env } from '@/lib/env' @@ -6,8 +8,6 @@ import { generateRequestId } from '@/lib/utils' import { saveWorkflowToNormalizedTables } from '@/lib/workflows/db-helpers' import { validateWorkflowAccess } from '@/app/api/workflows/middleware' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { workflow } from '@/db/schema' import type { WorkflowState } from '@/stores/workflows/workflow/types' const logger = createLogger('RevertToDeployedAPI') diff --git a/apps/sim/app/api/workflows/[id]/route.test.ts b/apps/sim/app/api/workflows/[id]/route.test.ts index 4ed6bf114..fb099ac7f 100644 --- a/apps/sim/app/api/workflows/[id]/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/route.test.ts @@ -60,7 +60,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -105,7 +105,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -154,7 +154,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -200,7 +200,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -250,7 +250,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -294,7 +294,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -340,7 +340,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -391,7 +391,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -439,7 +439,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -488,7 +488,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -542,7 +542,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -587,7 +587,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ @@ -625,7 +625,7 @@ describe('Workflow By ID API Route', () => { }), })) - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: { select: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({ diff --git a/apps/sim/app/api/workflows/[id]/route.ts b/apps/sim/app/api/workflows/[id]/route.ts index 5a4a24a3a..26e92cef9 100644 --- a/apps/sim/app/api/workflows/[id]/route.ts +++ b/apps/sim/app/api/workflows/[id]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { templates, workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -9,8 +11,6 @@ import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions, hasAdminPermission } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' -import { db } from '@/db' -import { templates, workflow } from '@/db/schema' const logger = createLogger('WorkflowByIdAPI') diff --git a/apps/sim/app/api/workflows/[id]/state/route.ts b/apps/sim/app/api/workflows/[id]/state/route.ts index 8bef22f51..3d593339d 100644 --- a/apps/sim/app/api/workflows/[id]/state/route.ts +++ b/apps/sim/app/api/workflows/[id]/state/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -7,8 +9,6 @@ import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' import { saveWorkflowToNormalizedTables } from '@/lib/workflows/db-helpers' import { sanitizeAgentToolsInBlocks } from '@/lib/workflows/validation' -import { db } from '@/db' -import { workflow } from '@/db/schema' const logger = createLogger('WorkflowStateAPI') diff --git a/apps/sim/app/api/workflows/[id]/stats/route.ts b/apps/sim/app/api/workflows/[id]/stats/route.ts index cf7da2b8f..69e4513f3 100644 --- a/apps/sim/app/api/workflows/[id]/stats/route.ts +++ b/apps/sim/app/api/workflows/[id]/stats/route.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { userStats, workflow } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { userStats, workflow } from '@/db/schema' const logger = createLogger('WorkflowStatsAPI') diff --git a/apps/sim/app/api/workflows/[id]/variables/route.ts b/apps/sim/app/api/workflows/[id]/variables/route.ts index 91f7b2ef3..3c3ea5c22 100644 --- a/apps/sim/app/api/workflows/[id]/variables/route.ts +++ b/apps/sim/app/api/workflows/[id]/variables/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { workflow } from '@/db/schema' import type { Variable } from '@/stores/panel/variables/types' const logger = createLogger('WorkflowVariablesAPI') diff --git a/apps/sim/app/api/workflows/[id]/yaml/route.ts b/apps/sim/app/api/workflows/[id]/yaml/route.ts index 54e33237f..4507e795f 100644 --- a/apps/sim/app/api/workflows/[id]/yaml/route.ts +++ b/apps/sim/app/api/workflows/[id]/yaml/route.ts @@ -1,4 +1,6 @@ import crypto from 'crypto' +import { db } from '@sim/db' +import { customTools, workflowCheckpoints, workflow as workflowTable } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -15,8 +17,6 @@ import { getUserId } from '@/app/api/auth/oauth/utils' import { getAllBlocks, getBlock } from '@/blocks' import type { BlockConfig } from '@/blocks/types' import { resolveOutputType } from '@/blocks/utils' -import { db } from '@/db' -import { customTools, workflowCheckpoints, workflow as workflowTable } from '@/db/schema' import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' const logger = createLogger('YamlWorkflowAPI') diff --git a/apps/sim/app/api/workflows/public/[id]/route.ts b/apps/sim/app/api/workflows/public/[id]/route.ts index 55dc8f1b3..b94c849b4 100644 --- a/apps/sim/app/api/workflows/public/[id]/route.ts +++ b/apps/sim/app/api/workflows/public/[id]/route.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { marketplace, workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { marketplace, workflow } from '@/db/schema' const logger = createLogger('PublicWorkflowAPI') diff --git a/apps/sim/app/api/workflows/route.ts b/apps/sim/app/api/workflows/route.ts index eff74ee62..3dfee755d 100644 --- a/apps/sim/app/api/workflows/route.ts +++ b/apps/sim/app/api/workflows/route.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { workflow, workflowBlocks, workspace } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { workflow, workflowBlocks, workspace } from '@/db/schema' import { verifyWorkspaceMembership } from './utils' const logger = createLogger('WorkflowAPI') diff --git a/apps/sim/app/api/workflows/yaml/export/route.ts b/apps/sim/app/api/workflows/yaml/export/route.ts index 137352858..5603fec3e 100644 --- a/apps/sim/app/api/workflows/yaml/export/route.ts +++ b/apps/sim/app/api/workflows/yaml/export/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' @@ -9,8 +11,6 @@ import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { getAllBlocks } from '@/blocks/registry' import type { BlockConfig } from '@/blocks/types' import { resolveOutputType } from '@/blocks/utils' -import { db } from '@/db' -import { workflow } from '@/db/schema' import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' const logger = createLogger('WorkflowYamlExportAPI') diff --git a/apps/sim/app/api/workspaces/[id]/api-keys/[keyId]/route.ts b/apps/sim/app/api/workspaces/[id]/api-keys/[keyId]/route.ts index 96cd1ef2b..bca567aa5 100644 --- a/apps/sim/app/api/workspaces/[id]/api-keys/[keyId]/route.ts +++ b/apps/sim/app/api/workspaces/[id]/api-keys/[keyId]/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { apiKey } from '@sim/db/schema' import { and, eq, not } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { apiKey } from '@/db/schema' const logger = createLogger('WorkspaceApiKeyAPI') diff --git a/apps/sim/app/api/workspaces/[id]/api-keys/route.ts b/apps/sim/app/api/workspaces/[id]/api-keys/route.ts index c33ec087a..8b5b190e0 100644 --- a/apps/sim/app/api/workspaces/[id]/api-keys/route.ts +++ b/apps/sim/app/api/workspaces/[id]/api-keys/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { apiKey, workspace } from '@sim/db/schema' import { and, eq, inArray } from 'drizzle-orm' import { nanoid } from 'nanoid' import { type NextRequest, NextResponse } from 'next/server' @@ -7,8 +9,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { apiKey, workspace } from '@/db/schema' const logger = createLogger('WorkspaceApiKeysAPI') diff --git a/apps/sim/app/api/workspaces/[id]/environment/route.ts b/apps/sim/app/api/workspaces/[id]/environment/route.ts index 31aa42f98..6ea1478ae 100644 --- a/apps/sim/app/api/workspaces/[id]/environment/route.ts +++ b/apps/sim/app/api/workspaces/[id]/environment/route.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { environment, workspace, workspaceEnvironment } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' @@ -5,8 +7,6 @@ import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { decryptSecret, encryptSecret, generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { environment, workspace, workspaceEnvironment } from '@/db/schema' const logger = createLogger('WorkspaceEnvironmentAPI') diff --git a/apps/sim/app/api/workspaces/[id]/permissions/route.ts b/apps/sim/app/api/workspaces/[id]/permissions/route.ts index 3d8947621..531ea7475 100644 --- a/apps/sim/app/api/workspaces/[id]/permissions/route.ts +++ b/apps/sim/app/api/workspaces/[id]/permissions/route.ts @@ -1,11 +1,11 @@ import crypto from 'crypto' +import { db } from '@sim/db' +import { permissions, type permissionTypeEnum } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUsersWithPermissions, hasWorkspaceAdminAccess } from '@/lib/permissions/utils' -import { db } from '@/db' -import { permissions, type permissionTypeEnum } from '@/db/schema' const logger = createLogger('WorkspacesPermissionsAPI') diff --git a/apps/sim/app/api/workspaces/[id]/route.ts b/apps/sim/app/api/workspaces/[id]/route.ts index b5c53bf04..10389e8fc 100644 --- a/apps/sim/app/api/workspaces/[id]/route.ts +++ b/apps/sim/app/api/workspaces/[id]/route.ts @@ -1,14 +1,14 @@ +import { workflow } from '@sim/db/schema' import { and, eq, inArray } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' -import { workflow } from '@/db/schema' const logger = createLogger('WorkspaceByIdAPI') +import { db } from '@sim/db' +import { knowledgeBase, permissions, templates, workspace } from '@sim/db/schema' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { knowledgeBase, permissions, templates, workspace } from '@/db/schema' export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { const { id } = await params diff --git a/apps/sim/app/api/workspaces/invitations/[invitationId]/route.test.ts b/apps/sim/app/api/workspaces/invitations/[invitationId]/route.test.ts index 3958102d2..322642bb1 100644 --- a/apps/sim/app/api/workspaces/invitations/[invitationId]/route.test.ts +++ b/apps/sim/app/api/workspaces/invitations/[invitationId]/route.test.ts @@ -89,11 +89,11 @@ describe('Workspace Invitation [invitationId] API Route', () => { transaction: mockTransaction, } - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ workspaceInvitation: { id: 'id', workspaceId: 'workspaceId', @@ -376,7 +376,7 @@ describe('Workspace Invitation [invitationId] API Route', () => { then: vi.fn().mockRejectedValue(new Error('Database connection failed')), } - vi.doMock('@/db', () => ({ db: mockErrorDb })) + vi.doMock('@sim/db', () => ({ db: mockErrorDb })) vi.doMock('@/lib/auth', () => ({ getSession: vi.fn().mockResolvedValue({ user: mockUser }), })) @@ -393,7 +393,7 @@ describe('Workspace Invitation [invitationId] API Route', () => { ? value.toLowerCase() === 'true' || value === '1' : Boolean(value), })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ workspaceInvitation: { id: 'id' }, })) vi.doMock('drizzle-orm', () => ({ diff --git a/apps/sim/app/api/workspaces/invitations/[invitationId]/route.ts b/apps/sim/app/api/workspaces/invitations/[invitationId]/route.ts index 27701b901..9b8a379cd 100644 --- a/apps/sim/app/api/workspaces/invitations/[invitationId]/route.ts +++ b/apps/sim/app/api/workspaces/invitations/[invitationId]/route.ts @@ -1,5 +1,13 @@ import { randomUUID } from 'crypto' import { render } from '@react-email/render' +import { db } from '@sim/db' +import { + permissions, + user, + type WorkspaceInvitationStatus, + workspace, + workspaceInvitation, +} from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { WorkspaceInvitationEmail } from '@/components/emails/workspace-invitation' @@ -8,14 +16,6 @@ import { sendEmail } from '@/lib/email/mailer' import { getFromEmailAddress } from '@/lib/email/utils' import { env } from '@/lib/env' import { hasWorkspaceAdminAccess } from '@/lib/permissions/utils' -import { db } from '@/db' -import { - permissions, - user, - type WorkspaceInvitationStatus, - workspace, - workspaceInvitation, -} from '@/db/schema' // GET /api/workspaces/invitations/[invitationId] - Get invitation details OR accept via token export async function GET( diff --git a/apps/sim/app/api/workspaces/invitations/route.test.ts b/apps/sim/app/api/workspaces/invitations/route.test.ts index e4eb4b030..d27221b54 100644 --- a/apps/sim/app/api/workspaces/invitations/route.test.ts +++ b/apps/sim/app/api/workspaces/invitations/route.test.ts @@ -43,11 +43,11 @@ describe('Workspace Invitations API Route', () => { values: mockInsertValues, } - vi.doMock('@/db', () => ({ + vi.doMock('@sim/db', () => ({ db: mockDbChain, })) - vi.doMock('@/db/schema', () => ({ + vi.doMock('@sim/db/schema', () => ({ user: { id: 'user_id', email: 'user_email', name: 'user_name', image: 'user_image' }, workspace: { id: 'workspace_id', name: 'workspace_name', ownerId: 'owner_id' }, permissions: { diff --git a/apps/sim/app/api/workspaces/invitations/route.ts b/apps/sim/app/api/workspaces/invitations/route.ts index 5889a431e..e15885a80 100644 --- a/apps/sim/app/api/workspaces/invitations/route.ts +++ b/apps/sim/app/api/workspaces/invitations/route.ts @@ -1,5 +1,14 @@ import { randomUUID } from 'crypto' import { render } from '@react-email/render' +import { db } from '@sim/db' +import { + permissions, + type permissionTypeEnum, + user, + type WorkspaceInvitationStatus, + workspace, + workspaceInvitation, +} from '@sim/db/schema' import { and, eq, inArray } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { WorkspaceInvitationEmail } from '@/components/emails/workspace-invitation' @@ -8,15 +17,6 @@ import { sendEmail } from '@/lib/email/mailer' import { getFromEmailAddress } from '@/lib/email/utils' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { - permissions, - type permissionTypeEnum, - user, - type WorkspaceInvitationStatus, - workspace, - workspaceInvitation, -} from '@/db/schema' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/workspaces/members/[id]/route.ts b/apps/sim/app/api/workspaces/members/[id]/route.ts index 6d0c536e3..68f1e4b5d 100644 --- a/apps/sim/app/api/workspaces/members/[id]/route.ts +++ b/apps/sim/app/api/workspaces/members/[id]/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { permissions } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { hasWorkspaceAdminAccess } from '@/lib/permissions/utils' -import { db } from '@/db' -import { permissions } from '@/db/schema' // DELETE /api/workspaces/members/[id] - Remove a member from a workspace export async function DELETE(req: NextRequest, { params }: { params: Promise<{ id: string }> }) { diff --git a/apps/sim/app/api/workspaces/members/route.ts b/apps/sim/app/api/workspaces/members/route.ts index 3bbf48589..f7f2e5d4c 100644 --- a/apps/sim/app/api/workspaces/members/route.ts +++ b/apps/sim/app/api/workspaces/members/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { permissions, type permissionTypeEnum, user } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { hasAdminPermission } from '@/lib/permissions/utils' -import { db } from '@/db' -import { permissions, type permissionTypeEnum, user } from '@/db/schema' type PermissionType = (typeof permissionTypeEnum.enumValues)[number] diff --git a/apps/sim/app/api/workspaces/route.ts b/apps/sim/app/api/workspaces/route.ts index ddb4246e7..a42e35cc0 100644 --- a/apps/sim/app/api/workspaces/route.ts +++ b/apps/sim/app/api/workspaces/route.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { permissions, workflow, workflowBlocks, workspace } from '@sim/db/schema' import { and, desc, eq, isNull } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { permissions, workflow, workflowBlocks, workspace } from '@/db/schema' const logger = createLogger('Workspaces') diff --git a/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx b/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx index ee6293106..44725c06c 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { templateStars, templates } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { notFound } from 'next/navigation' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import TemplateDetails from '@/app/workspace/[workspaceId]/templates/[id]/template' import type { Template } from '@/app/workspace/[workspaceId]/templates/templates' -import { db } from '@/db' -import { templateStars, templates } from '@/db/schema' const logger = createLogger('TemplatePage') diff --git a/apps/sim/app/workspace/[workspaceId]/templates/page.tsx b/apps/sim/app/workspace/[workspaceId]/templates/page.tsx index d5e7e593b..cf57765f1 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/page.tsx @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { templateStars, templates } from '@sim/db/schema' import { and, desc, eq, sql } from 'drizzle-orm' import { getSession } from '@/lib/auth' import type { Template } from '@/app/workspace/[workspaceId]/templates/templates' import Templates from '@/app/workspace/[workspaceId]/templates/templates' -import { db } from '@/db' -import { templateStars, templates } from '@/db/schema' export default async function TemplatesPage() { const session = await getSession() diff --git a/apps/sim/background/logs-webhook-delivery.ts b/apps/sim/background/logs-webhook-delivery.ts index cf47c67b9..9ad0df2d9 100644 --- a/apps/sim/background/logs-webhook-delivery.ts +++ b/apps/sim/background/logs-webhook-delivery.ts @@ -1,16 +1,16 @@ import { createHmac } from 'crypto' +import { db } from '@sim/db' +import { + workflowLogWebhook, + workflowLogWebhookDelivery, + workflow as workflowTable, +} from '@sim/db/schema' import { task, wait } from '@trigger.dev/sdk' import { and, eq, isNull, lte, or, sql } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' import { createLogger } from '@/lib/logs/console/logger' import type { WorkflowExecutionLog } from '@/lib/logs/types' import { decryptSecret } from '@/lib/utils' -import { db } from '@/db' -import { - workflowLogWebhook, - workflowLogWebhookDelivery, - workflow as workflowTable, -} from '@/db/schema' const logger = createLogger('LogsWebhookDelivery') diff --git a/apps/sim/background/webhook-execution.ts b/apps/sim/background/webhook-execution.ts index 99fde9572..61bc8ede4 100644 --- a/apps/sim/background/webhook-execution.ts +++ b/apps/sim/background/webhook-execution.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { userStats, webhook, workflow as workflowTable } from '@sim/db/schema' import { task } from '@trigger.dev/sdk' import { eq, sql } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' @@ -11,8 +13,6 @@ import { decryptSecret } from '@/lib/utils' import { fetchAndProcessAirtablePayloads, formatWebhookInput } from '@/lib/webhooks/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { updateWorkflowRunCounts } from '@/lib/workflows/utils' -import { db } from '@/db' -import { userStats, webhook, workflow as workflowTable } from '@/db/schema' import { Executor } from '@/executor' import { Serializer } from '@/serializer' import { mergeSubblockState } from '@/stores/workflows/server-utils' diff --git a/apps/sim/background/workflow-execution.ts b/apps/sim/background/workflow-execution.ts index d5f31e47b..68a0ec099 100644 --- a/apps/sim/background/workflow-execution.ts +++ b/apps/sim/background/workflow-execution.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { userStats, workflow as workflowTable } from '@sim/db/schema' import { task } from '@trigger.dev/sdk' import { eq, sql } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' @@ -9,8 +11,6 @@ import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { decryptSecret } from '@/lib/utils' import { loadDeployedWorkflowState } from '@/lib/workflows/db-helpers' import { updateWorkflowRunCounts } from '@/lib/workflows/utils' -import { db } from '@/db' -import { userStats, workflow as workflowTable } from '@/db/schema' import { Executor } from '@/executor' import { Serializer } from '@/serializer' import { mergeSubblockState } from '@/stores/workflows/server-utils' diff --git a/apps/sim/drizzle.config.ts b/apps/sim/drizzle.config.ts index a0088e017..3f0cfbd89 100644 --- a/apps/sim/drizzle.config.ts +++ b/apps/sim/drizzle.config.ts @@ -2,8 +2,8 @@ import type { Config } from 'drizzle-kit' import { env } from './lib/env' export default { - schema: './db/schema.ts', - out: './db/migrations', + schema: '../../packages/db/schema.ts', + out: '../../packages/db/migrations', dialect: 'postgresql', dbCredentials: { url: env.DATABASE_URL, diff --git a/apps/sim/hooks/use-workspace-permissions.ts b/apps/sim/hooks/use-workspace-permissions.ts index 953060ba0..682026b0e 100644 --- a/apps/sim/hooks/use-workspace-permissions.ts +++ b/apps/sim/hooks/use-workspace-permissions.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from 'react' +import type { permissionTypeEnum } from '@sim/db/schema' import { createLogger } from '@/lib/logs/console/logger' -import type { permissionTypeEnum } from '@/db/schema' import { API_ENDPOINTS } from '@/stores/constants' const logger = createLogger('useWorkspacePermissions') diff --git a/apps/sim/lib/api-key/service.ts b/apps/sim/lib/api-key/service.ts index bf62000a9..9f13e2369 100644 --- a/apps/sim/lib/api-key/service.ts +++ b/apps/sim/lib/api-key/service.ts @@ -1,11 +1,11 @@ import { createCipheriv, createDecipheriv, randomBytes } from 'crypto' +import { db } from '@sim/db' +import { apiKey as apiKeyTable, workspace } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { nanoid } from 'nanoid' import { authenticateApiKey } from '@/lib/api-key/auth' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { apiKey as apiKeyTable, workspace } from '@/db/schema' const logger = createLogger('ApiKeyService') diff --git a/apps/sim/lib/auth.ts b/apps/sim/lib/auth.ts index cf8ac7be2..6140a50aa 100644 --- a/apps/sim/lib/auth.ts +++ b/apps/sim/lib/auth.ts @@ -1,4 +1,6 @@ import { stripe } from '@better-auth/stripe' +import { db } from '@sim/db' +import * as schema from '@sim/db/schema' import { betterAuth } from 'better-auth' import { drizzleAdapter } from 'better-auth/adapters/drizzle' import { nextCookies } from 'better-auth/next-js' @@ -36,8 +38,6 @@ import { quickValidateEmail } from '@/lib/email/validation' import { env, isTruthy } from '@/lib/env' import { isBillingEnabled, isProd } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import * as schema from '@/db/schema' const logger = createLogger('Auth') diff --git a/apps/sim/lib/auth/credential-access.ts b/apps/sim/lib/auth/credential-access.ts index fd6bcff03..adf9d1a39 100644 --- a/apps/sim/lib/auth/credential-access.ts +++ b/apps/sim/lib/auth/credential-access.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { account, workflow as workflowTable } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { checkHybridAuth } from '@/lib/auth/hybrid' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { account, workflow as workflowTable } from '@/db/schema' export interface CredentialAccessResult { ok: boolean diff --git a/apps/sim/lib/auth/hybrid.ts b/apps/sim/lib/auth/hybrid.ts index cca01d9a4..4dd391b31 100644 --- a/apps/sim/lib/auth/hybrid.ts +++ b/apps/sim/lib/auth/hybrid.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { authenticateApiKeyFromHeader, updateApiKeyLastUsed } from '@/lib/api-key/service' import { getSession } from '@/lib/auth' import { verifyInternalToken } from '@/lib/auth/internal' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflow } from '@/db/schema' const logger = createLogger('HybridAuth') diff --git a/apps/sim/lib/billing/authorization.ts b/apps/sim/lib/billing/authorization.ts index bbde03d9a..247d110ed 100644 --- a/apps/sim/lib/billing/authorization.ts +++ b/apps/sim/lib/billing/authorization.ts @@ -1,6 +1,6 @@ +import { db } from '@sim/db' +import * as schema from '@sim/db/schema' import { and, eq } from 'drizzle-orm' -import { db } from '@/db' -import * as schema from '@/db/schema' /** * Check if a user is authorized to manage billing for a given reference ID diff --git a/apps/sim/lib/billing/calculations/usage-monitor.ts b/apps/sim/lib/billing/calculations/usage-monitor.ts index aec227abe..4ab0a24ee 100644 --- a/apps/sim/lib/billing/calculations/usage-monitor.ts +++ b/apps/sim/lib/billing/calculations/usage-monitor.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { member, organization, userStats } from '@sim/db/schema' import { eq, inArray } from 'drizzle-orm' import { getOrganizationSubscription, getPlanPricing } from '@/lib/billing/core/billing' import { getUserUsageLimit } from '@/lib/billing/core/usage' import { isBillingEnabled } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, organization, userStats } from '@/db/schema' const logger = createLogger('UsageMonitor') diff --git a/apps/sim/lib/billing/core/billing.ts b/apps/sim/lib/billing/core/billing.ts index 8e83594c0..5579ffb47 100644 --- a/apps/sim/lib/billing/core/billing.ts +++ b/apps/sim/lib/billing/core/billing.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { member, subscription, user } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' import { getUserUsageData } from '@/lib/billing/core/usage' @@ -7,8 +9,6 @@ import { getTeamTierLimitPerSeat, } from '@/lib/billing/subscriptions/utils' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, subscription, user } from '@/db/schema' const logger = createLogger('Billing') diff --git a/apps/sim/lib/billing/core/organization.ts b/apps/sim/lib/billing/core/organization.ts index 5b7f6e2cc..ed09e3333 100644 --- a/apps/sim/lib/billing/core/organization.ts +++ b/apps/sim/lib/billing/core/organization.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { member, organization, subscription, user, userStats } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { getPlanPricing } from '@/lib/billing/core/billing' import { getFreeTierLimit } from '@/lib/billing/subscriptions/utils' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, organization, subscription, user, userStats } from '@/db/schema' const logger = createLogger('OrganizationBilling') diff --git a/apps/sim/lib/billing/core/subscription.ts b/apps/sim/lib/billing/core/subscription.ts index afb5c551d..ae7234e30 100644 --- a/apps/sim/lib/billing/core/subscription.ts +++ b/apps/sim/lib/billing/core/subscription.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { member, subscription, user, userStats } from '@sim/db/schema' import { and, eq, inArray } from 'drizzle-orm' import { checkEnterprisePlan, @@ -10,8 +12,6 @@ import type { UserSubscriptionState } from '@/lib/billing/types' import { env } from '@/lib/env' import { isProd } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, subscription, user, userStats } from '@/db/schema' const logger = createLogger('SubscriptionCore') diff --git a/apps/sim/lib/billing/core/usage.ts b/apps/sim/lib/billing/core/usage.ts index b017dfdc4..3502f50af 100644 --- a/apps/sim/lib/billing/core/usage.ts +++ b/apps/sim/lib/billing/core/usage.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { member, organization, settings, user, userStats } from '@sim/db/schema' import { eq, inArray } from 'drizzle-orm' import { getEmailSubject, renderUsageThresholdEmail } from '@/components/emails/render-email' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' @@ -11,8 +13,6 @@ import { sendEmail } from '@/lib/email/mailer' import { getEmailPreferences } from '@/lib/email/unsubscribe' import { isBillingEnabled } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, organization, settings, user, userStats } from '@/db/schema' const logger = createLogger('UsageManagement') diff --git a/apps/sim/lib/billing/organization.ts b/apps/sim/lib/billing/organization.ts index da96b6bb3..6c2fdff72 100644 --- a/apps/sim/lib/billing/organization.ts +++ b/apps/sim/lib/billing/organization.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import * as schema from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { syncUsageLimitsFromSubscription } from '@/lib/billing/core/usage' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import * as schema from '@/db/schema' const logger = createLogger('BillingOrganization') diff --git a/apps/sim/lib/billing/validation/seat-management.ts b/apps/sim/lib/billing/validation/seat-management.ts index 74808ffe7..f7588af1d 100644 --- a/apps/sim/lib/billing/validation/seat-management.ts +++ b/apps/sim/lib/billing/validation/seat-management.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { invitation, member, organization, subscription, user, userStats } from '@sim/db/schema' import { and, count, eq } from 'drizzle-orm' import { getOrganizationSubscription } from '@/lib/billing/core/billing' import { quickValidateEmail } from '@/lib/email/validation' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { invitation, member, organization, subscription, user, userStats } from '@/db/schema' const logger = createLogger('SeatManagement') diff --git a/apps/sim/lib/billing/webhooks/enterprise.ts b/apps/sim/lib/billing/webhooks/enterprise.ts index 44b256957..0ee325d6f 100644 --- a/apps/sim/lib/billing/webhooks/enterprise.ts +++ b/apps/sim/lib/billing/webhooks/enterprise.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { organization, subscription, user } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type Stripe from 'stripe' import { @@ -7,8 +9,6 @@ import { import { sendEmail } from '@/lib/email/mailer' import { getFromEmailAddress } from '@/lib/email/utils' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { organization, subscription, user } from '@/db/schema' import type { EnterpriseSubscriptionMetadata } from '../types' const logger = createLogger('BillingEnterprise') diff --git a/apps/sim/lib/billing/webhooks/invoices.ts b/apps/sim/lib/billing/webhooks/invoices.ts index 3d51cda60..c08c74eec 100644 --- a/apps/sim/lib/billing/webhooks/invoices.ts +++ b/apps/sim/lib/billing/webhooks/invoices.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { member, subscription as subscriptionTable, userStats } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type Stripe from 'stripe' import { getUserUsageData } from '@/lib/billing/core/usage' import { requireStripeClient } from '@/lib/billing/stripe-client' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { member, subscription as subscriptionTable, userStats } from '@/db/schema' const logger = createLogger('StripeInvoiceWebhooks') diff --git a/apps/sim/lib/copilot/process-contents.ts b/apps/sim/lib/copilot/process-contents.ts index 621dafae6..d52acd50e 100644 --- a/apps/sim/lib/copilot/process-contents.ts +++ b/apps/sim/lib/copilot/process-contents.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { copilotChats, document, knowledgeBase, templates } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' -import { db } from '@/db' -import { copilotChats, document, knowledgeBase, templates } from '@/db/schema' import type { ChatContext } from '@/stores/copilot/types' export type AgentContextType = @@ -485,8 +485,8 @@ async function processExecutionLogFromDb( tag: string ): Promise { try { - const { workflowExecutionLogs, workflow } = await import('@/db/schema') - const { db } = await import('@/db') + const { workflowExecutionLogs, workflow } = await import('@sim/db/schema') + const { db } = await import('@sim/db') const rows = await db .select({ id: workflowExecutionLogs.id, diff --git a/apps/sim/lib/copilot/tools/server/docs/search-documentation.ts b/apps/sim/lib/copilot/tools/server/docs/search-documentation.ts index 76a2479b0..c0cccf4f1 100644 --- a/apps/sim/lib/copilot/tools/server/docs/search-documentation.ts +++ b/apps/sim/lib/copilot/tools/server/docs/search-documentation.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { docsEmbeddings } from '@sim/db/schema' import { sql } from 'drizzle-orm' import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { docsEmbeddings } from '@/db/schema' interface DocsSearchParams { query: string diff --git a/apps/sim/lib/copilot/tools/server/user/get-oauth-credentials.ts b/apps/sim/lib/copilot/tools/server/user/get-oauth-credentials.ts index 84697beda..70735093f 100644 --- a/apps/sim/lib/copilot/tools/server/user/get-oauth-credentials.ts +++ b/apps/sim/lib/copilot/tools/server/user/get-oauth-credentials.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account, user } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { jwtDecode } from 'jwt-decode' import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import { createLogger } from '@/lib/logs/console/logger' import { generateRequestId } from '@/lib/utils' import { getUserId, refreshTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account, user } from '@/db/schema' interface GetOAuthCredentialsParams { userId?: string diff --git a/apps/sim/lib/copilot/tools/server/user/set-environment-variables.ts b/apps/sim/lib/copilot/tools/server/user/set-environment-variables.ts index 6f8452f3d..d277c4ee8 100644 --- a/apps/sim/lib/copilot/tools/server/user/set-environment-variables.ts +++ b/apps/sim/lib/copilot/tools/server/user/set-environment-variables.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { environment } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { z } from 'zod' import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import { createLogger } from '@/lib/logs/console/logger' import { decryptSecret, encryptSecret } from '@/lib/utils' import { getUserId } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { environment } from '@/db/schema' interface SetEnvironmentVariablesParams { variables: Record | Array<{ name: string; value: string }> diff --git a/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts b/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts index f4ae5baec..244d3fe4e 100644 --- a/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts +++ b/apps/sim/lib/copilot/tools/server/workflow/edit-workflow.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { workflow as workflowTable } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import { env } from '@/lib/env' @@ -7,8 +9,6 @@ import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { getAllBlocks } from '@/blocks/registry' import type { BlockConfig } from '@/blocks/types' import { resolveOutputType } from '@/blocks/utils' -import { db } from '@/db' -import { workflow as workflowTable } from '@/db/schema' import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' interface EditWorkflowOperation { diff --git a/apps/sim/lib/copilot/tools/server/workflow/get-workflow-console.ts b/apps/sim/lib/copilot/tools/server/workflow/get-workflow-console.ts index 5d4baff52..4e204ecc3 100644 --- a/apps/sim/lib/copilot/tools/server/workflow/get-workflow-console.ts +++ b/apps/sim/lib/copilot/tools/server/workflow/get-workflow-console.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { workflowExecutionLogs } from '@sim/db/schema' import { desc, eq } from 'drizzle-orm' import type { BaseServerTool } from '@/lib/copilot/tools/server/base-tool' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflowExecutionLogs } from '@/db/schema' interface GetWorkflowConsoleArgs { workflowId: string diff --git a/apps/sim/lib/email/unsubscribe.ts b/apps/sim/lib/email/unsubscribe.ts index a7fe3d218..837d0071d 100644 --- a/apps/sim/lib/email/unsubscribe.ts +++ b/apps/sim/lib/email/unsubscribe.ts @@ -1,10 +1,10 @@ import { createHash, randomBytes } from 'crypto' +import { db } from '@sim/db' +import { settings, user } from '@sim/db/schema' import { eq } from 'drizzle-orm' import type { EmailType } from '@/lib/email/mailer' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { settings, user } from '@/db/schema' const logger = createLogger('Unsubscribe') diff --git a/apps/sim/lib/environment/utils.ts b/apps/sim/lib/environment/utils.ts index cd37feefa..d2c1477e5 100644 --- a/apps/sim/lib/environment/utils.ts +++ b/apps/sim/lib/environment/utils.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { environment, workspaceEnvironment } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { decryptSecret } from '@/lib/utils' -import { db } from '@/db' -import { environment, workspaceEnvironment } from '@/db/schema' const logger = createLogger('EnvironmentUtils') diff --git a/apps/sim/lib/idempotency/cleanup.ts b/apps/sim/lib/idempotency/cleanup.ts index 097c30693..8bdb25629 100644 --- a/apps/sim/lib/idempotency/cleanup.ts +++ b/apps/sim/lib/idempotency/cleanup.ts @@ -1,7 +1,7 @@ +import { db } from '@sim/db' +import { idempotencyKey } from '@sim/db/schema' import { and, eq, lt } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { idempotencyKey } from '@/db/schema' const logger = createLogger('IdempotencyCleanup') diff --git a/apps/sim/lib/idempotency/service.ts b/apps/sim/lib/idempotency/service.ts index d46a04d6a..709899084 100644 --- a/apps/sim/lib/idempotency/service.ts +++ b/apps/sim/lib/idempotency/service.ts @@ -1,9 +1,9 @@ import * as crypto from 'crypto' +import { db } from '@sim/db' +import { idempotencyKey } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { getRedisClient } from '@/lib/redis' -import { db } from '@/db' -import { idempotencyKey } from '@/db/schema' const logger = createLogger('IdempotencyService') diff --git a/apps/sim/lib/knowledge/chunks/service.ts b/apps/sim/lib/knowledge/chunks/service.ts index ac4218ee3..b63f7dbde 100644 --- a/apps/sim/lib/knowledge/chunks/service.ts +++ b/apps/sim/lib/knowledge/chunks/service.ts @@ -1,4 +1,6 @@ import { createHash, randomUUID } from 'crypto' +import { db } from '@sim/db' +import { document, embedding } from '@sim/db/schema' import { and, asc, eq, ilike, inArray, sql } from 'drizzle-orm' import { generateEmbeddings } from '@/lib/embeddings/utils' import type { @@ -10,8 +12,6 @@ import type { } from '@/lib/knowledge/chunks/types' import { createLogger } from '@/lib/logs/console/logger' import { estimateTokenCount } from '@/lib/tokenization/estimators' -import { db } from '@/db' -import { document, embedding } from '@/db/schema' const logger = createLogger('ChunksService') diff --git a/apps/sim/lib/knowledge/documents/service.ts b/apps/sim/lib/knowledge/documents/service.ts index 5a1463ee4..f78483b04 100644 --- a/apps/sim/lib/knowledge/documents/service.ts +++ b/apps/sim/lib/knowledge/documents/service.ts @@ -1,4 +1,6 @@ import crypto, { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { document, embedding, knowledgeBaseTagDefinitions } from '@sim/db/schema' import { tasks } from '@trigger.dev/sdk' import { and, asc, desc, eq, inArray, isNull, sql } from 'drizzle-orm' import { generateEmbeddings } from '@/lib/embeddings/utils' @@ -9,8 +11,6 @@ import { getNextAvailableSlot } from '@/lib/knowledge/tags/service' import { createLogger } from '@/lib/logs/console/logger' import { getRedisClient } from '@/lib/redis' import type { DocumentProcessingPayload } from '@/background/knowledge-processing' -import { db } from '@/db' -import { document, embedding, knowledgeBaseTagDefinitions } from '@/db/schema' import { DocumentProcessingQueue } from './queue' import type { DocumentSortField, SortOrder } from './types' diff --git a/apps/sim/lib/knowledge/service.ts b/apps/sim/lib/knowledge/service.ts index cdb1e9be6..c015552d1 100644 --- a/apps/sim/lib/knowledge/service.ts +++ b/apps/sim/lib/knowledge/service.ts @@ -1,4 +1,6 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { document, knowledgeBase, permissions } from '@sim/db/schema' import { and, count, eq, isNotNull, isNull, or } from 'drizzle-orm' import type { ChunkingConfig, @@ -7,8 +9,6 @@ import type { } from '@/lib/knowledge/types' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { document, knowledgeBase, permissions } from '@/db/schema' const logger = createLogger('KnowledgeBaseService') diff --git a/apps/sim/lib/knowledge/tags/service.ts b/apps/sim/lib/knowledge/tags/service.ts index 314d5070f..17ce0f962 100644 --- a/apps/sim/lib/knowledge/tags/service.ts +++ b/apps/sim/lib/knowledge/tags/service.ts @@ -1,4 +1,6 @@ import { randomUUID } from 'crypto' +import { db } from '@sim/db' +import { document, embedding, knowledgeBaseTagDefinitions } from '@sim/db/schema' import { and, eq, isNotNull, isNull, sql } from 'drizzle-orm' import { getSlotsForFieldType, @@ -12,8 +14,6 @@ import type { UpdateTagDefinitionData, } from '@/lib/knowledge/types' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { document, embedding, knowledgeBaseTagDefinitions } from '@/db/schema' const logger = createLogger('TagsService') diff --git a/apps/sim/lib/logs/events.ts b/apps/sim/lib/logs/events.ts index 0d0a5c131..bc6d3bb9d 100644 --- a/apps/sim/lib/logs/events.ts +++ b/apps/sim/lib/logs/events.ts @@ -1,10 +1,10 @@ +import { db } from '@sim/db' +import { workflowLogWebhook, workflowLogWebhookDelivery } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' import { createLogger } from '@/lib/logs/console/logger' import type { WorkflowExecutionLog } from '@/lib/logs/types' import { logsWebhookDelivery } from '@/background/logs-webhook-delivery' -import { db } from '@/db' -import { workflowLogWebhook, workflowLogWebhookDelivery } from '@/db/schema' const logger = createLogger('LogsEventEmitter') diff --git a/apps/sim/lib/logs/execution/logger.ts b/apps/sim/lib/logs/execution/logger.ts index c092e497e..0fc75752e 100644 --- a/apps/sim/lib/logs/execution/logger.ts +++ b/apps/sim/lib/logs/execution/logger.ts @@ -1,3 +1,12 @@ +import { db } from '@sim/db' +import { + member, + organization, + userStats, + user as userTable, + workflow, + workflowExecutionLogs, +} from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' @@ -16,15 +25,6 @@ import type { WorkflowExecutionSnapshot, WorkflowState, } from '@/lib/logs/types' -import { db } from '@/db' -import { - member, - organization, - userStats, - user as userTable, - workflow, - workflowExecutionLogs, -} from '@/db/schema' export interface ToolCall { name: string diff --git a/apps/sim/lib/logs/execution/snapshot/service.ts b/apps/sim/lib/logs/execution/snapshot/service.ts index dd50bfb88..8c3b26cec 100644 --- a/apps/sim/lib/logs/execution/snapshot/service.ts +++ b/apps/sim/lib/logs/execution/snapshot/service.ts @@ -1,4 +1,6 @@ import { createHash } from 'crypto' +import { db } from '@sim/db' +import { workflowExecutionSnapshots } from '@sim/db/schema' import { and, eq, lt } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' import { createLogger } from '@/lib/logs/console/logger' @@ -9,8 +11,6 @@ import type { WorkflowExecutionSnapshotInsert, WorkflowState, } from '@/lib/logs/types' -import { db } from '@/db' -import { workflowExecutionSnapshots } from '@/db/schema' const logger = createLogger('SnapshotService') diff --git a/apps/sim/lib/mcp/service.ts b/apps/sim/lib/mcp/service.ts index 22f9fa13c..d0e57b764 100644 --- a/apps/sim/lib/mcp/service.ts +++ b/apps/sim/lib/mcp/service.ts @@ -2,6 +2,8 @@ * MCP Service - Clean stateless service for MCP operations */ +import { db } from '@sim/db' +import { mcpServers } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import { isTest } from '@/lib/environment' import { getEffectiveDecryptedEnv } from '@/lib/environment/utils' @@ -17,8 +19,6 @@ import type { } from '@/lib/mcp/types' import { MCP_CONSTANTS } from '@/lib/mcp/utils' import { generateRequestId } from '@/lib/utils' -import { db } from '@/db' -import { mcpServers } from '@/db/schema' const logger = createLogger('McpService') diff --git a/apps/sim/lib/permissions/utils.test.ts b/apps/sim/lib/permissions/utils.test.ts index 5f1a1b93f..f4c485239 100644 --- a/apps/sim/lib/permissions/utils.test.ts +++ b/apps/sim/lib/permissions/utils.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -vi.mock('@/db', () => ({ +vi.mock('@sim/db', () => ({ db: { select: vi.fn(), from: vi.fn(), @@ -12,7 +12,7 @@ vi.mock('@/db', () => ({ }, })) -vi.mock('@/db/schema', () => ({ +vi.mock('@sim/db/schema', () => ({ permissions: { permissionType: 'permission_type', userId: 'user_id', @@ -41,6 +41,7 @@ vi.mock('drizzle-orm', () => ({ or: vi.fn().mockReturnValue('or-condition'), })) +import { db } from '@sim/db' import { getManageableWorkspaces, getUserEntityPermissions, @@ -48,7 +49,6 @@ import { hasAdminPermission, hasWorkspaceAdminAccess, } from '@/lib/permissions/utils' -import { db } from '@/db' const mockDb = db as any type PermissionType = 'admin' | 'write' | 'read' diff --git a/apps/sim/lib/permissions/utils.ts b/apps/sim/lib/permissions/utils.ts index 456c8390f..c34b7840b 100644 --- a/apps/sim/lib/permissions/utils.ts +++ b/apps/sim/lib/permissions/utils.ts @@ -1,6 +1,6 @@ +import { db } from '@sim/db' +import { permissions, type permissionTypeEnum, user, workspace } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' -import { db } from '@/db' -import { permissions, type permissionTypeEnum, user, workspace } from '@/db/schema' export type PermissionType = (typeof permissionTypeEnum.enumValues)[number] diff --git a/apps/sim/lib/webhooks/gmail-polling-service.ts b/apps/sim/lib/webhooks/gmail-polling-service.ts index f3d0c0c88..f4790c984 100644 --- a/apps/sim/lib/webhooks/gmail-polling-service.ts +++ b/apps/sim/lib/webhooks/gmail-polling-service.ts @@ -1,11 +1,11 @@ +import { db } from '@sim/db' +import { account, webhook } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { nanoid } from 'nanoid' import { pollingIdempotency } from '@/lib/idempotency/service' import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import { getOAuthToken, refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account, webhook } from '@/db/schema' const logger = createLogger('GmailPollingService') diff --git a/apps/sim/lib/webhooks/outlook-polling-service.ts b/apps/sim/lib/webhooks/outlook-polling-service.ts index 4d227a88f..89a2d8947 100644 --- a/apps/sim/lib/webhooks/outlook-polling-service.ts +++ b/apps/sim/lib/webhooks/outlook-polling-service.ts @@ -1,3 +1,5 @@ +import { db } from '@sim/db' +import { account, webhook } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { htmlToText } from 'html-to-text' import { nanoid } from 'nanoid' @@ -5,8 +7,6 @@ import { pollingIdempotency } from '@/lib/idempotency' import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import { getOAuthToken, refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account, webhook } from '@/db/schema' const logger = createLogger('OutlookPollingService') diff --git a/apps/sim/lib/webhooks/utils.ts b/apps/sim/lib/webhooks/utils.ts index 21243bfbc..2c59ba5e5 100644 --- a/apps/sim/lib/webhooks/utils.ts +++ b/apps/sim/lib/webhooks/utils.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { account, webhook } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { getOAuthToken, refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { account, webhook } from '@/db/schema' const logger = createLogger('WebhookUtils') diff --git a/apps/sim/lib/workflows/db-helpers.test.ts b/apps/sim/lib/workflows/db-helpers.test.ts index 4d77e27b8..3eb43e0bb 100644 --- a/apps/sim/lib/workflows/db-helpers.test.ts +++ b/apps/sim/lib/workflows/db-helpers.test.ts @@ -50,11 +50,11 @@ const mockWorkflowSubflows = { config: 'config', } -vi.doMock('@/db', () => ({ +vi.doMock('@sim/db', () => ({ db: mockDb, })) -vi.doMock('@/db/schema', () => ({ +vi.doMock('@sim/db/schema', () => ({ workflowBlocks: mockWorkflowBlocks, workflowEdges: mockWorkflowEdges, workflowSubflows: mockWorkflowSubflows, diff --git a/apps/sim/lib/workflows/db-helpers.ts b/apps/sim/lib/workflows/db-helpers.ts index 18e8af6b5..de327ef2c 100644 --- a/apps/sim/lib/workflows/db-helpers.ts +++ b/apps/sim/lib/workflows/db-helpers.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { sanitizeAgentToolsInBlocks } from '@/lib/workflows/validation' -import { db } from '@/db' -import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' import type { WorkflowState } from '@/stores/workflows/workflow/types' import { SUBFLOW_TYPES } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/lib/workflows/execution-files-server.ts b/apps/sim/lib/workflows/execution-files-server.ts index 235710d79..fe63f0868 100644 --- a/apps/sim/lib/workflows/execution-files-server.ts +++ b/apps/sim/lib/workflows/execution-files-server.ts @@ -3,10 +3,10 @@ * This file contains database operations and should only be imported by server-side code */ +import { db } from '@sim/db' +import { workflowExecutionLogs } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflowExecutionLogs } from '@/db/schema' import type { ExecutionFileMetadata } from './execution-files' const logger = createLogger('ExecutionFilesServer') diff --git a/apps/sim/lib/workflows/utils.ts b/apps/sim/lib/workflows/utils.ts index df301a702..9b34b3a28 100644 --- a/apps/sim/lib/workflows/utils.ts +++ b/apps/sim/lib/workflows/utils.ts @@ -1,9 +1,9 @@ +import { db } from '@sim/db' +import { apiKey, userStats, workflow as workflowTable } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getEnv } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { apiKey, userStats, workflow as workflowTable } from '@/db/schema' import type { ExecutionResult } from '@/executor/types' import type { WorkflowState } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/next.config.ts b/apps/sim/next.config.ts index 91c38642d..d7224c558 100644 --- a/apps/sim/next.config.ts +++ b/apps/sim/next.config.ts @@ -81,6 +81,7 @@ const nextConfig: NextConfig = { '@react-email/render', '@t3-oss/env-nextjs', '@t3-oss/env-core', + '@sim/db', ], async headers() { return [ diff --git a/apps/sim/package.json b/apps/sim/package.json index a76452176..3ef6d07eb 100644 --- a/apps/sim/package.json +++ b/apps/sim/package.json @@ -15,9 +15,6 @@ "build": "next build --turbopack", "start": "next start", "prepare": "cd ../.. && bun husky", - "db:push": "bunx drizzle-kit push", - "db:studio": "bunx drizzle-kit studio", - "db:migrate": "bunx drizzle-kit migrate", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", @@ -66,7 +63,6 @@ "@radix-ui/react-switch": "^1.1.2", "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-toggle": "^1.1.2", - "@radix-ui/react-tooltip": "^1.1.6", "@react-email/components": "^0.0.34", "@sentry/nextjs": "^9.15.0", "@trigger.dev/sdk": "4.0.1", @@ -85,7 +81,6 @@ "csv-parse": "^5.6.0", "dat.gui": "0.7.9", "date-fns": "4.1.0", - "drizzle-orm": "^0.41.0", "entities": "6.0.1", "framer-motion": "^12.5.0", "fuse.js": "7.1.0", @@ -109,7 +104,6 @@ "openai": "^4.91.1", "papaparse": "5.5.3", "pdf-parse": "1.1.1", - "postgres": "^3.4.5", "prismjs": "^1.30.0", "react": "19.1.0", "react-colorful": "5.6.1", @@ -157,7 +151,6 @@ "concurrently": "^9.1.0", "critters": "^0.0.23", "dotenv": "^16.4.7", - "drizzle-kit": "^0.31.1", "jsdom": "^26.0.0", "postcss": "^8", "react-email": "^4.0.13", @@ -173,6 +166,8 @@ ], "overrides": { "next": "15.4.1", - "@next/env": "15.4.1" + "@next/env": "15.4.1", + "drizzle-orm": "^0.41.0", + "postgres": "^3.4.5" } } diff --git a/apps/sim/scripts/migrate-deployment-versions.ts b/apps/sim/scripts/migrate-deployment-versions.ts deleted file mode 100644 index 4d1af0a1e..000000000 --- a/apps/sim/scripts/migrate-deployment-versions.ts +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env bun - -import { sql } from 'drizzle-orm' -import { v4 as uuidv4 } from 'uuid' -import { db } from '../db' -import { workflow, workflowDeploymentVersion } from '../db/schema' -import { loadWorkflowFromNormalizedTables as loadNormalizedWorkflow } from '../lib/workflows/db-helpers' -import type { WorkflowState } from '../stores/workflows/workflow/types' - -const DRY_RUN = process.argv.includes('--dry-run') -const BATCH_SIZE = 50 - -// Use centralized normalization logic from lib/workflows/db-helpers - -async function migrateWorkflows() { - console.log('Starting deployment version migration...') - console.log(`Mode: ${DRY_RUN ? 'DRY RUN' : 'LIVE'}`) - console.log(`Batch size: ${BATCH_SIZE}`) - console.log('---') - - try { - // Get all workflows - const workflows = await db - .select({ - id: workflow.id, - name: workflow.name, - isDeployed: workflow.isDeployed, - deployedState: workflow.deployedState, - deployedAt: workflow.deployedAt, - userId: workflow.userId, - }) - .from(workflow) - - console.log(`Found ${workflows.length} workflows to process`) - - // Check for existing deployment versions - const existingVersions = await db - .select({ - workflowId: workflowDeploymentVersion.workflowId, - }) - .from(workflowDeploymentVersion) - - const existingWorkflowIds = new Set(existingVersions.map((v) => v.workflowId)) - console.log(`${existingWorkflowIds.size} workflows already have deployment versions`) - - let successCount = 0 - let skipCount = 0 - let errorCount = 0 - const errors: Array<{ workflowId: string; error: string }> = [] - - // Process in batches - for (let i = 0; i < workflows.length; i += BATCH_SIZE) { - const batch = workflows.slice(i, i + BATCH_SIZE) - console.log( - `\nProcessing batch ${Math.floor(i / BATCH_SIZE) + 1} (workflows ${i + 1}-${Math.min(i + BATCH_SIZE, workflows.length)})` - ) - - const deploymentVersions = [] - - for (const wf of batch) { - // Skip if already has deployment version - if (existingWorkflowIds.has(wf.id)) { - console.log(` [SKIP] ${wf.id} (${wf.name}) - already has deployment version`) - skipCount++ - continue - } - - let state: WorkflowState | null = null - - // First try to use existing deployedState - if (wf.deployedState) { - state = wf.deployedState as WorkflowState - console.log(` [DEPLOYED] ${wf.id} (${wf.name}) - using existing deployedState`) - } else { - // Load from normalized tables for all workflows without deployedState - const normalized = await loadNormalizedWorkflow(wf.id) - if (normalized) { - state = { - blocks: normalized.blocks, - edges: normalized.edges, - loops: normalized.loops, - parallels: normalized.parallels, - } as WorkflowState - console.log( - ` [NORMALIZED] ${wf.id} (${wf.name}) - loaded from normalized tables (was deployed: ${wf.isDeployed})` - ) - } else { - console.log(` [SKIP] ${wf.id} (${wf.name}) - no state available`) - skipCount++ - continue - } - } - - if (state) { - deploymentVersions.push({ - id: uuidv4(), - workflowId: wf.id, - version: 1, - state: state, - createdAt: wf.deployedAt || new Date(), - createdBy: wf.userId || 'migration', - isActive: true, // Set ALL to active so schedules/webhooks keep working - }) - successCount++ - } - } - - // Insert batch if not dry run - if (deploymentVersions.length > 0) { - if (DRY_RUN) { - console.log(` [DRY RUN] Would insert ${deploymentVersions.length} deployment versions`) - console.log(` [DRY RUN] Would mark ${deploymentVersions.length} workflows as deployed`) - } else { - try { - // Insert deployment versions - await db.insert(workflowDeploymentVersion).values(deploymentVersions) - console.log(` [SUCCESS] Inserted ${deploymentVersions.length} deployment versions`) - - // Update workflow.isDeployed to true for all workflows that got a version - const workflowIds = deploymentVersions.map((v) => v.workflowId) - await db - .update(workflow) - .set({ - isDeployed: true, - deployedAt: new Date(), // Set deployedAt if it wasn't already set - }) - .where( - sql`${workflow.id} IN (${sql.join( - workflowIds.map((id) => sql`${id}`), - sql`, ` - )})` - ) - console.log(` [SUCCESS] Marked ${workflowIds.length} workflows as deployed`) - } catch (error) { - console.error(` [ERROR] Failed to insert batch:`, error) - errorCount += deploymentVersions.length - successCount -= deploymentVersions.length - } - } - } - } - - console.log('\n---') - console.log('Migration Summary:') - console.log(` Success: ${successCount} workflows`) - console.log(` Skipped: ${skipCount} workflows`) - console.log(` Errors: ${errorCount} workflows`) - - if (errors.length > 0) { - console.log('\nErrors:') - errors.forEach(({ workflowId, error }) => { - console.log(` - ${workflowId}: ${error}`) - }) - } - - if (DRY_RUN) { - console.log('\n[DRY RUN] No changes were made to the database.') - console.log('Run without --dry-run flag to apply changes.') - } else { - console.log('\nMigration completed successfully!') - } - } catch (error) { - console.error('Fatal error during migration:', error) - process.exit(1) - } -} - -// Run the migration -migrateWorkflows() - .then(() => { - console.log('\nDone!') - process.exit(0) - }) - .catch((error) => { - console.error('Unexpected error:', error) - process.exit(1) - }) diff --git a/apps/sim/scripts/process-docs-embeddings.ts b/apps/sim/scripts/process-docs-embeddings.ts index 1d4fc2a71..9377f61e4 100644 --- a/apps/sim/scripts/process-docs-embeddings.ts +++ b/apps/sim/scripts/process-docs-embeddings.ts @@ -1,12 +1,12 @@ #!/usr/bin/env bun import path from 'path' +import { db } from '@sim/db' +import { docsEmbeddings } from '@sim/db/schema' import { sql } from 'drizzle-orm' import { isDev } from '@/lib/environment' import { DocsChunker } from '@/lib/knowledge/documents/docs-chunker' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { docsEmbeddings } from '@/db/schema' const logger = createLogger('ProcessDocsEmbeddings') diff --git a/apps/sim/services/queue/RateLimiter.test.ts b/apps/sim/services/queue/RateLimiter.test.ts index 616797e4f..c30355a8e 100644 --- a/apps/sim/services/queue/RateLimiter.test.ts +++ b/apps/sim/services/queue/RateLimiter.test.ts @@ -3,7 +3,7 @@ import { RateLimiter } from '@/services/queue/RateLimiter' import { MANUAL_EXECUTION_LIMIT, RATE_LIMITS } from '@/services/queue/types' // Mock the database module -vi.mock('@/db', () => ({ +vi.mock('@sim/db', () => ({ db: { select: vi.fn(), insert: vi.fn(), @@ -24,7 +24,7 @@ vi.mock('@/lib/billing/core/subscription', () => ({ getHighestPrioritySubscription: vi.fn().mockResolvedValue(null), })) -import { db } from '@/db' +import { db } from '@sim/db' describe('RateLimiter', () => { const rateLimiter = new RateLimiter() diff --git a/apps/sim/services/queue/RateLimiter.ts b/apps/sim/services/queue/RateLimiter.ts index 88d8c1580..f7997a102 100644 --- a/apps/sim/services/queue/RateLimiter.ts +++ b/apps/sim/services/queue/RateLimiter.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { userRateLimits } from '@sim/db/schema' import { eq, sql } from 'drizzle-orm' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { userRateLimits } from '@/db/schema' import { MANUAL_EXECUTION_LIMIT, RATE_LIMIT_WINDOW_MS, diff --git a/apps/sim/services/queue/types.ts b/apps/sim/services/queue/types.ts index 01eb8a524..ac620b864 100644 --- a/apps/sim/services/queue/types.ts +++ b/apps/sim/services/queue/types.ts @@ -1,6 +1,6 @@ +import type { userRateLimits } from '@sim/db/schema' import type { InferSelectModel } from 'drizzle-orm' import { env } from '@/lib/env' -import type { userRateLimits } from '@/db/schema' // Database types export type UserRateLimit = InferSelectModel diff --git a/apps/sim/socket-server/database/operations.ts b/apps/sim/socket-server/database/operations.ts index 2ad00b49c..a32ca1bc4 100644 --- a/apps/sim/socket-server/database/operations.ts +++ b/apps/sim/socket-server/database/operations.ts @@ -1,11 +1,11 @@ +import * as schema from '@sim/db/schema' +import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@sim/db/schema' import { and, eq, or } from 'drizzle-orm' import { drizzle } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' -import * as schema from '@/db/schema' -import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' const logger = createLogger('SocketDatabase') diff --git a/apps/sim/socket-server/handlers/subblocks.ts b/apps/sim/socket-server/handlers/subblocks.ts index c017df869..ea4e621cd 100644 --- a/apps/sim/socket-server/handlers/subblocks.ts +++ b/apps/sim/socket-server/handlers/subblocks.ts @@ -1,7 +1,7 @@ +import { db } from '@sim/db' +import { workflow, workflowBlocks } from '@sim/db/schema' import { and, eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflow, workflowBlocks } from '@/db/schema' import type { HandlerDependencies } from '@/socket-server/handlers/workflow' import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' import type { RoomManager } from '@/socket-server/rooms/manager' diff --git a/apps/sim/socket-server/handlers/variables.ts b/apps/sim/socket-server/handlers/variables.ts index d21ad606a..52dbfc1e6 100644 --- a/apps/sim/socket-server/handlers/variables.ts +++ b/apps/sim/socket-server/handlers/variables.ts @@ -1,7 +1,7 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' -import { db } from '@/db' -import { workflow } from '@/db/schema' import type { HandlerDependencies } from '@/socket-server/handlers/workflow' import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' import type { RoomManager } from '@/socket-server/rooms/manager' diff --git a/apps/sim/socket-server/index.test.ts b/apps/sim/socket-server/index.test.ts index c8714eacd..4de117475 100644 --- a/apps/sim/socket-server/index.test.ts +++ b/apps/sim/socket-server/index.test.ts @@ -18,7 +18,7 @@ vi.mock('@/lib/auth', () => ({ }, })) -vi.mock('@/db', () => ({ +vi.mock('@sim/db', () => ({ db: { select: vi.fn(), insert: vi.fn(), diff --git a/apps/sim/socket-server/middleware/permissions.ts b/apps/sim/socket-server/middleware/permissions.ts index a94ae21b1..a77e1882e 100644 --- a/apps/sim/socket-server/middleware/permissions.ts +++ b/apps/sim/socket-server/middleware/permissions.ts @@ -1,8 +1,8 @@ +import { db } from '@sim/db' +import { workflow } from '@sim/db/schema' import { eq } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' -import { db } from '@/db' -import { workflow } from '@/db/schema' const logger = createLogger('SocketPermissions') diff --git a/apps/sim/socket-server/rooms/manager.ts b/apps/sim/socket-server/rooms/manager.ts index d02a35d98..42c752e29 100644 --- a/apps/sim/socket-server/rooms/manager.ts +++ b/apps/sim/socket-server/rooms/manager.ts @@ -1,11 +1,11 @@ +import * as schema from '@sim/db/schema' +import { workflowBlocks, workflowEdges } from '@sim/db/schema' import { and, eq, isNull } from 'drizzle-orm' import { drizzle } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import type { Server } from 'socket.io' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import * as schema from '@/db/schema' -import { workflowBlocks, workflowEdges } from '@/db/schema' // Create dedicated database connection for room manager const connectionString = env.POSTGRES_URL ?? env.DATABASE_URL diff --git a/apps/sim/tsconfig.json b/apps/sim/tsconfig.json index 745c37e52..0ac3794dc 100644 --- a/apps/sim/tsconfig.json +++ b/apps/sim/tsconfig.json @@ -24,8 +24,8 @@ "@/tools/*": ["./tools/*"], "@/serializer": ["./serializer"], "@/serializer/*": ["./serializer/*"], - "@/db": ["./db"], - "@/db/*": ["./db/*"], + "@sim/db": ["../../packages/db"], + "@sim/db/*": ["../../packages/db/*"], "@/executor": ["./executor"], "@/executor/*": ["./executor/*"] }, diff --git a/apps/sim/vitest.config.ts b/apps/sim/vitest.config.ts index f9e6bea21..8c8a21091 100644 --- a/apps/sim/vitest.config.ts +++ b/apps/sim/vitest.config.ts @@ -1,6 +1,7 @@ import path, { resolve } from 'path' /// import react from '@vitejs/plugin-react' +import tsconfigPaths from 'vite-tsconfig-paths' import { configDefaults, defineConfig } from 'vitest/config' const nextEnv = require('@next/env') @@ -10,7 +11,7 @@ const projectDir = process.cwd() loadEnvConfig(projectDir) export default defineConfig({ - plugins: [react()], + plugins: [react(), tsconfigPaths()], test: { globals: true, environment: 'node', @@ -18,11 +19,15 @@ export default defineConfig({ exclude: [...configDefaults.exclude, '**/node_modules/**', '**/dist/**'], setupFiles: ['./vitest.setup.ts'], alias: { - '@': resolve(__dirname, './'), + '@sim/db': resolve(__dirname, '../../packages/db'), }, }, resolve: { alias: [ + { + find: '@sim/db', + replacement: path.resolve(__dirname, '../../packages/db'), + }, { find: '@/lib/logs/console/logger', replacement: path.resolve(__dirname, 'lib/logs/console/logger.ts'), diff --git a/bun.lock b/bun.lock index aa54cce64..0ea9db503 100644 --- a/bun.lock +++ b/bun.lock @@ -8,8 +8,10 @@ "@t3-oss/env-nextjs": "0.13.4", "@vercel/analytics": "1.5.0", "bcryptjs": "3.0.2", + "drizzle-orm": "^0.41.0", "geist": "^1.4.2", "mongodb": "6.19.0", + "postgres": "^3.4.5", "react-colorful": "5.6.1", "remark-gfm": "4.0.1", "socket.io-client": "4.8.1", @@ -19,6 +21,7 @@ "@biomejs/biome": "2.0.0-beta.5", "@next/env": "15.4.1", "@types/bcryptjs": "3.0.0", + "drizzle-kit": "^0.31.1", "husky": "9.1.7", "lint-staged": "16.0.0", "turbo": "2.5.6", @@ -36,7 +39,7 @@ "fumadocs-mdx": "^11.5.6", "fumadocs-ui": "^15.7.5", "lucide-react": "^0.511.0", - "next": "^15.4.1", + "next": "15.4.1", "next-themes": "^0.4.6", "react": "19.1.0", "react-dom": "19.1.0", @@ -98,7 +101,6 @@ "@radix-ui/react-switch": "^1.1.2", "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-toggle": "^1.1.2", - "@radix-ui/react-tooltip": "^1.1.6", "@react-email/components": "^0.0.34", "@sentry/nextjs": "^9.15.0", "@trigger.dev/sdk": "4.0.1", @@ -117,7 +119,6 @@ "csv-parse": "^5.6.0", "dat.gui": "0.7.9", "date-fns": "4.1.0", - "drizzle-orm": "^0.41.0", "entities": "6.0.1", "framer-motion": "^12.5.0", "fuse.js": "7.1.0", @@ -141,7 +142,6 @@ "openai": "^4.91.1", "papaparse": "5.5.3", "pdf-parse": "1.1.1", - "postgres": "^3.4.5", "prismjs": "^1.30.0", "react": "19.1.0", "react-colorful": "5.6.1", @@ -189,7 +189,6 @@ "concurrently": "^9.1.0", "critters": "^0.0.23", "dotenv": "^16.4.7", - "drizzle-kit": "^0.31.1", "jsdom": "^26.0.0", "postcss": "^8", "react-email": "^4.0.13", @@ -218,6 +217,17 @@ "typescript": "^5.1.6", }, }, + "packages/db": { + "name": "@sim/db", + "version": "0.1.0", + "devDependencies": { + "typescript": "^5.7.3", + }, + "peerDependencies": { + "drizzle-orm": "^0.41.0", + "postgres": "^3.4.5", + }, + }, "packages/ts-sdk": { "name": "simstudio-ts-sdk", "version": "0.1.0", @@ -237,7 +247,9 @@ ], "overrides": { "@next/env": "15.4.1", + "drizzle-orm": "^0.41.0", "next": "15.4.1", + "postgres": "^3.4.5", "react": "19.1.0", "react-dom": "19.1.0", }, @@ -302,9 +314,9 @@ "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.890.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/credential-provider-node": "3.890.0", "@aws-sdk/middleware-bucket-endpoint": "3.890.0", "@aws-sdk/middleware-expect-continue": "3.887.0", "@aws-sdk/middleware-flexible-checksums": "3.890.0", "@aws-sdk/middleware-host-header": "3.887.0", "@aws-sdk/middleware-location-constraint": "3.887.0", "@aws-sdk/middleware-logger": "3.887.0", "@aws-sdk/middleware-recursion-detection": "3.887.0", "@aws-sdk/middleware-sdk-s3": "3.890.0", "@aws-sdk/middleware-ssec": "3.887.0", "@aws-sdk/middleware-user-agent": "3.890.0", "@aws-sdk/region-config-resolver": "3.890.0", "@aws-sdk/signature-v4-multi-region": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.890.0", "@aws-sdk/util-user-agent-browser": "3.887.0", "@aws-sdk/util-user-agent-node": "3.890.0", "@aws-sdk/xml-builder": "3.887.0", "@smithy/config-resolver": "^4.2.2", "@smithy/core": "^3.11.0", "@smithy/eventstream-serde-browser": "^4.1.1", "@smithy/eventstream-serde-config-resolver": "^4.2.1", "@smithy/eventstream-serde-node": "^4.1.1", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-blob-browser": "^4.1.1", "@smithy/hash-node": "^4.1.1", "@smithy/hash-stream-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/md5-js": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/middleware-retry": "^4.2.2", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", "@smithy/util-defaults-mode-browser": "^4.1.2", "@smithy/util-defaults-mode-node": "^4.1.2", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.1", "@smithy/util-stream": "^4.3.1", "@smithy/util-utf8": "^4.1.0", "@smithy/util-waiter": "^4.1.1", "@types/uuid": "^9.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-yByS+gXYe0KALEEGz9vqIapSKAJ/bGgevOMzPDHZfxQXP1DQxOnPQCbsCC7GDpYpy7Q2Wx54fgU5bqyMd7cfpA=="], + "@aws-sdk/client-s3": ["@aws-sdk/client-s3@3.891.0", "", { "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/credential-provider-node": "3.891.0", "@aws-sdk/middleware-bucket-endpoint": "3.890.0", "@aws-sdk/middleware-expect-continue": "3.891.0", "@aws-sdk/middleware-flexible-checksums": "3.891.0", "@aws-sdk/middleware-host-header": "3.891.0", "@aws-sdk/middleware-location-constraint": "3.891.0", "@aws-sdk/middleware-logger": "3.891.0", "@aws-sdk/middleware-recursion-detection": "3.891.0", "@aws-sdk/middleware-sdk-s3": "3.891.0", "@aws-sdk/middleware-ssec": "3.891.0", "@aws-sdk/middleware-user-agent": "3.891.0", "@aws-sdk/region-config-resolver": "3.890.0", "@aws-sdk/signature-v4-multi-region": "3.891.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.891.0", "@aws-sdk/util-user-agent-browser": "3.887.0", "@aws-sdk/util-user-agent-node": "3.891.0", "@aws-sdk/xml-builder": "3.887.0", "@smithy/config-resolver": "^4.2.2", "@smithy/core": "^3.11.0", "@smithy/eventstream-serde-browser": "^4.1.1", "@smithy/eventstream-serde-config-resolver": "^4.2.1", "@smithy/eventstream-serde-node": "^4.1.1", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-blob-browser": "^4.1.1", "@smithy/hash-node": "^4.1.1", "@smithy/hash-stream-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/md5-js": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/middleware-retry": "^4.2.3", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", "@smithy/util-defaults-mode-browser": "^4.1.2", "@smithy/util-defaults-mode-node": "^4.1.2", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", "@smithy/util-stream": "^4.3.1", "@smithy/util-utf8": "^4.1.0", "@smithy/util-waiter": "^4.1.1", "@types/uuid": "^9.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-TzG8NVy9HhL4lQrMyszBzO4ZNo1dWqVjEjPZLYUSJ7nZZ+Q/oWlJYWMIB3IatQkh+UYONDFCBRRYf9ctl/+xwg=="], - "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.890.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/middleware-host-header": "3.887.0", "@aws-sdk/middleware-logger": "3.887.0", "@aws-sdk/middleware-recursion-detection": "3.887.0", "@aws-sdk/middleware-user-agent": "3.890.0", "@aws-sdk/region-config-resolver": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.890.0", "@aws-sdk/util-user-agent-browser": "3.887.0", "@aws-sdk/util-user-agent-node": "3.890.0", "@smithy/config-resolver": "^4.2.2", "@smithy/core": "^3.11.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/middleware-retry": "^4.2.2", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", "@smithy/util-defaults-mode-browser": "^4.1.2", "@smithy/util-defaults-mode-node": "^4.1.2", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.1", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-vefYNwh/K5V5YiJpFJfoMPNqsoiRTqD7ZnkvR0cjJdwhOIwFnSKN1vz0OMjySTQmVMcG4JKGVul82ou7ErtOhQ=="], + "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.891.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/middleware-host-header": "3.891.0", "@aws-sdk/middleware-logger": "3.891.0", "@aws-sdk/middleware-recursion-detection": "3.891.0", "@aws-sdk/middleware-user-agent": "3.891.0", "@aws-sdk/region-config-resolver": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.891.0", "@aws-sdk/util-user-agent-browser": "3.887.0", "@aws-sdk/util-user-agent-node": "3.891.0", "@smithy/config-resolver": "^4.2.2", "@smithy/core": "^3.11.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/middleware-retry": "^4.2.3", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", "@smithy/util-defaults-mode-browser": "^4.1.2", "@smithy/util-defaults-mode-node": "^4.1.2", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-QMDaD9GhJe7l0KQp3Tt7dzqFCz/H2XuyNjQgvi10nM1MfI1RagmLtmEhZveQxMPhZ/AtohLSK0Tisp/I5tR8RQ=="], "@aws-sdk/core": ["@aws-sdk/core@3.890.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@aws-sdk/xml-builder": "3.887.0", "@smithy/core": "^3.11.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/property-provider": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/signature-v4": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-utf8": "^4.1.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" } }, "sha512-CT+yjhytHdyKvV3Nh/fqBjnZ8+UiQZVz4NMm4LrPATgVSOdfygXHqrWxrPTVgiBtuJWkotg06DF7+pTd5ekLBw=="], @@ -312,51 +324,51 @@ "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/node-http-handler": "^4.2.1", "@smithy/property-provider": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/util-stream": "^4.3.1", "tslib": "^2.6.2" } }, "sha512-0sru3LVwsuGYyzbD90EC/d5HnCZ9PL4O9BA2LYT6b9XceC005Oj86uzE47LXb+mDhTAt3T6ZO0+ZcVQe0DDi8w=="], - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/credential-provider-env": "3.890.0", "@aws-sdk/credential-provider-http": "3.890.0", "@aws-sdk/credential-provider-process": "3.890.0", "@aws-sdk/credential-provider-sso": "3.890.0", "@aws-sdk/credential-provider-web-identity": "3.890.0", "@aws-sdk/nested-clients": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-Mxv7ByftHKH7dE6YXu9gQ6ODXwO1iSO32t8tBrZLS3g8K1knWADIqDFv3yErQtJ8hp27IDxbAbVH/1RQdSkmhA=="], + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.891.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/credential-provider-env": "3.890.0", "@aws-sdk/credential-provider-http": "3.890.0", "@aws-sdk/credential-provider-process": "3.890.0", "@aws-sdk/credential-provider-sso": "3.891.0", "@aws-sdk/credential-provider-web-identity": "3.891.0", "@aws-sdk/nested-clients": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-9LOfm97oy2d2frwCQjl53XLkoEYG6/rsNM3Y6n8UtRU3bzGAEjixdIuv3b6Z/Mk/QLeikcQEJ9FMC02DuQh2Yw=="], - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.890.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.890.0", "@aws-sdk/credential-provider-http": "3.890.0", "@aws-sdk/credential-provider-ini": "3.890.0", "@aws-sdk/credential-provider-process": "3.890.0", "@aws-sdk/credential-provider-sso": "3.890.0", "@aws-sdk/credential-provider-web-identity": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-zbPz3mUtaBdch0KoH8/LouRDcYSzyT2ecyCOo5OAFVil7AxT1jvsn4vX78FlnSVpZ4mLuHY8pHTVGi235XiyBA=="], + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.891.0", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.890.0", "@aws-sdk/credential-provider-http": "3.890.0", "@aws-sdk/credential-provider-ini": "3.891.0", "@aws-sdk/credential-provider-process": "3.890.0", "@aws-sdk/credential-provider-sso": "3.891.0", "@aws-sdk/credential-provider-web-identity": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-IjGvQJhpCN512xlT1DFGaPeE1q0YEm/X62w7wHsRpBindW//M+heSulJzP4KPkoJvmJNVu1NxN26/p4uH+M8TQ=="], "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-dWZ54TI1Q+UerF5YOqGiCzY+x2YfHsSQvkyM3T4QDNTJpb/zjiVv327VbSOULOlI7gHKWY/G3tMz0D9nWI7YbA=="], - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.890.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.890.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/token-providers": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-ajYCZ6f2+98w8zG/IXcQ+NhWYoI5qPUDovw+gMqMWX/jL1cmZ9PFAwj2Vyq9cbjum5RNWwPLArWytTCgJex4AQ=="], + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.891.0", "", { "dependencies": { "@aws-sdk/client-sso": "3.891.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/token-providers": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-RtF9BwUIZqc/7sFbK6n6qhe0tNaWJQwin89nSeZ1HOsA0Z7TfTOelX8Otd0L5wfeVBMVcgiN3ofqrcZgjFjQjA=="], - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/nested-clients": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-qZ2Mx7BeYR1s0F/H6wePI0MAmkFswmBgrpgMCOt2S4b2IpQPnUa2JbxY3GwW2WqX3nV0KjPW08ctSLMmlq/tKA=="], + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.891.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/nested-clients": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-yq7kzm1sHZ0GZrtS+qpjMUp4ES66UoT1+H2xxrOuAZkvUnkpQq1iSjOgBgJJ9FW1EsDUEmlgn94i4hJTNvm7fg=="], "@aws-sdk/middleware-bucket-endpoint": ["@aws-sdk/middleware-bucket-endpoint@3.890.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@aws-sdk/util-arn-parser": "3.873.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "@smithy/util-config-provider": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-X/td72r18uLsB1Hv70uK9cFzvc5Xyd8fde1FR7aU9COzw2ncNFgG2TJkxHBjdkby/T6SL5R4kY49KjVT3KHnzA=="], - "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-AlrTZZScDTG9SYeT82BC5cK/6Q4N0miN5xqMW/pbBqP3fNXlsdJOWKB+EKD3V6DV41EV5GVKHKe/1065xKSQ4w=="], + "@aws-sdk/middleware-expect-continue": ["@aws-sdk/middleware-expect-continue@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-bYQnw+aHNY+LgeIxJouA6gkUcGiN1LFHDpDUcsIugZmVg8h2+EdNL1Ni9hzPRYkMXGzVbEcqMBqnYdA6TP5KLg=="], - "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.890.0", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/is-array-buffer": "^4.1.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-stream": "^4.3.1", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-l2HHqI8qtwve1vXWE/cMzi0v53rSz6PNj4aas4K+OR8rvaS4O8OuVdcTC1vQB+0sFSjWNNRFtZnIqixah0XDxw=="], + "@aws-sdk/middleware-flexible-checksums": ["@aws-sdk/middleware-flexible-checksums@3.891.0", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/is-array-buffer": "^4.1.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-stream": "^4.3.1", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-lah4NpdzS0cz64LdQdb/t5uNlAvz48/HmXpkYDXGt1pfAb+44CugEacM8q6xZNE1jkuia3Q59or/rG2annmRjQ=="], - "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-ulzqXv6NNqdu/kr0sgBYupWmahISHY+azpJidtK6ZwQIC+vBUk9NdZeqQpy7KVhIk2xd4+5Oq9rxapPwPI21CA=="], + "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-OYaxbqNDeo/noE7MfYWWQDu86cF/R/bMXdZ2QZwpWpX2yjy8xMwxSg7c/4tEK/OtiDZTKRXXrvPxRxG2+1bnJw=="], - "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-eU/9Cq4gg2sS32bOomxdx2YF43kb+o70pMhnEBBnVVeqzE8co78SO5FQdWfRTfhNJgTyQ6Vgosx//CNMPIfZPg=="], + "@aws-sdk/middleware-location-constraint": ["@aws-sdk/middleware-location-constraint@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-27Tgs/Lpc+gz+1MnrYaWp9M8Ky8xErlzTnci1ZVc3GqLm9zUC/wgh3/vtBFjkB3/qljsnVYlL/vwNeRWKLxF0A=="], - "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-YbbgLI6jKp2qSoAcHnXrQ5jcuc5EYAmGLVFgMVdk8dfCfJLfGGSaOLxF4CXC7QYhO50s+mPPkhBYejCik02Kug=="], + "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-azL4mg1H1FLpOAECiFtU+r+9VDhpeF6Vh9pzD4m51BWPJ60CVnyHayeI/0gqPsL60+5l90/b9VWonoA8DvAvpg=="], - "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@aws/lambda-invoke-store": "^0.0.1", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-tjrUXFtQnFLo+qwMveq5faxP5MQakoLArXtqieHphSqZTXm21wDJM73hgT4/PQQGTwgYjDKqnqsE1hvk0hcfDw=="], + "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@aws/lambda-invoke-store": "^0.0.1", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-n++KwAEnNlvx5NZdIQZnvl2GjSH/YE3xGSqW2GmPB5780tFY5lOYSb1uA+EUzJSVX4oAKAkSPdR2AOW09kzoew=="], - "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-arn-parser": "3.873.0", "@smithy/core": "^3.11.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/signature-v4": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/util-config-provider": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-stream": "^4.3.1", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-58P1lrE606zpp29xH9Keh3j2BWfa2ciGBtygJTpulRMlqPL3U1gFfU2g5nDYJbjKgRtCgNIBqfmtkL4eikCb9w=="], + "@aws-sdk/middleware-sdk-s3": ["@aws-sdk/middleware-sdk-s3@3.891.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-arn-parser": "3.873.0", "@smithy/core": "^3.11.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/signature-v4": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/util-config-provider": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-stream": "^4.3.1", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-8odAOmy3MS59cUruuovPIe+LlIaAL8CpRwOaSndpkftq5fbr7GzfYfnYEyKzTEKuaNHDdpD+PePQNT4cyyuMwA=="], - "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-1ixZks0IDkdac1hjPe4vdLSuD9HznkhblCEb4T0wNyw3Ee1fdXg+MlcPWywzG5zkPXLcIrULUzJg/OSYfaDXcQ=="], + "@aws-sdk/middleware-ssec": ["@aws-sdk/middleware-ssec@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-cd0HsqQkh2ldYyGg8zH5SiiSrf0yY/Ts30CrfJ+jQ4eOOJ1qkX9qABSSyoG7+6byhp+IeXsk6LJEkxhsj6UUJQ=="], - "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.890.0", "@smithy/core": "^3.11.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-x4+gLrOFGN7PnfxCaQbs3QEF8bMQE4CVxcOp066UEJqr2Pn4yB12Q3O+YntOtESK5NcTxIh7JlhGss95EHzNng=="], + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.891.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.891.0", "@smithy/core": "^3.11.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-xyxIZtR7FunCWymPAxEm61VUq9lruXxWIYU5AIh5rt0av7nXa2ayAAlscQ7ch9jUlw+lbC2PVbw0K/OYrMovuA=="], - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.890.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/middleware-host-header": "3.887.0", "@aws-sdk/middleware-logger": "3.887.0", "@aws-sdk/middleware-recursion-detection": "3.887.0", "@aws-sdk/middleware-user-agent": "3.890.0", "@aws-sdk/region-config-resolver": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.890.0", "@aws-sdk/util-user-agent-browser": "3.887.0", "@aws-sdk/util-user-agent-node": "3.890.0", "@smithy/config-resolver": "^4.2.2", "@smithy/core": "^3.11.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/middleware-retry": "^4.2.2", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", "@smithy/util-defaults-mode-browser": "^4.1.2", "@smithy/util-defaults-mode-node": "^4.1.2", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.1", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-D5qVNd+qlqdL8duJShzffAqPllGRA4tG7n/GEpL13eNfHChPvGkkUFBMrxSgCAETaTna13G6kq+dMO+SAdbm1A=="], + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.891.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.890.0", "@aws-sdk/middleware-host-header": "3.891.0", "@aws-sdk/middleware-logger": "3.891.0", "@aws-sdk/middleware-recursion-detection": "3.891.0", "@aws-sdk/middleware-user-agent": "3.891.0", "@aws-sdk/region-config-resolver": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-endpoints": "3.891.0", "@aws-sdk/util-user-agent-browser": "3.887.0", "@aws-sdk/util-user-agent-node": "3.891.0", "@smithy/config-resolver": "^4.2.2", "@smithy/core": "^3.11.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/middleware-retry": "^4.2.3", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", "@smithy/util-defaults-mode-browser": "^4.1.2", "@smithy/util-defaults-mode-node": "^4.1.2", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-cpol+Yk4T3GXPXbRfUyN2u6tpMEHUxAiesZgrfMm11QGHV+pmzyejJV/QZ0pdJKj5sXKaCr4DCntoJ5iBx++Cw=="], "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.890.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "@smithy/util-config-provider": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "tslib": "^2.6.2" } }, "sha512-VfdT+tkF9groRYNzKvQCsCGDbOQdeBdzyB1d6hWiq22u13UafMIoskJ1ec0i0H1X29oT6mjTitfnvPq1UiKwzQ=="], - "@aws-sdk/s3-request-presigner": ["@aws-sdk/s3-request-presigner@3.890.0", "", { "dependencies": { "@aws-sdk/signature-v4-multi-region": "3.890.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-format-url": "3.887.0", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-1Z02mJKnu3MXhFMQimRHj4QXbLkANr0/0dcqDWrygqk7Cu91OTyRnwmnUYrUC0qSAWQKEs4IwK9VARwYM7Y68Q=="], + "@aws-sdk/s3-request-presigner": ["@aws-sdk/s3-request-presigner@3.891.0", "", { "dependencies": { "@aws-sdk/signature-v4-multi-region": "3.891.0", "@aws-sdk/types": "3.887.0", "@aws-sdk/util-format-url": "3.887.0", "@smithy/middleware-endpoint": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-lm9me5FmKNYrm/QC1bmgVGSya64QrvfISfLkRI8eYyiIqCJN/10iV1jUDhH08I95Zq3TpgPx+viT7PbkqcSn8Q=="], - "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.890.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/protocol-http": "^5.2.1", "@smithy/signature-v4": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-il8kb2/wDLXhemN3p7v4MvbvqoMuo7Ug3ihuIUIhPtSVjcnn+BISJU0S+5YTl8TXf6qxML9VrfxL0pmuhO3BsA=="], + "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.891.0", "", { "dependencies": { "@aws-sdk/middleware-sdk-s3": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/protocol-http": "^5.2.1", "@smithy/signature-v4": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-Rt5PLlF97dWJ0XWWI9PD7x8IPCoBNxlM6NVIkwJchjxdDRAhfHHZNf9SOvI+6cyamh1uZT6qZCyTlRqlEexBXw=="], - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.890.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/nested-clients": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-+pK/0iQEpPmnztbAw0NNmb+B5pPy8VLu+Ab4SJLgVp41RE9NO13VQtrzUbh61TTAVMrzqWlLQ2qmAl2Fk4VNgw=="], + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.891.0", "", { "dependencies": { "@aws-sdk/core": "3.890.0", "@aws-sdk/nested-clients": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-n31JDMWhj/53QX33C97+1W63JGtgO8pg1/Tfmv4f9TR2VSGf1rFwYH7cPZ7dVIMmcUBeI2VCVhwUIabGNHw86Q=="], "@aws-sdk/types": ["@aws-sdk/types@3.887.0", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-fmTEJpUhsPsovQ12vZSpVTEP/IaRoJAMBGQXlQNjtCpkBp6Iq3KQDa/HDaPINE+3xxo6XvTdtibsNOd5zJLV9A=="], "@aws-sdk/util-arn-parser": ["@aws-sdk/util-arn-parser@3.873.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg=="], - "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.890.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-endpoints": "^3.1.2", "tslib": "^2.6.2" } }, "sha512-nJ8v1x9ZQKzMRK4dS4oefOMIHqb6cguctTcx1RB9iTaFOR5pP7bvq+D4mvNZ6vBxiHg1dQGBUUgl5XJmdR7atQ=="], + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.891.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-endpoints": "^3.1.2", "tslib": "^2.6.2" } }, "sha512-MgxvmHIQJbUK+YquX4bdjDw1MjdBqTRJGHs6iU2KM8nN1ut0bPwvavkq7NrY/wB3ZKKECqmv6J/nw+hYKKUIHA=="], "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/querystring-builder": "^4.1.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-ABDSP6KsrdD+JC7qwMqUpLXqPidvfgT+Q+W8sGGuk/IBy7smgZDOdYSZLE4VBbQpH3N/zSJuslAWhL2x37Qwww=="], @@ -364,7 +376,7 @@ "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.887.0", "", { "dependencies": { "@aws-sdk/types": "3.887.0", "@smithy/types": "^4.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-X71UmVsYc6ZTH4KU6hA5urOzYowSXc3qvroagJNLJYU1ilgZ529lP4J9XOYfEvTXkLR1hPFSRxa43SrwgelMjA=="], - "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.890.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.890.0", "@aws-sdk/types": "3.887.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-s85NkCxKoAlUvx7UP7OelxLqwTi27Tps9/Q+4N+9rEUjThxEnDsqJSStJ1XiYhddz1xc/vxMvPjYN0qX6EKPtA=="], + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.891.0", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "3.891.0", "@aws-sdk/types": "3.887.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-/mmvVL2PJE2NMTWj9JSY98OISx7yov0mi72eOViWCHQMRYJCN12DY54i1rc4Q/oPwJwTwIrx69MLjVhQ1OZsgw=="], "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.887.0", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-lMwgWK1kNgUhHGfBvO/5uLe7TKhycwOn3eRCqsKPT9aPCx/HWuTlpcQp8oW2pCRGLS7qzcxqpQulcD+bbUL7XQ=="], @@ -508,57 +520,57 @@ "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.9", "", { "os": "aix", "cpu": "ppc64" }, "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.10", "", { "os": "aix", "cpu": "ppc64" }, "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.9", "", { "os": "android", "cpu": "arm" }, "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.10", "", { "os": "android", "cpu": "arm" }, "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.9", "", { "os": "android", "cpu": "arm64" }, "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.10", "", { "os": "android", "cpu": "arm64" }, "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.9", "", { "os": "android", "cpu": "x64" }, "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.10", "", { "os": "android", "cpu": "x64" }, "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.9", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.10", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.9", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.9", "", { "os": "linux", "cpu": "arm" }, "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.10", "", { "os": "linux", "cpu": "arm" }, "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.9", "", { "os": "linux", "cpu": "ia32" }, "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.10", "", { "os": "linux", "cpu": "ia32" }, "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.9", "", { "os": "linux", "cpu": "ppc64" }, "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.10", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.9", "", { "os": "linux", "cpu": "none" }, "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.9", "", { "os": "linux", "cpu": "s390x" }, "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.10", "", { "os": "linux", "cpu": "s390x" }, "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.9", "", { "os": "linux", "cpu": "x64" }, "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.10", "", { "os": "linux", "cpu": "x64" }, "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.9", "", { "os": "none", "cpu": "x64" }, "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.10", "", { "os": "none", "cpu": "x64" }, "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.9", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.10", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.9", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.10", "", { "os": "openbsd", "cpu": "x64" }, "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.9", "", { "os": "none", "cpu": "arm64" }, "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.9", "", { "os": "sunos", "cpu": "x64" }, "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.10", "", { "os": "sunos", "cpu": "x64" }, "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.9", "", { "os": "win32", "cpu": "ia32" }, "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.9", "", { "os": "win32", "cpu": "x64" }, "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.10", "", { "os": "win32", "cpu": "x64" }, "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw=="], "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], @@ -978,7 +990,7 @@ "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.1.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-roving-focus": "1.1.6", "@radix-ui/react-toggle": "1.1.6", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-XOBq9VqC+mIn5hzjGdJLhQbvQeiOpV5ExNE6qMQQPvFsCT44QUcxFzYytTWVoyWg9XKfgrleKmTeEyu6aoTPhg=="], - "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="], + "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.4", "@radix-ui/react-portal": "1.1.6", "@radix-ui/react-presence": "1.1.3", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-slot": "1.2.0", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0KX7jUYFA02np01Y11NWkk6Ip6TqMNmD4ijLelYAzeIndl2aVeltjJFJ2gwjNa1P8U/dgjQ+8cr9Y3Ni+ZNoRA=="], "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], @@ -1178,9 +1190,11 @@ "@shuding/opentype.js": ["@shuding/opentype.js@1.4.0-beta.0", "", { "dependencies": { "fflate": "^0.7.3", "string.prototype.codepointat": "^0.2.1" }, "bin": { "ot": "bin/ot" } }, "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA=="], + "@sim/db": ["@sim/db@workspace:packages/db"], + "@simplewebauthn/browser": ["@simplewebauthn/browser@13.2.0", "", {}, "sha512-N3fuA1AAnTo5gCStYoIoiasPccC+xPLx2YU88Dv0GeAmPQTWHETlZQq5xZ0DgUq1H9loXMWQH5qqUjcI7BHJ1A=="], - "@simplewebauthn/server": ["@simplewebauthn/server@13.2.0", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.3.10", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-rsa": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.3.8", "@peculiar/x509": "^1.13.0" } }, "sha512-meBOTUhWZsQyrBcXDva82Tiyes5UlPQu+fKuMKQlhmAJwR/a+orU8xYfpTQviEaV7qEYD4aMj9He/eBj1KX9hA=="], + "@simplewebauthn/server": ["@simplewebauthn/server@13.2.1", "", { "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", "@peculiar/asn1-android": "^2.3.10", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-rsa": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@peculiar/asn1-x509": "^2.3.8", "@peculiar/x509": "^1.13.0" } }, "sha512-Inmfye5opZXe3HI0GaksqBnQiM7glcNySoG6DH1GgkO1Lh9dvuV4XSV9DK02DReUVX39HpcDob9nxHELjECoQw=="], "@smithy/abort-controller": ["@smithy/abort-controller@4.1.1", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg=="], @@ -1222,7 +1236,7 @@ "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.2.2", "", { "dependencies": { "@smithy/core": "^3.11.0", "@smithy/middleware-serde": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-middleware": "^4.1.1", "tslib": "^2.6.2" } }, "sha512-M51KcwD+UeSOFtpALGf5OijWt915aQT5eJhqnMKJt7ZTfDfNcvg2UZgIgTZUoiORawb6o5lk4n3rv7vnzQXgsA=="], - "@smithy/middleware-retry": ["@smithy/middleware-retry@4.2.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/service-error-classification": "^4.1.1", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.1", "@types/uuid": "^9.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-KZJueEOO+PWqflv2oGx9jICpHdBYXwCI19j7e2V3IMwKgFcXc9D9q/dsTf4B+uCnYxjNoS1jpyv6pGNGRsKOXA=="], + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.2.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/service-error-classification": "^4.1.2", "@smithy/smithy-client": "^4.6.2", "@smithy/types": "^4.5.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", "@types/uuid": "^9.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "sha512-am6wR0kKGCuQfaGc0f3UKdl9AmbSe3DacScw8It5aHDFNXwgXSHNbAoFrf37qZn4Br6Ap7+LI6lWaBT3LJtv7g=="], "@smithy/middleware-serde": ["@smithy/middleware-serde@4.1.1", "", { "dependencies": { "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg=="], @@ -1240,7 +1254,7 @@ "@smithy/querystring-parser": ["@smithy/querystring-parser@4.1.1", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng=="], - "@smithy/service-error-classification": ["@smithy/service-error-classification@4.1.1", "", { "dependencies": { "@smithy/types": "^4.5.0" } }, "sha512-Iam75b/JNXyDE41UvrlM6n8DNOa/r1ylFyvgruTUx7h2Uk7vDNV9AAwP1vfL1fOL8ls0xArwEGVcGZVd7IO/Cw=="], + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.1.2", "", { "dependencies": { "@smithy/types": "^4.5.0" } }, "sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ=="], "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.2.0", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw=="], @@ -1272,7 +1286,7 @@ "@smithy/util-middleware": ["@smithy/util-middleware@4.1.1", "", { "dependencies": { "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg=="], - "@smithy/util-retry": ["@smithy/util-retry@4.1.1", "", { "dependencies": { "@smithy/service-error-classification": "^4.1.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-jGeybqEZ/LIordPLMh5bnmnoIgsqnp4IEimmUp5c5voZ8yx+5kAlN5+juyr7p+f7AtZTgvhmInQk4Q0UVbrZ0Q=="], + "@smithy/util-retry": ["@smithy/util-retry@4.1.2", "", { "dependencies": { "@smithy/service-error-classification": "^4.1.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" } }, "sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA=="], "@smithy/util-stream": ["@smithy/util-stream@4.3.1", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.2.1", "@smithy/node-http-handler": "^4.2.1", "@smithy/types": "^4.5.0", "@smithy/util-base64": "^4.1.0", "@smithy/util-buffer-from": "^4.1.0", "@smithy/util-hex-encoding": "^4.1.0", "@smithy/util-utf8": "^4.1.0", "tslib": "^2.6.2" } }, "sha512-khKkW/Jqkgh6caxMWbMuox9+YfGlsk9OnHOYCGVEdYQb/XVzcORXHLYUubHmmda0pubEDncofUrPNniS9d+uAA=="], @@ -1654,7 +1668,7 @@ "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.8.4", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.8.5", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q=="], "bcryptjs": ["bcryptjs@3.0.2", "", { "bin": { "bcrypt": "bin/bcrypt" } }, "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog=="], @@ -1980,7 +1994,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "electron-to-chromium": ["electron-to-chromium@1.5.219", "", {}, "sha512-JqaXfxHOS0WvKweEnrPHWRm8cnPVbdB7vXCQHPPFoAJFM3xig5/+/H08ZVkvJf4unvj8yncKy6MerOPj1NW1GQ=="], + "electron-to-chromium": ["electron-to-chromium@1.5.221", "", {}, "sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ=="], "emoji-regex": ["emoji-regex@10.5.0", "", {}, "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg=="], @@ -2018,7 +2032,7 @@ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.25.9", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.9", "@esbuild/android-arm": "0.25.9", "@esbuild/android-arm64": "0.25.9", "@esbuild/android-x64": "0.25.9", "@esbuild/darwin-arm64": "0.25.9", "@esbuild/darwin-x64": "0.25.9", "@esbuild/freebsd-arm64": "0.25.9", "@esbuild/freebsd-x64": "0.25.9", "@esbuild/linux-arm": "0.25.9", "@esbuild/linux-arm64": "0.25.9", "@esbuild/linux-ia32": "0.25.9", "@esbuild/linux-loong64": "0.25.9", "@esbuild/linux-mips64el": "0.25.9", "@esbuild/linux-ppc64": "0.25.9", "@esbuild/linux-riscv64": "0.25.9", "@esbuild/linux-s390x": "0.25.9", "@esbuild/linux-x64": "0.25.9", "@esbuild/netbsd-arm64": "0.25.9", "@esbuild/netbsd-x64": "0.25.9", "@esbuild/openbsd-arm64": "0.25.9", "@esbuild/openbsd-x64": "0.25.9", "@esbuild/openharmony-arm64": "0.25.9", "@esbuild/sunos-x64": "0.25.9", "@esbuild/win32-arm64": "0.25.9", "@esbuild/win32-ia32": "0.25.9", "@esbuild/win32-x64": "0.25.9" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g=="], + "esbuild": ["esbuild@0.25.10", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.10", "@esbuild/android-arm": "0.25.10", "@esbuild/android-arm64": "0.25.10", "@esbuild/android-x64": "0.25.10", "@esbuild/darwin-arm64": "0.25.10", "@esbuild/darwin-x64": "0.25.10", "@esbuild/freebsd-arm64": "0.25.10", "@esbuild/freebsd-x64": "0.25.10", "@esbuild/linux-arm": "0.25.10", "@esbuild/linux-arm64": "0.25.10", "@esbuild/linux-ia32": "0.25.10", "@esbuild/linux-loong64": "0.25.10", "@esbuild/linux-mips64el": "0.25.10", "@esbuild/linux-ppc64": "0.25.10", "@esbuild/linux-riscv64": "0.25.10", "@esbuild/linux-s390x": "0.25.10", "@esbuild/linux-x64": "0.25.10", "@esbuild/netbsd-arm64": "0.25.10", "@esbuild/netbsd-x64": "0.25.10", "@esbuild/openbsd-arm64": "0.25.10", "@esbuild/openbsd-x64": "0.25.10", "@esbuild/openharmony-arm64": "0.25.10", "@esbuild/sunos-x64": "0.25.10", "@esbuild/win32-arm64": "0.25.10", "@esbuild/win32-ia32": "0.25.10", "@esbuild/win32-x64": "0.25.10" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ=="], "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], @@ -2134,7 +2148,7 @@ "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], - "framer-motion": ["framer-motion@12.23.13", "", { "dependencies": { "motion-dom": "^12.23.12", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-OMF57Xh0fuTXfJQPtCieYGeU9Fam4SxqPLVz78YI7ATRFrfz8SARtqr1+qv56cX45kPFcIEfkUorVfxlOsjcUg=="], + "framer-motion": ["framer-motion@12.23.14", "", { "dependencies": { "motion-dom": "^12.23.12", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-8BQ6dvqOht2w8P1CwIEvAA0gypDR3fNG/M6/f5lT0QgNIKnJf7J43Bpv++NnCWU8YfmL47UEm2hbI0GRvdVhsQ=="], "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], @@ -2322,7 +2336,7 @@ "is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], - "is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], @@ -2800,7 +2814,7 @@ "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], - "pino": ["pino@9.9.5", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-d1s98p8/4TfYhsJ09r/Azt30aYELRi6NNnZtEbqFw6BoGsdPVf5lKNK3kUwH8BmJJfpTLNuicjUQjaMbd93dVg=="], + "pino": ["pino@9.10.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-VOFxoNnxICtxaN8S3E73pR66c5MTFC+rwRcNRyHV/bV/c90dXvJqMfjkeRFsGBDXmlUN3LccJQPqGIufnaJePA=="], "pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], @@ -2994,7 +3008,7 @@ "resend": ["resend@4.8.0", "", { "dependencies": { "@react-email/render": "1.1.2" } }, "sha512-R8eBOFQDO6dzRTDmaMEdpqrkmgSjPpVXt4nGfWsZdYOet0kqra0xgbvTES6HmCriZEXbmGk3e0DiGIaLFTFSHA=="], - "resolve": ["resolve@1.22.8", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw=="], + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], @@ -3138,7 +3152,7 @@ "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], - "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], @@ -3458,8 +3472,6 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@ai-sdk/provider-utils/nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="], - "@ai-sdk/provider-utils/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], "@anthropic-ai/sdk/@types/node": ["@types/node@18.19.126", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-8AXQlBfrGmtYJEJUPs63F/uZQqVeFiN9o6NUjbDJYfxNxFnArlZufANPw4h6dGhYGKxcyw+TapXFvEsguzIQow=="], @@ -3710,7 +3722,21 @@ "@radix-ui/react-toggle-group/@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.1.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3SeJxKeO3TO1zVw1Nl++Cp0krYk6zHDHMCUXXVkosIzl6Nxcvb07EerQpyD2wXQSJ5RZajrYAmPaydU8Hk1IyQ=="], - "@radix-ui/react-tooltip/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + "@radix-ui/react-tooltip/@radix-ui/primitive": ["@radix-ui/primitive@1.1.2", "", {}, "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="], + + "@radix-ui/react-tooltip/@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw=="], + + "@radix-ui/react-tooltip/@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.4", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.4", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA=="], + + "@radix-ui/react-tooltip/@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.6", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw=="], + + "@radix-ui/react-tooltip/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA=="], + + "@radix-ui/react-tooltip/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.0", "", { "dependencies": { "@radix-ui/react-slot": "1.2.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw=="], + + "@radix-ui/react-tooltip/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w=="], + + "@radix-ui/react-tooltip/@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.0", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg=="], "@react-email/code-block/prismjs": ["prismjs@1.29.0", "", {}, "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="], @@ -3724,8 +3750,6 @@ "@react-email/preview-server/@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.3", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-roving-focus": "1.1.6", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-sawt4HkD+6haVGjYOC3BMIiCumBpqTK6o407n6zN/6yReed2EN7bXyykNrpqg+xCfudpBUZg7Y2cJBd/x/iybA=="], - "@react-email/preview-server/@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.4", "@radix-ui/react-portal": "1.1.6", "@radix-ui/react-presence": "1.1.3", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-slot": "1.2.0", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0KX7jUYFA02np01Y11NWkk6Ip6TqMNmD4ijLelYAzeIndl2aVeltjJFJ2gwjNa1P8U/dgjQ+8cr9Y3Ni+ZNoRA=="], - "@react-email/preview-server/@types/node": ["@types/node@22.14.1", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw=="], "@react-email/preview-server/@types/react": ["@types/react@19.0.10", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g=="], @@ -3758,6 +3782,8 @@ "@sentry/nextjs/chalk": ["chalk@3.0.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg=="], + "@sentry/nextjs/resolve": ["resolve@1.22.8", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw=="], + "@sentry/node/@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@1.30.1", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA=="], "@sentry/node/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], @@ -3922,6 +3948,8 @@ "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], + "express/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -3936,8 +3964,6 @@ "gaxios/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "gaxios/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - "gaxios/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], "gaxios/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], @@ -3958,6 +3984,8 @@ "htmlparser2/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "http-errors/statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + "http-proxy-agent/agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "isomorphic-unfetch/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], @@ -4266,6 +4294,8 @@ "@radix-ui/react-toggle-group/@radix-ui/react-roving-focus/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-slot": "1.2.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg=="], + "@radix-ui/react-tooltip/@radix-ui/react-popper/@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.4", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw=="], + "@react-email/preview-server/@radix-ui/react-collapsible/@radix-ui/primitive": ["@radix-ui/primitive@1.1.2", "", {}, "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="], "@react-email/preview-server/@radix-ui/react-collapsible/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA=="], @@ -4302,20 +4332,6 @@ "@react-email/preview-server/@radix-ui/react-tabs/@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-collection": "1.1.4", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-D2ReXCuIueKf5L2f1ks/wTj3bWck1SvK1pjLmEHPbwksS1nOHBsvgY0b9Hypt81FczqBqSyLHQxn/vbsQ0gDHw=="], - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/primitive": ["@radix-ui/primitive@1.1.2", "", {}, "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="], - - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.7", "", { "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw=="], - - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.4", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.4", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA=="], - - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.6", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw=="], - - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA=="], - - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.0", "", { "dependencies": { "@radix-ui/react-slot": "1.2.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw=="], - - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.0", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg=="], - "@react-email/preview-server/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ=="], "@react-email/preview-server/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.0", "", { "os": "android", "cpu": "arm" }, "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g=="], @@ -4654,8 +4670,6 @@ "@react-email/preview-server/@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.0", "@radix-ui/react-slot": "1.2.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg=="], - "@react-email/preview-server/@radix-ui/react-tooltip/@radix-ui/react-popper/@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.4", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw=="], - "@react-email/preview-server/tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "@react-email/preview-server/tailwindcss/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], diff --git a/docker-compose.local.yml b/docker-compose.local.yml index 95a88c405..f9fe6d599 100644 --- a/docker-compose.local.yml +++ b/docker-compose.local.yml @@ -66,6 +66,7 @@ services: build: context: . dockerfile: docker/db.Dockerfile + working_dir: /app/packages/db environment: - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@db:5432/${POSTGRES_DB:-simstudio} depends_on: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index f893c13b0..5bb40e252 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -62,6 +62,7 @@ services: migrations: image: ghcr.io/simstudioai/migrations:latest + working_dir: /app/packages/db environment: - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@db:5432/${POSTGRES_DB:-simstudio} depends_on: diff --git a/docker/db.Dockerfile b/docker/db.Dockerfile index be781a9c5..1e90bc301 100644 --- a/docker/db.Dockerfile +++ b/docker/db.Dockerfile @@ -6,11 +6,11 @@ WORKDIR /app # Copy only package files needed for migrations COPY package.json bun.lock turbo.json ./ -COPY apps/sim/package.json ./apps/sim/db/ +COPY packages/db/package.json ./packages/db/package.json # Install minimal dependencies in one layer RUN bun install --omit dev --ignore-scripts && \ - bun install --omit dev --ignore-scripts drizzle-kit drizzle-orm postgres next-runtime-env zod @t3-oss/env-nextjs + bun install --omit dev --ignore-scripts drizzle-kit drizzle-orm postgres # ======================================== # Runner Stage: Production Environment @@ -20,9 +20,7 @@ WORKDIR /app # Copy only the necessary files from deps COPY --from=deps /app/node_modules ./node_modules -COPY apps/sim/drizzle.config.ts ./apps/sim/drizzle.config.ts -COPY apps/sim/db ./apps/sim/db -COPY apps/sim/package.json ./apps/sim/package.json -COPY apps/sim/lib/env.ts ./apps/sim/lib/env.ts +COPY packages/db/drizzle.config.ts ./packages/db/drizzle.config.ts +COPY packages/db ./packages/db -WORKDIR /app/apps/sim \ No newline at end of file +WORKDIR /app/packages/db \ No newline at end of file diff --git a/docker/realtime.Dockerfile b/docker/realtime.Dockerfile index 16ab789d4..1e7f9fa54 100644 --- a/docker/realtime.Dockerfile +++ b/docker/realtime.Dockerfile @@ -36,8 +36,9 @@ WORKDIR /app ENV NODE_ENV=production -# Copy the entire sim app since socket-server has dependencies on other modules +# Copy the sim app and the shared db package needed by socket-server COPY --from=builder /app/apps/sim ./apps/sim +COPY --from=builder /app/packages/db ./packages/db COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json diff --git a/helm/sim/templates/deployment-app.yaml b/helm/sim/templates/deployment-app.yaml index 4e064a839..564fa532d 100644 --- a/helm/sim/templates/deployment-app.yaml +++ b/helm/sim/templates/deployment-app.yaml @@ -41,7 +41,7 @@ spec: command: ["/bin/sh", "-c"] args: - | - cd /app/apps/sim + cd /app/packages/db export DATABASE_URL="{{ include "sim.databaseUrl" . }}" bun run db:migrate {{- if .Values.postgresql.enabled }} diff --git a/package.json b/package.json index f656a1da1..c81f4b154 100644 --- a/package.json +++ b/package.json @@ -29,15 +29,19 @@ "react": "19.1.0", "react-dom": "19.1.0", "next": "15.4.1", - "@next/env": "15.4.1" + "@next/env": "15.4.1", + "drizzle-orm": "^0.41.0", + "postgres": "^3.4.5" }, "dependencies": { "@linear/sdk": "40.0.0", "@t3-oss/env-nextjs": "0.13.4", "@vercel/analytics": "1.5.0", "bcryptjs": "3.0.2", + "drizzle-orm": "^0.41.0", "geist": "^1.4.2", "mongodb": "6.19.0", + "postgres": "^3.4.5", "react-colorful": "5.6.1", "remark-gfm": "4.0.1", "socket.io-client": "4.8.1", @@ -47,6 +51,7 @@ "@biomejs/biome": "2.0.0-beta.5", "@next/env": "15.4.1", "@types/bcryptjs": "3.0.0", + "drizzle-kit": "^0.31.1", "husky": "9.1.7", "lint-staged": "16.0.0", "turbo": "2.5.6" diff --git a/apps/sim/db/consts.ts b/packages/db/consts.ts similarity index 100% rename from apps/sim/db/consts.ts rename to packages/db/consts.ts diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts new file mode 100644 index 000000000..d0cce828f --- /dev/null +++ b/packages/db/drizzle.config.ts @@ -0,0 +1,10 @@ +import type { Config } from 'drizzle-kit' + +export default { + schema: './schema.ts', + out: './migrations', + dialect: 'postgresql', + dbCredentials: { + url: process.env.DATABASE_URL || process.env.POSTGRES_URL || '', + }, +} satisfies Config diff --git a/apps/sim/db/index.ts b/packages/db/index.ts similarity index 65% rename from apps/sim/db/index.ts rename to packages/db/index.ts index 0ba1bd9c7..99853c6c7 100644 --- a/apps/sim/db/index.ts +++ b/packages/db/index.ts @@ -1,12 +1,17 @@ import { drizzle, type PostgresJsDatabase } from 'drizzle-orm/postgres-js' import postgres from 'postgres' -import { env } from '@/lib/env' -import { isDev } from '@/lib/environment' -import * as schema from '@/db/schema' +import * as schema from './schema' + +// Re-export everything from schema for type consistency +export * from './schema' +export type { PostgresJsDatabase } // In production, use the Vercel-generated POSTGRES_URL // In development, use the direct DATABASE_URL -const connectionString = env.POSTGRES_URL ?? env.DATABASE_URL +const connectionString = process.env.POSTGRES_URL ?? process.env.DATABASE_URL ?? '' +if (!connectionString) { + throw new Error('Missing POSTGRES_URL or DATABASE_URL environment variable') +} /** * Connection Pool Allocation Strategy @@ -33,8 +38,9 @@ const postgresClient = postgres(connectionString, { const drizzleClient = drizzle(postgresClient, { schema }) declare global { + // eslint-disable-next-line no-var var database: PostgresJsDatabase | undefined } -export const db = global.database || drizzleClient -if (isDev) global.database = db +export const db = globalThis.database || drizzleClient +if (process.env.NODE_ENV !== 'production') globalThis.database = db diff --git a/apps/sim/db/migrations/0000_careless_black_knight.sql b/packages/db/migrations/0000_careless_black_knight.sql similarity index 100% rename from apps/sim/db/migrations/0000_careless_black_knight.sql rename to packages/db/migrations/0000_careless_black_knight.sql diff --git a/apps/sim/db/migrations/0001_foamy_dakota_north.sql b/packages/db/migrations/0001_foamy_dakota_north.sql similarity index 100% rename from apps/sim/db/migrations/0001_foamy_dakota_north.sql rename to packages/db/migrations/0001_foamy_dakota_north.sql diff --git a/apps/sim/db/migrations/0002_previous_xavin.sql b/packages/db/migrations/0002_previous_xavin.sql similarity index 100% rename from apps/sim/db/migrations/0002_previous_xavin.sql rename to packages/db/migrations/0002_previous_xavin.sql diff --git a/apps/sim/db/migrations/0003_smiling_hammerhead.sql b/packages/db/migrations/0003_smiling_hammerhead.sql similarity index 100% rename from apps/sim/db/migrations/0003_smiling_hammerhead.sql rename to packages/db/migrations/0003_smiling_hammerhead.sql diff --git a/apps/sim/db/migrations/0004_nasty_mesmero.sql b/packages/db/migrations/0004_nasty_mesmero.sql similarity index 100% rename from apps/sim/db/migrations/0004_nasty_mesmero.sql rename to packages/db/migrations/0004_nasty_mesmero.sql diff --git a/apps/sim/db/migrations/0005_shocking_domino.sql b/packages/db/migrations/0005_shocking_domino.sql similarity index 100% rename from apps/sim/db/migrations/0005_shocking_domino.sql rename to packages/db/migrations/0005_shocking_domino.sql diff --git a/apps/sim/db/migrations/0006_plain_zzzax.sql b/packages/db/migrations/0006_plain_zzzax.sql similarity index 100% rename from apps/sim/db/migrations/0006_plain_zzzax.sql rename to packages/db/migrations/0006_plain_zzzax.sql diff --git a/apps/sim/db/migrations/0007_mute_stepford_cuckoos.sql b/packages/db/migrations/0007_mute_stepford_cuckoos.sql similarity index 100% rename from apps/sim/db/migrations/0007_mute_stepford_cuckoos.sql rename to packages/db/migrations/0007_mute_stepford_cuckoos.sql diff --git a/apps/sim/db/migrations/0008_quick_paladin.sql b/packages/db/migrations/0008_quick_paladin.sql similarity index 100% rename from apps/sim/db/migrations/0008_quick_paladin.sql rename to packages/db/migrations/0008_quick_paladin.sql diff --git a/apps/sim/db/migrations/0009_cynical_bullseye.sql b/packages/db/migrations/0009_cynical_bullseye.sql similarity index 100% rename from apps/sim/db/migrations/0009_cynical_bullseye.sql rename to packages/db/migrations/0009_cynical_bullseye.sql diff --git a/apps/sim/db/migrations/0010_flashy_nebula.sql b/packages/db/migrations/0010_flashy_nebula.sql similarity index 100% rename from apps/sim/db/migrations/0010_flashy_nebula.sql rename to packages/db/migrations/0010_flashy_nebula.sql diff --git a/apps/sim/db/migrations/0011_youthful_iron_lad.sql b/packages/db/migrations/0011_youthful_iron_lad.sql similarity index 100% rename from apps/sim/db/migrations/0011_youthful_iron_lad.sql rename to packages/db/migrations/0011_youthful_iron_lad.sql diff --git a/apps/sim/db/migrations/0012_minor_dexter_bennett.sql b/packages/db/migrations/0012_minor_dexter_bennett.sql similarity index 100% rename from apps/sim/db/migrations/0012_minor_dexter_bennett.sql rename to packages/db/migrations/0012_minor_dexter_bennett.sql diff --git a/apps/sim/db/migrations/0013_dusty_aaron_stack.sql b/packages/db/migrations/0013_dusty_aaron_stack.sql similarity index 100% rename from apps/sim/db/migrations/0013_dusty_aaron_stack.sql rename to packages/db/migrations/0013_dusty_aaron_stack.sql diff --git a/apps/sim/db/migrations/0014_nice_dragon_lord.sql b/packages/db/migrations/0014_nice_dragon_lord.sql similarity index 100% rename from apps/sim/db/migrations/0014_nice_dragon_lord.sql rename to packages/db/migrations/0014_nice_dragon_lord.sql diff --git a/apps/sim/db/migrations/0015_brief_martin_li.sql b/packages/db/migrations/0015_brief_martin_li.sql similarity index 100% rename from apps/sim/db/migrations/0015_brief_martin_li.sql rename to packages/db/migrations/0015_brief_martin_li.sql diff --git a/apps/sim/db/migrations/0016_cultured_butterfly.sql b/packages/db/migrations/0016_cultured_butterfly.sql similarity index 100% rename from apps/sim/db/migrations/0016_cultured_butterfly.sql rename to packages/db/migrations/0016_cultured_butterfly.sql diff --git a/apps/sim/db/migrations/0017_curious_ink.sql b/packages/db/migrations/0017_curious_ink.sql similarity index 100% rename from apps/sim/db/migrations/0017_curious_ink.sql rename to packages/db/migrations/0017_curious_ink.sql diff --git a/apps/sim/db/migrations/0018_sleepy_champions.sql b/packages/db/migrations/0018_sleepy_champions.sql similarity index 100% rename from apps/sim/db/migrations/0018_sleepy_champions.sql rename to packages/db/migrations/0018_sleepy_champions.sql diff --git a/apps/sim/db/migrations/0019_even_lorna_dane.sql b/packages/db/migrations/0019_even_lorna_dane.sql similarity index 100% rename from apps/sim/db/migrations/0019_even_lorna_dane.sql rename to packages/db/migrations/0019_even_lorna_dane.sql diff --git a/apps/sim/db/migrations/0020_clear_skreet.sql b/packages/db/migrations/0020_clear_skreet.sql similarity index 100% rename from apps/sim/db/migrations/0020_clear_skreet.sql rename to packages/db/migrations/0020_clear_skreet.sql diff --git a/apps/sim/db/migrations/0021_shocking_korath.sql b/packages/db/migrations/0021_shocking_korath.sql similarity index 100% rename from apps/sim/db/migrations/0021_shocking_korath.sql rename to packages/db/migrations/0021_shocking_korath.sql diff --git a/apps/sim/db/migrations/0022_gray_galactus.sql b/packages/db/migrations/0022_gray_galactus.sql similarity index 100% rename from apps/sim/db/migrations/0022_gray_galactus.sql rename to packages/db/migrations/0022_gray_galactus.sql diff --git a/apps/sim/db/migrations/0023_nervous_tyger_tiger.sql b/packages/db/migrations/0023_nervous_tyger_tiger.sql similarity index 100% rename from apps/sim/db/migrations/0023_nervous_tyger_tiger.sql rename to packages/db/migrations/0023_nervous_tyger_tiger.sql diff --git a/apps/sim/db/migrations/0024_next_whizzer.sql b/packages/db/migrations/0024_next_whizzer.sql similarity index 100% rename from apps/sim/db/migrations/0024_next_whizzer.sql rename to packages/db/migrations/0024_next_whizzer.sql diff --git a/apps/sim/db/migrations/0025_curved_jubilee.sql b/packages/db/migrations/0025_curved_jubilee.sql similarity index 100% rename from apps/sim/db/migrations/0025_curved_jubilee.sql rename to packages/db/migrations/0025_curved_jubilee.sql diff --git a/apps/sim/db/migrations/0026_daily_killraven.sql b/packages/db/migrations/0026_daily_killraven.sql similarity index 100% rename from apps/sim/db/migrations/0026_daily_killraven.sql rename to packages/db/migrations/0026_daily_killraven.sql diff --git a/apps/sim/db/migrations/0027_careless_gamora.sql b/packages/db/migrations/0027_careless_gamora.sql similarity index 100% rename from apps/sim/db/migrations/0027_careless_gamora.sql rename to packages/db/migrations/0027_careless_gamora.sql diff --git a/apps/sim/db/migrations/0028_absent_triton.sql b/packages/db/migrations/0028_absent_triton.sql similarity index 100% rename from apps/sim/db/migrations/0028_absent_triton.sql rename to packages/db/migrations/0028_absent_triton.sql diff --git a/apps/sim/db/migrations/0030_happy_joseph.sql b/packages/db/migrations/0030_happy_joseph.sql similarity index 100% rename from apps/sim/db/migrations/0030_happy_joseph.sql rename to packages/db/migrations/0030_happy_joseph.sql diff --git a/apps/sim/db/migrations/0031_lively_nico_minoru.sql b/packages/db/migrations/0031_lively_nico_minoru.sql similarity index 100% rename from apps/sim/db/migrations/0031_lively_nico_minoru.sql rename to packages/db/migrations/0031_lively_nico_minoru.sql diff --git a/apps/sim/db/migrations/0032_rare_nico_minoru.sql b/packages/db/migrations/0032_rare_nico_minoru.sql similarity index 100% rename from apps/sim/db/migrations/0032_rare_nico_minoru.sql rename to packages/db/migrations/0032_rare_nico_minoru.sql diff --git a/apps/sim/db/migrations/0033_solid_stellaris.sql b/packages/db/migrations/0033_solid_stellaris.sql similarity index 100% rename from apps/sim/db/migrations/0033_solid_stellaris.sql rename to packages/db/migrations/0033_solid_stellaris.sql diff --git a/apps/sim/db/migrations/0034_brainy_revanche.sql b/packages/db/migrations/0034_brainy_revanche.sql similarity index 100% rename from apps/sim/db/migrations/0034_brainy_revanche.sql rename to packages/db/migrations/0034_brainy_revanche.sql diff --git a/apps/sim/db/migrations/0035_slim_energizer.sql b/packages/db/migrations/0035_slim_energizer.sql similarity index 100% rename from apps/sim/db/migrations/0035_slim_energizer.sql rename to packages/db/migrations/0035_slim_energizer.sql diff --git a/apps/sim/db/migrations/0036_married_skreet.sql b/packages/db/migrations/0036_married_skreet.sql similarity index 100% rename from apps/sim/db/migrations/0036_married_skreet.sql rename to packages/db/migrations/0036_married_skreet.sql diff --git a/apps/sim/db/migrations/0037_outgoing_madame_hydra.sql b/packages/db/migrations/0037_outgoing_madame_hydra.sql similarity index 100% rename from apps/sim/db/migrations/0037_outgoing_madame_hydra.sql rename to packages/db/migrations/0037_outgoing_madame_hydra.sql diff --git a/apps/sim/db/migrations/0038_shocking_thor.sql b/packages/db/migrations/0038_shocking_thor.sql similarity index 100% rename from apps/sim/db/migrations/0038_shocking_thor.sql rename to packages/db/migrations/0038_shocking_thor.sql diff --git a/apps/sim/db/migrations/0039_tranquil_speed.sql b/packages/db/migrations/0039_tranquil_speed.sql similarity index 100% rename from apps/sim/db/migrations/0039_tranquil_speed.sql rename to packages/db/migrations/0039_tranquil_speed.sql diff --git a/apps/sim/db/migrations/0040_silky_monster_badoon.sql b/packages/db/migrations/0040_silky_monster_badoon.sql similarity index 100% rename from apps/sim/db/migrations/0040_silky_monster_badoon.sql rename to packages/db/migrations/0040_silky_monster_badoon.sql diff --git a/apps/sim/db/migrations/0041_sparkling_ma_gnuci.sql b/packages/db/migrations/0041_sparkling_ma_gnuci.sql similarity index 100% rename from apps/sim/db/migrations/0041_sparkling_ma_gnuci.sql rename to packages/db/migrations/0041_sparkling_ma_gnuci.sql diff --git a/apps/sim/db/migrations/0042_breezy_miracleman.sql b/packages/db/migrations/0042_breezy_miracleman.sql similarity index 100% rename from apps/sim/db/migrations/0042_breezy_miracleman.sql rename to packages/db/migrations/0042_breezy_miracleman.sql diff --git a/apps/sim/db/migrations/0043_silent_the_anarchist.sql b/packages/db/migrations/0043_silent_the_anarchist.sql similarity index 100% rename from apps/sim/db/migrations/0043_silent_the_anarchist.sql rename to packages/db/migrations/0043_silent_the_anarchist.sql diff --git a/apps/sim/db/migrations/0044_uneven_killer_shrike.sql b/packages/db/migrations/0044_uneven_killer_shrike.sql similarity index 100% rename from apps/sim/db/migrations/0044_uneven_killer_shrike.sql rename to packages/db/migrations/0044_uneven_killer_shrike.sql diff --git a/apps/sim/db/migrations/0045_sour_chameleon.sql b/packages/db/migrations/0045_sour_chameleon.sql similarity index 100% rename from apps/sim/db/migrations/0045_sour_chameleon.sql rename to packages/db/migrations/0045_sour_chameleon.sql diff --git a/apps/sim/db/migrations/0046_loose_blizzard.sql b/packages/db/migrations/0046_loose_blizzard.sql similarity index 100% rename from apps/sim/db/migrations/0046_loose_blizzard.sql rename to packages/db/migrations/0046_loose_blizzard.sql diff --git a/apps/sim/db/migrations/0047_new_triathlon.sql b/packages/db/migrations/0047_new_triathlon.sql similarity index 100% rename from apps/sim/db/migrations/0047_new_triathlon.sql rename to packages/db/migrations/0047_new_triathlon.sql diff --git a/apps/sim/db/migrations/0048_flawless_ultron.sql b/packages/db/migrations/0048_flawless_ultron.sql similarity index 100% rename from apps/sim/db/migrations/0048_flawless_ultron.sql rename to packages/db/migrations/0048_flawless_ultron.sql diff --git a/apps/sim/db/migrations/0049_fancy_cardiac.sql b/packages/db/migrations/0049_fancy_cardiac.sql similarity index 100% rename from apps/sim/db/migrations/0049_fancy_cardiac.sql rename to packages/db/migrations/0049_fancy_cardiac.sql diff --git a/apps/sim/db/migrations/0050_big_mattie_franklin.sql b/packages/db/migrations/0050_big_mattie_franklin.sql similarity index 100% rename from apps/sim/db/migrations/0050_big_mattie_franklin.sql rename to packages/db/migrations/0050_big_mattie_franklin.sql diff --git a/apps/sim/db/migrations/0051_typical_expediter.sql b/packages/db/migrations/0051_typical_expediter.sql similarity index 100% rename from apps/sim/db/migrations/0051_typical_expediter.sql rename to packages/db/migrations/0051_typical_expediter.sql diff --git a/apps/sim/db/migrations/0052_fluffy_shinobi_shaw.sql b/packages/db/migrations/0052_fluffy_shinobi_shaw.sql similarity index 100% rename from apps/sim/db/migrations/0052_fluffy_shinobi_shaw.sql rename to packages/db/migrations/0052_fluffy_shinobi_shaw.sql diff --git a/apps/sim/db/migrations/0053_gigantic_gabe_jones.sql b/packages/db/migrations/0053_gigantic_gabe_jones.sql similarity index 100% rename from apps/sim/db/migrations/0053_gigantic_gabe_jones.sql rename to packages/db/migrations/0053_gigantic_gabe_jones.sql diff --git a/apps/sim/db/migrations/0054_naive_raider.sql b/packages/db/migrations/0054_naive_raider.sql similarity index 100% rename from apps/sim/db/migrations/0054_naive_raider.sql rename to packages/db/migrations/0054_naive_raider.sql diff --git a/apps/sim/db/migrations/0055_amused_ender_wiggin.sql b/packages/db/migrations/0055_amused_ender_wiggin.sql similarity index 100% rename from apps/sim/db/migrations/0055_amused_ender_wiggin.sql rename to packages/db/migrations/0055_amused_ender_wiggin.sql diff --git a/apps/sim/db/migrations/0056_adorable_franklin_richards.sql b/packages/db/migrations/0056_adorable_franklin_richards.sql similarity index 100% rename from apps/sim/db/migrations/0056_adorable_franklin_richards.sql rename to packages/db/migrations/0056_adorable_franklin_richards.sql diff --git a/apps/sim/db/migrations/0057_charming_star_brand.sql b/packages/db/migrations/0057_charming_star_brand.sql similarity index 100% rename from apps/sim/db/migrations/0057_charming_star_brand.sql rename to packages/db/migrations/0057_charming_star_brand.sql diff --git a/apps/sim/db/migrations/0058_clean_shiva.sql b/packages/db/migrations/0058_clean_shiva.sql similarity index 100% rename from apps/sim/db/migrations/0058_clean_shiva.sql rename to packages/db/migrations/0058_clean_shiva.sql diff --git a/apps/sim/db/migrations/0059_odd_may_parker.sql b/packages/db/migrations/0059_odd_may_parker.sql similarity index 100% rename from apps/sim/db/migrations/0059_odd_may_parker.sql rename to packages/db/migrations/0059_odd_may_parker.sql diff --git a/apps/sim/db/migrations/0060_ordinary_nick_fury.sql b/packages/db/migrations/0060_ordinary_nick_fury.sql similarity index 100% rename from apps/sim/db/migrations/0060_ordinary_nick_fury.sql rename to packages/db/migrations/0060_ordinary_nick_fury.sql diff --git a/apps/sim/db/migrations/0061_swift_doctor_spectrum.sql b/packages/db/migrations/0061_swift_doctor_spectrum.sql similarity index 100% rename from apps/sim/db/migrations/0061_swift_doctor_spectrum.sql rename to packages/db/migrations/0061_swift_doctor_spectrum.sql diff --git a/apps/sim/db/migrations/0062_previous_phantom_reporter.sql b/packages/db/migrations/0062_previous_phantom_reporter.sql similarity index 100% rename from apps/sim/db/migrations/0062_previous_phantom_reporter.sql rename to packages/db/migrations/0062_previous_phantom_reporter.sql diff --git a/apps/sim/db/migrations/0063_lame_sandman.sql b/packages/db/migrations/0063_lame_sandman.sql similarity index 100% rename from apps/sim/db/migrations/0063_lame_sandman.sql rename to packages/db/migrations/0063_lame_sandman.sql diff --git a/apps/sim/db/migrations/0064_elite_hedge_knight.sql b/packages/db/migrations/0064_elite_hedge_knight.sql similarity index 100% rename from apps/sim/db/migrations/0064_elite_hedge_knight.sql rename to packages/db/migrations/0064_elite_hedge_knight.sql diff --git a/apps/sim/db/migrations/0065_solid_newton_destine.sql b/packages/db/migrations/0065_solid_newton_destine.sql similarity index 100% rename from apps/sim/db/migrations/0065_solid_newton_destine.sql rename to packages/db/migrations/0065_solid_newton_destine.sql diff --git a/apps/sim/db/migrations/0066_talented_mentor.sql b/packages/db/migrations/0066_talented_mentor.sql similarity index 100% rename from apps/sim/db/migrations/0066_talented_mentor.sql rename to packages/db/migrations/0066_talented_mentor.sql diff --git a/apps/sim/db/migrations/0067_safe_bushwacker.sql b/packages/db/migrations/0067_safe_bushwacker.sql similarity index 100% rename from apps/sim/db/migrations/0067_safe_bushwacker.sql rename to packages/db/migrations/0067_safe_bushwacker.sql diff --git a/apps/sim/db/migrations/0068_fine_hardball.sql b/packages/db/migrations/0068_fine_hardball.sql similarity index 100% rename from apps/sim/db/migrations/0068_fine_hardball.sql rename to packages/db/migrations/0068_fine_hardball.sql diff --git a/apps/sim/db/migrations/0069_lonely_spirit.sql b/packages/db/migrations/0069_lonely_spirit.sql similarity index 100% rename from apps/sim/db/migrations/0069_lonely_spirit.sql rename to packages/db/migrations/0069_lonely_spirit.sql diff --git a/apps/sim/db/migrations/0070_charming_wrecking_crew.sql b/packages/db/migrations/0070_charming_wrecking_crew.sql similarity index 100% rename from apps/sim/db/migrations/0070_charming_wrecking_crew.sql rename to packages/db/migrations/0070_charming_wrecking_crew.sql diff --git a/apps/sim/db/migrations/0071_free_sharon_carter.sql b/packages/db/migrations/0071_free_sharon_carter.sql similarity index 100% rename from apps/sim/db/migrations/0071_free_sharon_carter.sql rename to packages/db/migrations/0071_free_sharon_carter.sql diff --git a/apps/sim/db/migrations/0072_powerful_legion.sql b/packages/db/migrations/0072_powerful_legion.sql similarity index 100% rename from apps/sim/db/migrations/0072_powerful_legion.sql rename to packages/db/migrations/0072_powerful_legion.sql diff --git a/apps/sim/db/migrations/0073_hot_champions.sql b/packages/db/migrations/0073_hot_champions.sql similarity index 100% rename from apps/sim/db/migrations/0073_hot_champions.sql rename to packages/db/migrations/0073_hot_champions.sql diff --git a/apps/sim/db/migrations/0074_abnormal_dreadnoughts.sql b/packages/db/migrations/0074_abnormal_dreadnoughts.sql similarity index 100% rename from apps/sim/db/migrations/0074_abnormal_dreadnoughts.sql rename to packages/db/migrations/0074_abnormal_dreadnoughts.sql diff --git a/apps/sim/db/migrations/0075_lush_moonstone.sql b/packages/db/migrations/0075_lush_moonstone.sql similarity index 100% rename from apps/sim/db/migrations/0075_lush_moonstone.sql rename to packages/db/migrations/0075_lush_moonstone.sql diff --git a/apps/sim/db/migrations/0076_damp_vector.sql b/packages/db/migrations/0076_damp_vector.sql similarity index 100% rename from apps/sim/db/migrations/0076_damp_vector.sql rename to packages/db/migrations/0076_damp_vector.sql diff --git a/apps/sim/db/migrations/0077_missing_doc_processing.sql b/packages/db/migrations/0077_missing_doc_processing.sql similarity index 100% rename from apps/sim/db/migrations/0077_missing_doc_processing.sql rename to packages/db/migrations/0077_missing_doc_processing.sql diff --git a/apps/sim/db/migrations/0077_rapid_chimera.sql b/packages/db/migrations/0077_rapid_chimera.sql similarity index 100% rename from apps/sim/db/migrations/0077_rapid_chimera.sql rename to packages/db/migrations/0077_rapid_chimera.sql diff --git a/apps/sim/db/migrations/0078_supreme_madrox.sql b/packages/db/migrations/0078_supreme_madrox.sql similarity index 100% rename from apps/sim/db/migrations/0078_supreme_madrox.sql rename to packages/db/migrations/0078_supreme_madrox.sql diff --git a/apps/sim/db/migrations/0079_shocking_shriek.sql b/packages/db/migrations/0079_shocking_shriek.sql similarity index 100% rename from apps/sim/db/migrations/0079_shocking_shriek.sql rename to packages/db/migrations/0079_shocking_shriek.sql diff --git a/apps/sim/db/migrations/0080_left_riptide.sql b/packages/db/migrations/0080_left_riptide.sql similarity index 100% rename from apps/sim/db/migrations/0080_left_riptide.sql rename to packages/db/migrations/0080_left_riptide.sql diff --git a/apps/sim/db/migrations/0081_yellow_shadow_king.sql b/packages/db/migrations/0081_yellow_shadow_king.sql similarity index 100% rename from apps/sim/db/migrations/0081_yellow_shadow_king.sql rename to packages/db/migrations/0081_yellow_shadow_king.sql diff --git a/apps/sim/db/migrations/0082_light_blockbuster.sql b/packages/db/migrations/0082_light_blockbuster.sql similarity index 100% rename from apps/sim/db/migrations/0082_light_blockbuster.sql rename to packages/db/migrations/0082_light_blockbuster.sql diff --git a/apps/sim/db/migrations/0083_ambiguous_dreadnoughts.sql b/packages/db/migrations/0083_ambiguous_dreadnoughts.sql similarity index 100% rename from apps/sim/db/migrations/0083_ambiguous_dreadnoughts.sql rename to packages/db/migrations/0083_ambiguous_dreadnoughts.sql diff --git a/apps/sim/db/migrations/0084_even_lockheed.sql b/packages/db/migrations/0084_even_lockheed.sql similarity index 100% rename from apps/sim/db/migrations/0084_even_lockheed.sql rename to packages/db/migrations/0084_even_lockheed.sql diff --git a/apps/sim/db/migrations/0085_daffy_blacklash.sql b/packages/db/migrations/0085_daffy_blacklash.sql similarity index 100% rename from apps/sim/db/migrations/0085_daffy_blacklash.sql rename to packages/db/migrations/0085_daffy_blacklash.sql diff --git a/apps/sim/db/migrations/0086_breezy_sister_grimm.sql b/packages/db/migrations/0086_breezy_sister_grimm.sql similarity index 100% rename from apps/sim/db/migrations/0086_breezy_sister_grimm.sql rename to packages/db/migrations/0086_breezy_sister_grimm.sql diff --git a/apps/sim/db/migrations/0087_wealthy_landau.sql b/packages/db/migrations/0087_wealthy_landau.sql similarity index 100% rename from apps/sim/db/migrations/0087_wealthy_landau.sql rename to packages/db/migrations/0087_wealthy_landau.sql diff --git a/apps/sim/db/migrations/0088_serious_firestar.sql b/packages/db/migrations/0088_serious_firestar.sql similarity index 100% rename from apps/sim/db/migrations/0088_serious_firestar.sql rename to packages/db/migrations/0088_serious_firestar.sql diff --git a/apps/sim/db/migrations/0089_amused_pete_wisdom.sql b/packages/db/migrations/0089_amused_pete_wisdom.sql similarity index 100% rename from apps/sim/db/migrations/0089_amused_pete_wisdom.sql rename to packages/db/migrations/0089_amused_pete_wisdom.sql diff --git a/apps/sim/db/migrations/0090_fearless_zaladane.sql b/packages/db/migrations/0090_fearless_zaladane.sql similarity index 100% rename from apps/sim/db/migrations/0090_fearless_zaladane.sql rename to packages/db/migrations/0090_fearless_zaladane.sql diff --git a/apps/sim/db/migrations/meta/0000_snapshot.json b/packages/db/migrations/meta/0000_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0000_snapshot.json rename to packages/db/migrations/meta/0000_snapshot.json diff --git a/apps/sim/db/migrations/meta/0001_snapshot.json b/packages/db/migrations/meta/0001_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0001_snapshot.json rename to packages/db/migrations/meta/0001_snapshot.json diff --git a/apps/sim/db/migrations/meta/0002_snapshot.json b/packages/db/migrations/meta/0002_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0002_snapshot.json rename to packages/db/migrations/meta/0002_snapshot.json diff --git a/apps/sim/db/migrations/meta/0003_snapshot.json b/packages/db/migrations/meta/0003_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0003_snapshot.json rename to packages/db/migrations/meta/0003_snapshot.json diff --git a/apps/sim/db/migrations/meta/0004_snapshot.json b/packages/db/migrations/meta/0004_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0004_snapshot.json rename to packages/db/migrations/meta/0004_snapshot.json diff --git a/apps/sim/db/migrations/meta/0005_snapshot.json b/packages/db/migrations/meta/0005_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0005_snapshot.json rename to packages/db/migrations/meta/0005_snapshot.json diff --git a/apps/sim/db/migrations/meta/0006_snapshot.json b/packages/db/migrations/meta/0006_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0006_snapshot.json rename to packages/db/migrations/meta/0006_snapshot.json diff --git a/apps/sim/db/migrations/meta/0007_snapshot.json b/packages/db/migrations/meta/0007_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0007_snapshot.json rename to packages/db/migrations/meta/0007_snapshot.json diff --git a/apps/sim/db/migrations/meta/0008_snapshot.json b/packages/db/migrations/meta/0008_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0008_snapshot.json rename to packages/db/migrations/meta/0008_snapshot.json diff --git a/apps/sim/db/migrations/meta/0009_snapshot.json b/packages/db/migrations/meta/0009_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0009_snapshot.json rename to packages/db/migrations/meta/0009_snapshot.json diff --git a/apps/sim/db/migrations/meta/0010_snapshot.json b/packages/db/migrations/meta/0010_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0010_snapshot.json rename to packages/db/migrations/meta/0010_snapshot.json diff --git a/apps/sim/db/migrations/meta/0011_snapshot.json b/packages/db/migrations/meta/0011_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0011_snapshot.json rename to packages/db/migrations/meta/0011_snapshot.json diff --git a/apps/sim/db/migrations/meta/0012_snapshot.json b/packages/db/migrations/meta/0012_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0012_snapshot.json rename to packages/db/migrations/meta/0012_snapshot.json diff --git a/apps/sim/db/migrations/meta/0013_snapshot.json b/packages/db/migrations/meta/0013_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0013_snapshot.json rename to packages/db/migrations/meta/0013_snapshot.json diff --git a/apps/sim/db/migrations/meta/0014_snapshot.json b/packages/db/migrations/meta/0014_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0014_snapshot.json rename to packages/db/migrations/meta/0014_snapshot.json diff --git a/apps/sim/db/migrations/meta/0015_snapshot.json b/packages/db/migrations/meta/0015_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0015_snapshot.json rename to packages/db/migrations/meta/0015_snapshot.json diff --git a/apps/sim/db/migrations/meta/0016_snapshot.json b/packages/db/migrations/meta/0016_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0016_snapshot.json rename to packages/db/migrations/meta/0016_snapshot.json diff --git a/apps/sim/db/migrations/meta/0017_snapshot.json b/packages/db/migrations/meta/0017_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0017_snapshot.json rename to packages/db/migrations/meta/0017_snapshot.json diff --git a/apps/sim/db/migrations/meta/0018_snapshot.json b/packages/db/migrations/meta/0018_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0018_snapshot.json rename to packages/db/migrations/meta/0018_snapshot.json diff --git a/apps/sim/db/migrations/meta/0019_snapshot.json b/packages/db/migrations/meta/0019_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0019_snapshot.json rename to packages/db/migrations/meta/0019_snapshot.json diff --git a/apps/sim/db/migrations/meta/0020_snapshot.json b/packages/db/migrations/meta/0020_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0020_snapshot.json rename to packages/db/migrations/meta/0020_snapshot.json diff --git a/apps/sim/db/migrations/meta/0021_snapshot.json b/packages/db/migrations/meta/0021_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0021_snapshot.json rename to packages/db/migrations/meta/0021_snapshot.json diff --git a/apps/sim/db/migrations/meta/0022_snapshot.json b/packages/db/migrations/meta/0022_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0022_snapshot.json rename to packages/db/migrations/meta/0022_snapshot.json diff --git a/apps/sim/db/migrations/meta/0023_snapshot.json b/packages/db/migrations/meta/0023_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0023_snapshot.json rename to packages/db/migrations/meta/0023_snapshot.json diff --git a/apps/sim/db/migrations/meta/0024_snapshot.json b/packages/db/migrations/meta/0024_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0024_snapshot.json rename to packages/db/migrations/meta/0024_snapshot.json diff --git a/apps/sim/db/migrations/meta/0025_snapshot.json b/packages/db/migrations/meta/0025_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0025_snapshot.json rename to packages/db/migrations/meta/0025_snapshot.json diff --git a/apps/sim/db/migrations/meta/0026_snapshot.json b/packages/db/migrations/meta/0026_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0026_snapshot.json rename to packages/db/migrations/meta/0026_snapshot.json diff --git a/apps/sim/db/migrations/meta/0027_snapshot.json b/packages/db/migrations/meta/0027_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0027_snapshot.json rename to packages/db/migrations/meta/0027_snapshot.json diff --git a/apps/sim/db/migrations/meta/0028_snapshot.json b/packages/db/migrations/meta/0028_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0028_snapshot.json rename to packages/db/migrations/meta/0028_snapshot.json diff --git a/apps/sim/db/migrations/meta/0030_snapshot.json b/packages/db/migrations/meta/0030_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0030_snapshot.json rename to packages/db/migrations/meta/0030_snapshot.json diff --git a/apps/sim/db/migrations/meta/0031_snapshot.json b/packages/db/migrations/meta/0031_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0031_snapshot.json rename to packages/db/migrations/meta/0031_snapshot.json diff --git a/apps/sim/db/migrations/meta/0032_snapshot.json b/packages/db/migrations/meta/0032_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0032_snapshot.json rename to packages/db/migrations/meta/0032_snapshot.json diff --git a/apps/sim/db/migrations/meta/0033_snapshot.json b/packages/db/migrations/meta/0033_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0033_snapshot.json rename to packages/db/migrations/meta/0033_snapshot.json diff --git a/apps/sim/db/migrations/meta/0034_snapshot.json b/packages/db/migrations/meta/0034_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0034_snapshot.json rename to packages/db/migrations/meta/0034_snapshot.json diff --git a/apps/sim/db/migrations/meta/0035_snapshot.json b/packages/db/migrations/meta/0035_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0035_snapshot.json rename to packages/db/migrations/meta/0035_snapshot.json diff --git a/apps/sim/db/migrations/meta/0036_snapshot.json b/packages/db/migrations/meta/0036_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0036_snapshot.json rename to packages/db/migrations/meta/0036_snapshot.json diff --git a/apps/sim/db/migrations/meta/0037_snapshot.json b/packages/db/migrations/meta/0037_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0037_snapshot.json rename to packages/db/migrations/meta/0037_snapshot.json diff --git a/apps/sim/db/migrations/meta/0038_snapshot.json b/packages/db/migrations/meta/0038_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0038_snapshot.json rename to packages/db/migrations/meta/0038_snapshot.json diff --git a/apps/sim/db/migrations/meta/0039_snapshot.json b/packages/db/migrations/meta/0039_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0039_snapshot.json rename to packages/db/migrations/meta/0039_snapshot.json diff --git a/apps/sim/db/migrations/meta/0040_snapshot.json b/packages/db/migrations/meta/0040_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0040_snapshot.json rename to packages/db/migrations/meta/0040_snapshot.json diff --git a/apps/sim/db/migrations/meta/0041_snapshot.json b/packages/db/migrations/meta/0041_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0041_snapshot.json rename to packages/db/migrations/meta/0041_snapshot.json diff --git a/apps/sim/db/migrations/meta/0042_snapshot.json b/packages/db/migrations/meta/0042_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0042_snapshot.json rename to packages/db/migrations/meta/0042_snapshot.json diff --git a/apps/sim/db/migrations/meta/0043_snapshot.json b/packages/db/migrations/meta/0043_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0043_snapshot.json rename to packages/db/migrations/meta/0043_snapshot.json diff --git a/apps/sim/db/migrations/meta/0044_snapshot.json b/packages/db/migrations/meta/0044_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0044_snapshot.json rename to packages/db/migrations/meta/0044_snapshot.json diff --git a/apps/sim/db/migrations/meta/0045_snapshot.json b/packages/db/migrations/meta/0045_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0045_snapshot.json rename to packages/db/migrations/meta/0045_snapshot.json diff --git a/apps/sim/db/migrations/meta/0046_snapshot.json b/packages/db/migrations/meta/0046_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0046_snapshot.json rename to packages/db/migrations/meta/0046_snapshot.json diff --git a/apps/sim/db/migrations/meta/0047_snapshot.json b/packages/db/migrations/meta/0047_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0047_snapshot.json rename to packages/db/migrations/meta/0047_snapshot.json diff --git a/apps/sim/db/migrations/meta/0048_snapshot.json b/packages/db/migrations/meta/0048_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0048_snapshot.json rename to packages/db/migrations/meta/0048_snapshot.json diff --git a/apps/sim/db/migrations/meta/0049_snapshot.json b/packages/db/migrations/meta/0049_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0049_snapshot.json rename to packages/db/migrations/meta/0049_snapshot.json diff --git a/apps/sim/db/migrations/meta/0050_snapshot.json b/packages/db/migrations/meta/0050_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0050_snapshot.json rename to packages/db/migrations/meta/0050_snapshot.json diff --git a/apps/sim/db/migrations/meta/0051_snapshot.json b/packages/db/migrations/meta/0051_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0051_snapshot.json rename to packages/db/migrations/meta/0051_snapshot.json diff --git a/apps/sim/db/migrations/meta/0052_snapshot.json b/packages/db/migrations/meta/0052_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0052_snapshot.json rename to packages/db/migrations/meta/0052_snapshot.json diff --git a/apps/sim/db/migrations/meta/0053_snapshot.json b/packages/db/migrations/meta/0053_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0053_snapshot.json rename to packages/db/migrations/meta/0053_snapshot.json diff --git a/apps/sim/db/migrations/meta/0054_snapshot.json b/packages/db/migrations/meta/0054_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0054_snapshot.json rename to packages/db/migrations/meta/0054_snapshot.json diff --git a/apps/sim/db/migrations/meta/0055_snapshot.json b/packages/db/migrations/meta/0055_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0055_snapshot.json rename to packages/db/migrations/meta/0055_snapshot.json diff --git a/apps/sim/db/migrations/meta/0056_snapshot.json b/packages/db/migrations/meta/0056_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0056_snapshot.json rename to packages/db/migrations/meta/0056_snapshot.json diff --git a/apps/sim/db/migrations/meta/0057_snapshot.json b/packages/db/migrations/meta/0057_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0057_snapshot.json rename to packages/db/migrations/meta/0057_snapshot.json diff --git a/apps/sim/db/migrations/meta/0058_snapshot.json b/packages/db/migrations/meta/0058_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0058_snapshot.json rename to packages/db/migrations/meta/0058_snapshot.json diff --git a/apps/sim/db/migrations/meta/0059_snapshot.json b/packages/db/migrations/meta/0059_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0059_snapshot.json rename to packages/db/migrations/meta/0059_snapshot.json diff --git a/apps/sim/db/migrations/meta/0060_snapshot.json b/packages/db/migrations/meta/0060_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0060_snapshot.json rename to packages/db/migrations/meta/0060_snapshot.json diff --git a/apps/sim/db/migrations/meta/0061_snapshot.json b/packages/db/migrations/meta/0061_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0061_snapshot.json rename to packages/db/migrations/meta/0061_snapshot.json diff --git a/apps/sim/db/migrations/meta/0062_snapshot.json b/packages/db/migrations/meta/0062_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0062_snapshot.json rename to packages/db/migrations/meta/0062_snapshot.json diff --git a/apps/sim/db/migrations/meta/0063_snapshot.json b/packages/db/migrations/meta/0063_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0063_snapshot.json rename to packages/db/migrations/meta/0063_snapshot.json diff --git a/apps/sim/db/migrations/meta/0064_snapshot.json b/packages/db/migrations/meta/0064_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0064_snapshot.json rename to packages/db/migrations/meta/0064_snapshot.json diff --git a/apps/sim/db/migrations/meta/0065_snapshot.json b/packages/db/migrations/meta/0065_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0065_snapshot.json rename to packages/db/migrations/meta/0065_snapshot.json diff --git a/apps/sim/db/migrations/meta/0066_snapshot.json b/packages/db/migrations/meta/0066_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0066_snapshot.json rename to packages/db/migrations/meta/0066_snapshot.json diff --git a/apps/sim/db/migrations/meta/0067_snapshot.json b/packages/db/migrations/meta/0067_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0067_snapshot.json rename to packages/db/migrations/meta/0067_snapshot.json diff --git a/apps/sim/db/migrations/meta/0068_snapshot.json b/packages/db/migrations/meta/0068_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0068_snapshot.json rename to packages/db/migrations/meta/0068_snapshot.json diff --git a/apps/sim/db/migrations/meta/0069_snapshot.json b/packages/db/migrations/meta/0069_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0069_snapshot.json rename to packages/db/migrations/meta/0069_snapshot.json diff --git a/apps/sim/db/migrations/meta/0070_snapshot.json b/packages/db/migrations/meta/0070_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0070_snapshot.json rename to packages/db/migrations/meta/0070_snapshot.json diff --git a/apps/sim/db/migrations/meta/0071_snapshot.json b/packages/db/migrations/meta/0071_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0071_snapshot.json rename to packages/db/migrations/meta/0071_snapshot.json diff --git a/apps/sim/db/migrations/meta/0072_snapshot.json b/packages/db/migrations/meta/0072_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0072_snapshot.json rename to packages/db/migrations/meta/0072_snapshot.json diff --git a/apps/sim/db/migrations/meta/0073_snapshot.json b/packages/db/migrations/meta/0073_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0073_snapshot.json rename to packages/db/migrations/meta/0073_snapshot.json diff --git a/apps/sim/db/migrations/meta/0074_snapshot.json b/packages/db/migrations/meta/0074_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0074_snapshot.json rename to packages/db/migrations/meta/0074_snapshot.json diff --git a/apps/sim/db/migrations/meta/0075_snapshot.json b/packages/db/migrations/meta/0075_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0075_snapshot.json rename to packages/db/migrations/meta/0075_snapshot.json diff --git a/apps/sim/db/migrations/meta/0076_snapshot.json b/packages/db/migrations/meta/0076_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0076_snapshot.json rename to packages/db/migrations/meta/0076_snapshot.json diff --git a/apps/sim/db/migrations/meta/0077_snapshot.json b/packages/db/migrations/meta/0077_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0077_snapshot.json rename to packages/db/migrations/meta/0077_snapshot.json diff --git a/apps/sim/db/migrations/meta/0078_snapshot.json b/packages/db/migrations/meta/0078_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0078_snapshot.json rename to packages/db/migrations/meta/0078_snapshot.json diff --git a/apps/sim/db/migrations/meta/0079_snapshot.json b/packages/db/migrations/meta/0079_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0079_snapshot.json rename to packages/db/migrations/meta/0079_snapshot.json diff --git a/apps/sim/db/migrations/meta/0080_snapshot.json b/packages/db/migrations/meta/0080_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0080_snapshot.json rename to packages/db/migrations/meta/0080_snapshot.json diff --git a/apps/sim/db/migrations/meta/0081_snapshot.json b/packages/db/migrations/meta/0081_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0081_snapshot.json rename to packages/db/migrations/meta/0081_snapshot.json diff --git a/apps/sim/db/migrations/meta/0082_snapshot.json b/packages/db/migrations/meta/0082_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0082_snapshot.json rename to packages/db/migrations/meta/0082_snapshot.json diff --git a/apps/sim/db/migrations/meta/0083_snapshot.json b/packages/db/migrations/meta/0083_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0083_snapshot.json rename to packages/db/migrations/meta/0083_snapshot.json diff --git a/apps/sim/db/migrations/meta/0084_snapshot.json b/packages/db/migrations/meta/0084_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0084_snapshot.json rename to packages/db/migrations/meta/0084_snapshot.json diff --git a/apps/sim/db/migrations/meta/0085_snapshot.json b/packages/db/migrations/meta/0085_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0085_snapshot.json rename to packages/db/migrations/meta/0085_snapshot.json diff --git a/apps/sim/db/migrations/meta/0086_snapshot.json b/packages/db/migrations/meta/0086_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0086_snapshot.json rename to packages/db/migrations/meta/0086_snapshot.json diff --git a/apps/sim/db/migrations/meta/0087_snapshot.json b/packages/db/migrations/meta/0087_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0087_snapshot.json rename to packages/db/migrations/meta/0087_snapshot.json diff --git a/apps/sim/db/migrations/meta/0088_snapshot.json b/packages/db/migrations/meta/0088_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0088_snapshot.json rename to packages/db/migrations/meta/0088_snapshot.json diff --git a/apps/sim/db/migrations/meta/0089_snapshot.json b/packages/db/migrations/meta/0089_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0089_snapshot.json rename to packages/db/migrations/meta/0089_snapshot.json diff --git a/apps/sim/db/migrations/meta/0090_snapshot.json b/packages/db/migrations/meta/0090_snapshot.json similarity index 100% rename from apps/sim/db/migrations/meta/0090_snapshot.json rename to packages/db/migrations/meta/0090_snapshot.json diff --git a/apps/sim/db/migrations/meta/_journal.json b/packages/db/migrations/meta/_journal.json similarity index 100% rename from apps/sim/db/migrations/meta/_journal.json rename to packages/db/migrations/meta/_journal.json diff --git a/packages/db/package.json b/packages/db/package.json new file mode 100644 index 000000000..e4f689b86 --- /dev/null +++ b/packages/db/package.json @@ -0,0 +1,38 @@ +{ + "name": "@sim/db", + "version": "0.1.0", + "private": true, + "type": "module", + "license": "Apache-2.0", + "engines": { + "bun": ">=1.2.13", + "node": ">=20.0.0" + }, + "exports": { + ".": { + "types": "./index.ts", + "default": "./index.ts" + }, + "./schema": { + "types": "./schema.ts", + "default": "./schema.ts" + } + }, + "scripts": { + "db:push": "bunx drizzle-kit push --config=./drizzle.config.ts", + "db:migrate": "bunx drizzle-kit migrate --config=./drizzle.config.ts", + "db:studio": "bunx drizzle-kit studio --config=./drizzle.config.ts", + "type-check": "tsc --noEmit" + }, + "peerDependencies": { + "drizzle-orm": "^0.41.0", + "postgres": "^3.4.5" + }, + "devDependencies": { + "typescript": "^5.7.3" + }, + "overrides": { + "drizzle-orm": "^0.41.0", + "postgres": "^3.4.5" + } +} diff --git a/apps/sim/db/schema.ts b/packages/db/schema.ts similarity index 100% rename from apps/sim/db/schema.ts rename to packages/db/schema.ts diff --git a/packages/db/scripts/migrate-deployment-versions.ts b/packages/db/scripts/migrate-deployment-versions.ts new file mode 100644 index 000000000..30677c88b --- /dev/null +++ b/packages/db/scripts/migrate-deployment-versions.ts @@ -0,0 +1,370 @@ +#!/usr/bin/env bun + +// This script is intentionally self-contained for execution in the migrations image. +// Do not import from the main app code; duplicate minimal schema and DB setup here. + +import { sql } from 'drizzle-orm' +import { drizzle } from 'drizzle-orm/postgres-js' +import postgres from 'postgres' +import { v4 as uuidv4 } from 'uuid' + +// ---------- Minimal env helpers ---------- +function getEnv(name: string): string | undefined { + if (typeof process !== 'undefined' && process.env && name in process.env) { + return process.env[name] + } + return undefined +} + +const CONNECTION_STRING = getEnv('POSTGRES_URL') ?? getEnv('DATABASE_URL') +if (!CONNECTION_STRING) { + console.error('Missing POSTGRES_URL or DATABASE_URL environment variable') + process.exit(1) +} + +// ---------- Minimal schema (only what we need) ---------- +import { boolean, index, integer, json, jsonb, pgTable, text, timestamp } from 'drizzle-orm/pg-core' + +// Tables referenced by the script +const workflow = pgTable( + 'workflow', + { + id: text('id').primaryKey(), + userId: text('user_id').notNull(), + name: text('name').notNull(), + isDeployed: boolean('is_deployed').notNull().default(false), + deployedState: json('deployed_state'), + deployedAt: timestamp('deployed_at'), + }, + (table) => ({ + userIdIdx: index('workflow_user_id_idx').on(table.userId), + }) +) + +const workflowBlocks = pgTable( + 'workflow_blocks', + { + id: text('id').primaryKey(), + workflowId: text('workflow_id').notNull(), + type: text('type').notNull(), + name: text('name').notNull(), + positionX: text('position_x').notNull(), + positionY: text('position_y').notNull(), + enabled: boolean('enabled').notNull().default(true), + horizontalHandles: boolean('horizontal_handles').notNull().default(true), + isWide: boolean('is_wide').notNull().default(false), + advancedMode: boolean('advanced_mode').notNull().default(false), + triggerMode: boolean('trigger_mode').notNull().default(false), + height: text('height').notNull().default('0'), + subBlocks: jsonb('sub_blocks').notNull().default('{}'), + outputs: jsonb('outputs').notNull().default('{}'), + data: jsonb('data').default('{}'), + parentId: text('parent_id'), + extent: text('extent'), + createdAt: timestamp('created_at').notNull().defaultNow(), + updatedAt: timestamp('updated_at').notNull().defaultNow(), + }, + (table) => ({ + workflowIdIdx: index('workflow_blocks_workflow_id_idx').on(table.workflowId), + }) +) + +const workflowEdges = pgTable( + 'workflow_edges', + { + id: text('id').primaryKey(), + workflowId: text('workflow_id').notNull(), + sourceBlockId: text('source_block_id').notNull(), + targetBlockId: text('target_block_id').notNull(), + sourceHandle: text('source_handle'), + targetHandle: text('target_handle'), + createdAt: timestamp('created_at').notNull().defaultNow(), + }, + (table) => ({ + workflowIdIdx: index('workflow_edges_workflow_id_idx').on(table.workflowId), + }) +) + +const workflowSubflows = pgTable( + 'workflow_subflows', + { + id: text('id').primaryKey(), + workflowId: text('workflow_id').notNull(), + type: text('type').notNull(), + config: jsonb('config').notNull().default('{}'), + createdAt: timestamp('created_at').notNull().defaultNow(), + updatedAt: timestamp('updated_at').notNull().defaultNow(), + }, + (table) => ({ + workflowIdIdx: index('workflow_subflows_workflow_id_idx').on(table.workflowId), + }) +) + +const workflowDeploymentVersion = pgTable( + 'workflow_deployment_version', + { + id: text('id').primaryKey(), + workflowId: text('workflow_id').notNull(), + version: integer('version').notNull(), + state: json('state').notNull(), + isActive: boolean('is_active').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), + createdBy: text('created_by'), + }, + (table) => ({ + workflowIdIdx: index('workflow_deployment_version_workflow_id_idx').on(table.workflowId), + }) +) + +// ---------- DB client ---------- +const postgresClient = postgres(CONNECTION_STRING, { + prepare: false, + idle_timeout: 20, + connect_timeout: 30, + max: 10, + onnotice: () => {}, +}) +const db = drizzle(postgresClient) + +// ---------- Minimal types ---------- +type WorkflowState = { + blocks: Record + edges: Array<{ + id: string + source: string + target: string + sourceHandle?: string | null + targetHandle?: string | null + }> + loops: Record + parallels: Record +} + +// ---------- Normalized loader (inline of loadWorkflowFromNormalizedTables) ---------- +async function loadWorkflowFromNormalizedTables(workflowId: string) { + const [blocks, edges, subflows] = await Promise.all([ + db.select().from(workflowBlocks).where(sql`${workflowBlocks.workflowId} = ${workflowId}`), + db.select().from(workflowEdges).where(sql`${workflowEdges.workflowId} = ${workflowId}`), + db.select().from(workflowSubflows).where(sql`${workflowSubflows.workflowId} = ${workflowId}`), + ]) + + if (blocks.length === 0) return null + + const blocksMap: Record = {} + for (const block of blocks as any[]) { + const parentId = (block.parentId as string | null) || null + const extent = (block.extent as string | null) || null + + blocksMap[block.id] = { + id: block.id, + type: block.type, + name: block.name, + position: { + x: Number(block.positionX), + y: Number(block.positionY), + }, + enabled: block.enabled, + horizontalHandles: block.horizontalHandles, + isWide: block.isWide, + advancedMode: block.advancedMode, + triggerMode: block.triggerMode, + height: Number(block.height), + subBlocks: block.subBlocks || {}, + outputs: block.outputs || {}, + data: { + ...(block.data || {}), + ...(parentId && { parentId }), + ...(extent && { extent }), + }, + parentId, + extent, + } + } + + const edgesArray = (edges as any[]).map((edge) => ({ + id: edge.id, + source: edge.sourceBlockId, + target: edge.targetBlockId, + sourceHandle: edge.sourceHandle, + targetHandle: edge.targetHandle, + })) + + const loops: Record = {} + const parallels: Record = {} + for (const sub of subflows as any[]) { + const config = sub.config || {} + if (sub.type === 'loop') { + loops[sub.id] = { id: sub.id, ...config } + } else if (sub.type === 'parallel') { + parallels[sub.id] = { id: sub.id, ...config } + } + } + + return { + blocks: blocksMap, + edges: edgesArray, + loops, + parallels, + isFromNormalizedTables: true, + } +} + +// ---------- Migration ---------- +const DRY_RUN = process.argv.includes('--dry-run') +const BATCH_SIZE = 50 + +async function migrateWorkflows() { + console.log('Starting deployment version migration...') + console.log(`Mode: ${DRY_RUN ? 'DRY RUN' : 'LIVE'}`) + console.log(`Batch size: ${BATCH_SIZE}`) + console.log('---') + + try { + const workflows = await db + .select({ + id: workflow.id, + name: workflow.name, + isDeployed: workflow.isDeployed, + deployedState: workflow.deployedState, + deployedAt: workflow.deployedAt, + userId: workflow.userId, + }) + .from(workflow) + + console.log(`Found ${workflows.length} workflows to process`) + + const existingVersions = await db + .select({ workflowId: workflowDeploymentVersion.workflowId }) + .from(workflowDeploymentVersion) + + const existingWorkflowIds = new Set(existingVersions.map((v) => v.workflowId as string)) + console.log(`${existingWorkflowIds.size} workflows already have deployment versions`) + + let successCount = 0 + let skipCount = 0 + let errorCount = 0 + + for (let i = 0; i < workflows.length; i += BATCH_SIZE) { + const batch = workflows.slice(i, i + BATCH_SIZE) + console.log( + `\nProcessing batch ${Math.floor(i / BATCH_SIZE) + 1} (workflows ${i + 1}-${Math.min(i + BATCH_SIZE, workflows.length)})` + ) + + const deploymentVersions: Array<{ + id: string + workflowId: string + version: number + state: WorkflowState + createdAt: Date + createdBy: string + isActive: boolean + }> = [] + + for (const wf of batch as any[]) { + if (existingWorkflowIds.has(wf.id)) { + console.log(` [SKIP] ${wf.id} (${wf.name}) - already has deployment version`) + skipCount++ + continue + } + + let state: WorkflowState | null = null + + if (wf.deployedState) { + state = wf.deployedState as WorkflowState + console.log(` [DEPLOYED] ${wf.id} (${wf.name}) - using existing deployedState`) + } else { + const normalized = await loadWorkflowFromNormalizedTables(wf.id) + if (normalized) { + state = { + blocks: normalized.blocks, + edges: normalized.edges, + loops: normalized.loops, + parallels: normalized.parallels, + } + console.log( + ` [NORMALIZED] ${wf.id} (${wf.name}) - loaded from normalized tables (was deployed: ${wf.isDeployed})` + ) + } else { + console.log(` [SKIP] ${wf.id} (${wf.name}) - no state available`) + skipCount++ + continue + } + } + + if (state) { + deploymentVersions.push({ + id: uuidv4(), + workflowId: wf.id, + version: 1, + state, + createdAt: wf.deployedAt || new Date(), + createdBy: wf.userId || 'migration', + isActive: true, + }) + successCount++ + } + } + + if (deploymentVersions.length > 0) { + if (DRY_RUN) { + console.log(` [DRY RUN] Would insert ${deploymentVersions.length} deployment versions`) + console.log(` [DRY RUN] Would mark ${deploymentVersions.length} workflows as deployed`) + } else { + try { + await db.insert(workflowDeploymentVersion).values(deploymentVersions) + console.log(` [SUCCESS] Inserted ${deploymentVersions.length} deployment versions`) + + const workflowIds = deploymentVersions.map((v) => v.workflowId) + await db + .update(workflow) + .set({ + isDeployed: true, + deployedAt: new Date(), + }) + .where( + sql`${workflow.id} IN (${sql.join( + workflowIds.map((id) => sql`${id}`), + sql`, ` + )})` + ) + console.log(` [SUCCESS] Marked ${workflowIds.length} workflows as deployed`) + } catch (error) { + console.error(` [ERROR] Failed to insert batch:`, error) + errorCount += deploymentVersions.length + successCount -= deploymentVersions.length + } + } + } + } + + console.log('\n---') + console.log('Migration Summary:') + console.log(` Success: ${successCount} workflows`) + console.log(` Skipped: ${skipCount} workflows`) + console.log(` Errors: ${errorCount} workflows`) + + if (DRY_RUN) { + console.log('\n[DRY RUN] No changes were made to the database.') + console.log('Run without --dry-run flag to apply changes.') + } else { + console.log('\nMigration completed successfully!') + } + } catch (error) { + console.error('Fatal error during migration:', error) + process.exit(1) + } finally { + try { + await postgresClient.end({ timeout: 5 }) + } catch {} + } +} + +migrateWorkflows() + .then(() => { + console.log('\nDone!') + process.exit(0) + }) + .catch((error) => { + console.error('Unexpected error:', error) + process.exit(1) + }) diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json new file mode 100644 index 000000000..89f327c2e --- /dev/null +++ b/packages/db/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "esnext", + "moduleResolution": "bundler", + "lib": ["es2022"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "baseUrl": ".", + "paths": { + "@sim/db": ["./index.ts"], + "@sim/db/*": ["./*"] + }, + "resolveJsonModule": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/scripts/bun.lock b/scripts/bun.lock deleted file mode 100644 index 151e33c41..000000000 --- a/scripts/bun.lock +++ /dev/null @@ -1,201 +0,0 @@ -{ - "lockfileVersion": 1, - "workspaces": { - "": { - "name": "sim-doc-generator", - "dependencies": { - "@types/node": "^24.5.1", - "@types/react": "^19.1.13", - "glob": "^11.0.3", - "ts-node": "^10.9.2", - "tsx": "^4.20.5", - "typescript": "^5.9.2", - }, - }, - }, - "packages": { - "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], - - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.2", "", { "os": "android", "cpu": "arm" }, "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA=="], - - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w=="], - - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.2", "", { "os": "android", "cpu": "x64" }, "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg=="], - - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA=="], - - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA=="], - - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w=="], - - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ=="], - - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.2", "", { "os": "linux", "cpu": "arm" }, "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g=="], - - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g=="], - - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ=="], - - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.2", "", { "os": "linux", "cpu": "none" }, "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w=="], - - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.2", "", { "os": "linux", "cpu": "none" }, "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q=="], - - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g=="], - - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.2", "", { "os": "linux", "cpu": "none" }, "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw=="], - - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q=="], - - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.2", "", { "os": "linux", "cpu": "x64" }, "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg=="], - - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.2", "", { "os": "none", "cpu": "arm64" }, "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw=="], - - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.2", "", { "os": "none", "cpu": "x64" }, "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg=="], - - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg=="], - - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw=="], - - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.2", "", { "os": "win32", "cpu": "x64" }, "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA=="], - - "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], - - "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], - - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], - - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], - - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], - - "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], - - "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="], - - "@tsconfig/node14": ["@tsconfig/node14@1.0.3", "", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="], - - "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], - - "@types/node": ["@types/node@24.5.1", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q=="], - - "@types/react": ["@types/react@19.1.13", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ=="], - - "acorn": ["acorn@8.14.1", "", { "bin": "bin/acorn" }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], - - "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], - - "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - - "ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - - "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], - - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - - "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - - "diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], - - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - - "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - - "esbuild": ["esbuild@0.25.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.2", "@esbuild/android-arm": "0.25.2", "@esbuild/android-arm64": "0.25.2", "@esbuild/android-x64": "0.25.2", "@esbuild/darwin-arm64": "0.25.2", "@esbuild/darwin-x64": "0.25.2", "@esbuild/freebsd-arm64": "0.25.2", "@esbuild/freebsd-x64": "0.25.2", "@esbuild/linux-arm": "0.25.2", "@esbuild/linux-arm64": "0.25.2", "@esbuild/linux-ia32": "0.25.2", "@esbuild/linux-loong64": "0.25.2", "@esbuild/linux-mips64el": "0.25.2", "@esbuild/linux-ppc64": "0.25.2", "@esbuild/linux-riscv64": "0.25.2", "@esbuild/linux-s390x": "0.25.2", "@esbuild/linux-x64": "0.25.2", "@esbuild/netbsd-arm64": "0.25.2", "@esbuild/netbsd-x64": "0.25.2", "@esbuild/openbsd-arm64": "0.25.2", "@esbuild/openbsd-x64": "0.25.2", "@esbuild/sunos-x64": "0.25.2", "@esbuild/win32-arm64": "0.25.2", "@esbuild/win32-ia32": "0.25.2", "@esbuild/win32-x64": "0.25.2" }, "bin": "bin/esbuild" }, "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ=="], - - "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], - - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - - "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="], - - "glob": ["glob@11.0.3", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA=="], - - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "jackspeak": ["jackspeak@4.1.1", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="], - - "lru-cache": ["lru-cache@11.1.0", "", {}, "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="], - - "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], - - "minimatch": ["minimatch@10.0.3", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="], - - "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - - "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "path-scurry": ["path-scurry@2.0.0", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg=="], - - "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - - "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - - "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - - "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], - - "tsx": ["tsx@4.20.5", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw=="], - - "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], - - "undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], - - "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], - - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - - "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], - - "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - } -}