diff --git a/.github/workflows/preview-engine.yml b/.github/workflows/preview-engine.yml index 9b51298527..8bbdea9d5b 100644 --- a/.github/workflows/preview-engine.yml +++ b/.github/workflows/preview-engine.yml @@ -32,5 +32,5 @@ jobs: packageManager: bun apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} workingDirectory: "apps/engine" - wranglerVersion: "3.79.0" + wranglerVersion: "3.80.0" command: deploy --minify src/index.ts --env staging diff --git a/.github/workflows/production-engine.yml b/.github/workflows/production-engine.yml index 71a91176b2..d1231cae3e 100644 --- a/.github/workflows/production-engine.yml +++ b/.github/workflows/production-engine.yml @@ -32,5 +32,5 @@ jobs: packageManager: bun apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} workingDirectory: "apps/engine" - wranglerVersion: "3.79.0" + wranglerVersion: "3.80.0" command: deploy --minify src/index.ts --env production diff --git a/apps/api/package.json b/apps/api/package.json index 29b1a93c36..2e1bb6960c 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -7,6 +7,6 @@ "db:reset": "" }, "dependencies": { - "supabase": "^1.192.5" + "supabase": "^1.200.3" } } diff --git a/apps/api/supabase/migrations/20241007083408_remote_schema.sql b/apps/api/supabase/migrations/20241007083408_remote_schema.sql new file mode 100644 index 0000000000..ae34d4490e --- /dev/null +++ b/apps/api/supabase/migrations/20241007083408_remote_schema.sql @@ -0,0 +1,501 @@ +drop policy "Entries can be updated by a member of the team" on "public"."tracker_entries"; + +create table "public"."apps" ( + "id" uuid not null default gen_random_uuid(), + "team_id" uuid default gen_random_uuid(), + "config" jsonb, + "created_at" timestamp with time zone default now(), + "app_id" text not null, + "created_by" uuid default gen_random_uuid(), + "settings" jsonb +); + + +alter table "public"."apps" enable row level security; + +alter table "public"."tracker_entries" alter column "start" set data type timestamp with time zone using "start"::timestamp with time zone; + +alter table "public"."tracker_entries" alter column "stop" set data type timestamp with time zone using "stop"::timestamp with time zone; + +alter table "public"."users" add column "time_format" numeric default '24'::numeric; + +CREATE UNIQUE INDEX integrations_pkey ON public.apps USING btree (id); + +CREATE UNIQUE INDEX unique_app_id_team_id ON public.apps USING btree (app_id, team_id); + +alter table "public"."apps" add constraint "integrations_pkey" PRIMARY KEY using index "integrations_pkey"; + +alter table "public"."apps" add constraint "apps_created_by_fkey" FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE not valid; + +alter table "public"."apps" validate constraint "apps_created_by_fkey"; + +alter table "public"."apps" add constraint "integrations_team_id_fkey" FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE not valid; + +alter table "public"."apps" validate constraint "integrations_team_id_fkey"; + +alter table "public"."apps" add constraint "unique_app_id_team_id" UNIQUE using index "unique_app_id_team_id"; + +set check_function_bodies = off; + +CREATE OR REPLACE FUNCTION public.get_assigned_users_for_project(tracker_projects) + RETURNS json + LANGUAGE sql +AS $function$ + SELECT COALESCE( + (SELECT json_agg( + json_build_object( + 'user_id', u.id, + 'full_name', u.full_name, + 'avatar_url', u.avatar_url + ) + ) + FROM ( + SELECT DISTINCT u.id, u.full_name, u.avatar_url + FROM public.users u + JOIN public.tracker_entries te ON u.id = te.assigned_id + WHERE te.project_id = $1.id + ) u + ), '[]'::json); +$function$ +; + +CREATE OR REPLACE FUNCTION public.get_project_total_amount(tracker_projects) + RETURNS numeric + LANGUAGE sql +AS $function$ + SELECT COALESCE( + (SELECT + CASE + WHEN $1.rate IS NOT NULL THEN + ROUND(SUM(te.duration) * $1.rate / 3600, 2) + ELSE + 0 + END + FROM public.tracker_entries te + WHERE te.project_id = $1.id + ), 0 + ); +$function$ +; + +CREATE OR REPLACE FUNCTION public.get_runway_v4(team_id text, date_from date, date_to date, base_currency text DEFAULT NULL::text) + RETURNS numeric + LANGUAGE plpgsql +AS $function$ +declare + target_currency text; + total_balance numeric; + avg_burn_rate numeric; + number_of_months numeric; +begin + if get_runway_v4.base_currency is not null then + target_currency := get_runway_v4.base_currency; + else + select teams.base_currency into target_currency + from teams + where teams.id = get_runway_v4.team_id; + end if; + + select * from get_total_balance_v3(team_id, target_currency) into total_balance; + + select (extract(year FROM date_to) - extract(year FROM date_from)) * 12 + + extract(month FROM date_to) - extract(month FROM date_from) + into number_of_months; + + select round(avg(value)) + from get_burn_rate_v3(team_id, date_from, date_to, target_currency) + into avg_burn_rate; + + if avg_burn_rate = 0 then + return null; + else + return round(total_balance / avg_burn_rate); + end if; +end; + +$function$ +; + +CREATE OR REPLACE FUNCTION public.calculate_bank_account_base_balance() + RETURNS trigger + LANGUAGE plpgsql +AS $function$declare + team_base_currency text; + exchange_rate numeric; +begin + begin + select base_currency into team_base_currency + from teams + where id = new.team_id; + + -- If the account currency is the same as the team's base currency or the team's base currency is null + if new.currency = team_base_currency or team_base_currency is null then + new.base_balance := new.balance; + new.base_currency := new.currency; + else + select rate into exchange_rate + from exchange_rates + where base = new.currency + and target = team_base_currency + limit 1; + + if exchange_rate is null then + raise exception 'Exchange rate not found for % to %', new.currency, team_base_currency; + end if; + + new.base_balance := round(new.balance * exchange_rate, 2); + new.base_currency := team_base_currency; + end if; + + return new; + exception + when others then + -- Log the error + raise log 'Error in calculate_bank_account_base_balance: %', sqlerrm; + -- Set default values in case of error + new.base_balance := new.balance; + new.base_currency := new.currency; + return new; + end; +end;$function$ +; + +CREATE OR REPLACE FUNCTION public.calculate_inbox_base_amount() + RETURNS trigger + LANGUAGE plpgsql +AS $function$declare + team_base_currency text; + exchange_rate numeric; +begin + begin + select base_currency into team_base_currency + from teams + where id = new.team_id; + + -- if the inbox item currency is the same as the team's base currency or the team's base currency is null + if new.currency = team_base_currency or team_base_currency is null then + new.base_amount := new.amount; + new.base_currency := new.currency; + else + begin + select rate into exchange_rate + from exchange_rates + where base = new.currency + and target = team_base_currency + limit 1; + + if exchange_rate is null then + raise exception 'Exchange rate not found for % to %', new.currency, team_base_currency; + end if; + + new.base_amount := round(new.amount * exchange_rate, 2); + new.base_currency := team_base_currency; + exception + when others then + raise log 'Error calculating exchange rate: %', sqlerrm; + -- Set default values in case of error + new.base_amount := new.amount; + new.base_currency := new.currency; + end; + end if; + exception + when others then + raise log 'Error in calculate_inbox_base_amount: %', sqlerrm; + -- Set default values in case of error + new.base_amount := new.amount; + new.base_currency := new.currency; + end; + + return new; +end;$function$ +; + +CREATE OR REPLACE FUNCTION public.calculate_transaction_base_amount() + RETURNS trigger + LANGUAGE plpgsql +AS $function$declare + team_base_currency text; + exchange_rate numeric; +begin + begin + select base_currency into team_base_currency + from teams + where id = new.team_id; + + -- If the account currency is the same as the team's base currency or the team's base currency is null + if new.currency = team_base_currency or team_base_currency is null then + new.base_balance := new.balance; + new.base_currency := new.currency; + else + select rate into exchange_rate + from exchange_rates + where base = new.currency + and target = team_base_currency + limit 1; + + if exchange_rate is null then + raise exception 'Exchange rate not found for % to %', new.currency, team_base_currency; + end if; + + new.base_balance := round(new.balance * exchange_rate, 2); + new.base_currency := team_base_currency; + end if; + + return new; + exception + when others then + -- Log the error + raise notice 'Error in calculate_bank_account_base_balance: %', sqlerrm; + -- Return the original record without modification + return new; + end; +end;$function$ +; + +CREATE OR REPLACE FUNCTION public.detect_recurring_transactions() + RETURNS trigger + LANGUAGE plpgsql +AS $function$declare + last_transaction record; + days_diff numeric; + frequency_type transaction_frequency; + search_query text; +begin + -- Wrap the entire function in a try-catch block + begin + -- Prepare the search query + search_query := regexp_replace( + regexp_replace(coalesce(NEW.name, '') || ' ' || coalesce(NEW.description, ''), '[^\w\s]', ' ', 'g'), + '\s+', ' ', 'g' + ); + search_query := trim(search_query); + + -- Convert to tsquery format with prefix matching + search_query := ( + SELECT string_agg(lexeme || ':*', ' & ') + FROM unnest(string_to_array(search_query, ' ')) lexeme + WHERE length(lexeme) > 0 + ); + + -- Find the last similar transaction using ts_query + SELECT * INTO last_transaction + FROM transactions + WHERE team_id = NEW.team_id + AND id <> NEW.id -- exclude the current transaction + AND date < NEW.date -- ensure we're looking at previous transactions + AND category_slug != 'income' -- exclude income transactions + AND category_slug != 'transfer' -- exclude transfer transactions + AND fts_vector @@ to_tsquery('english', search_query) + ORDER BY ts_rank(fts_vector, to_tsquery('english', search_query)) DESC, date DESC + LIMIT 1; + + -- If at least one similar transaction exists, calculate frequency + IF last_transaction.id IS NOT NULL THEN + IF last_transaction.frequency IS NOT NULL AND last_transaction.recurring = true THEN + frequency_type := last_transaction.frequency; + -- Save recurring if last_transaction is true + UPDATE transactions SET + recurring = true, + frequency = frequency_type + WHERE id = NEW.id; + ELSIF last_transaction.recurring = false THEN + -- Set as non-recurring if last_transaction is false + UPDATE transactions SET + recurring = false, + frequency = NULL + WHERE id = NEW.id; + ELSE + days_diff := extract(epoch FROM (NEW.date::timestamp - last_transaction.date::timestamp)) / (24 * 60 * 60); + + CASE + WHEN days_diff BETWEEN 1 AND 16 THEN + frequency_type := 'weekly'::transaction_frequency; + WHEN days_diff BETWEEN 18 AND 80 THEN + frequency_type := 'monthly'::transaction_frequency; + WHEN days_diff BETWEEN 330 AND 370 THEN + frequency_type := 'annually'::transaction_frequency; + ELSE + frequency_type := 'irregular'::transaction_frequency; + END CASE; + + -- Update the recurring flag and frequency only if not irregular + IF frequency_type != 'irregular'::transaction_frequency THEN + UPDATE transactions SET + recurring = true, + frequency = frequency_type + WHERE id = NEW.id; + ELSE + -- Mark as non-recurring if irregular + UPDATE transactions SET + recurring = false, + frequency = NULL + WHERE id = NEW.id; + END IF; + END IF; + ELSE + -- No similar transaction found, mark as non-recurring + UPDATE transactions SET + recurring = false, + frequency = NULL + WHERE id = NEW.id; + END IF; + + exception + when others then + -- Log the error + raise notice 'An error occurred: %', sqlerrm; + + -- Ensure we still return NEW even if an error occurs + RETURN NEW; + end; + + RETURN NEW; +END;$function$ +; + +CREATE OR REPLACE FUNCTION public.update_enrich_transaction() + RETURNS trigger + LANGUAGE plpgsql + SECURITY DEFINER +AS $function$begin + if new.category_slug is null then + -- Find matching category_slug from transaction_enrichments and transaction_categories in one query + begin + new.category_slug := ( + select te.category_slug + from transaction_enrichments te + join transaction_categories tc on tc.slug = te.category_slug and tc.team_id = new.team_id + where te.name = new.name + and (te.system = true or te.team_id = new.team_id) + and te.category_slug != 'income' + limit 1 + ); + exception + when others then + new.category_slug := null; -- or set to a default value + end; + end if; + + return new; +end;$function$ +; + +CREATE OR REPLACE FUNCTION public.upsert_transaction_enrichment() + RETURNS trigger + LANGUAGE plpgsql + SECURITY DEFINER + SET search_path TO 'public' +AS $function$declare + transaction_name text; + system_value boolean; +begin + begin + select new.name into transaction_name; + + select system into system_value + from transaction_categories as tc + where tc.slug = new.category_slug and tc.team_id = new.team_id; + + if new.team_id is not null then + insert into transaction_enrichments(name, category_slug, team_id, system) + values (transaction_name, new.category_slug, new.team_id, system_value) + on conflict (team_id, name) do update + set category_slug = excluded.category_slug; + end if; + + return new; + exception + when others then + -- Log the error + raise notice 'Error in upsert_transaction_enrichment: %', sqlerrm; + + -- Return the original NEW record without modifications + return new; + end; +end;$function$ +; + +grant delete on table "public"."apps" to "anon"; + +grant insert on table "public"."apps" to "anon"; + +grant references on table "public"."apps" to "anon"; + +grant select on table "public"."apps" to "anon"; + +grant trigger on table "public"."apps" to "anon"; + +grant truncate on table "public"."apps" to "anon"; + +grant update on table "public"."apps" to "anon"; + +grant delete on table "public"."apps" to "authenticated"; + +grant insert on table "public"."apps" to "authenticated"; + +grant references on table "public"."apps" to "authenticated"; + +grant select on table "public"."apps" to "authenticated"; + +grant trigger on table "public"."apps" to "authenticated"; + +grant truncate on table "public"."apps" to "authenticated"; + +grant update on table "public"."apps" to "authenticated"; + +grant delete on table "public"."apps" to "service_role"; + +grant insert on table "public"."apps" to "service_role"; + +grant references on table "public"."apps" to "service_role"; + +grant select on table "public"."apps" to "service_role"; + +grant trigger on table "public"."apps" to "service_role"; + +grant truncate on table "public"."apps" to "service_role"; + +grant update on table "public"."apps" to "service_role"; + +create policy "Apps can be deleted by a member of the team" +on "public"."apps" +as permissive +for delete +to public +using ((team_id IN ( SELECT private.get_teams_for_authenticated_user() AS get_teams_for_authenticated_user))); + + +create policy "Apps can be inserted by a member of the team" +on "public"."apps" +as permissive +for insert +to public +with check ((team_id IN ( SELECT private.get_teams_for_authenticated_user() AS get_teams_for_authenticated_user))); + + +create policy "Apps can be selected by a member of the team" +on "public"."apps" +as permissive +for select +to public +using ((team_id IN ( SELECT private.get_teams_for_authenticated_user() AS get_teams_for_authenticated_user))); + + +create policy "Apps can be updated by a member of the team" +on "public"."apps" +as permissive +for update +to public +using ((team_id IN ( SELECT private.get_teams_for_authenticated_user() AS get_teams_for_authenticated_user))); + + +create policy "Entries can be updated by a member of the team" +on "public"."tracker_entries" +as permissive +for update +to authenticated +using ((team_id IN ( SELECT private.get_teams_for_authenticated_user() AS get_teams_for_authenticated_user))) +with check ((team_id IN ( SELECT private.get_teams_for_authenticated_user() AS get_teams_for_authenticated_user))); + + + diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index d4859bff43..b8e5abe2aa 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -13,7 +13,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@ai-sdk/openai": "^0.0.61", + "@ai-sdk/openai": "^0.0.66", "@date-fns/tz": "^1.1.2", "@hookform/resolvers": "^3.9.0", "@midday-ai/engine": "^0.1.0-alpha.22", @@ -33,16 +33,16 @@ "@tanstack/react-table": "^8.20.5", "@team-plain/typescript-sdk": "4.7.0", "@todesktop/client-active-win": "^0.15.0", - "@todesktop/client-core": "^1.10.0", + "@todesktop/client-core": "^1.12.0", "@todesktop/runtime": "^1.6.4", "@trigger.dev/nextjs": "^2.3.19", "@uidotdev/usehooks": "^2.4.1", "@upstash/ratelimit": "^2.0.3", - "ai": "3.4.0", + "ai": "3.4.9", "change-case": "^5.4.4", "date-fns": "^4.1.0", "dub": "^0.38.1", - "framer-motion": "^11.5.4", + "framer-motion": "^11.11.1", "geist": "^1.3.1", "little-date": "^1.0.0", "loops": "1.0.1", @@ -53,7 +53,7 @@ "next-international": "1.2.4", "next-safe-action": "^7.9.3", "next-themes": "^0.3.0", - "nuqs": "^1.19.1", + "nuqs": "^1.19.3", "papaparse": "^5.4.1", "react": "18.3.1", "react-colorful": "^5.6.1", @@ -78,8 +78,8 @@ "@next/bundle-analyzer": "14.2.1", "@t3-oss/env-nextjs": "^0.11.1", "@todesktop/tailwind-variants": "^1.0.1", - "@types/node": "^22.5.5", - "@types/react": "^18.3.7", + "@types/node": "^22.7.4", + "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", "typescript": "^5.6.2" } diff --git a/apps/docs/package.json b/apps/docs/package.json index 7255ef9ec6..d7869c363e 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -5,6 +5,6 @@ "generate:engine": "bunx @mintlify/scraping@latest openapi-file http://localhost:3002/openapi -o api-reference/engine/endpoint" }, "devDependencies": { - "mintlify": "^4.0.222" + "mintlify": "^4.0.236" } } \ No newline at end of file diff --git a/apps/engine/package.json b/apps/engine/package.json index 163f6923a9..0b5f383b88 100644 --- a/apps/engine/package.json +++ b/apps/engine/package.json @@ -10,8 +10,8 @@ }, "dependencies": { "@hono/swagger-ui": "^0.4.1", - "@hono/zod-openapi": "^0.16.3", - "@hono/zod-validator": "^0.3.0", + "@hono/zod-openapi": "^0.16.4", + "@hono/zod-validator": "^0.4.1", "hono": "^4.6.3", "plaid": "^28.0.0", "typesense": "^1.8.2", @@ -19,8 +19,8 @@ "zod": "^3.23.8" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20240925.0", + "@cloudflare/workers-types": "^4.20241004.0", "@types/bun": "^1.1.10", - "wrangler": "^3.79.0" + "wrangler": "^3.80.0" } } diff --git a/apps/engine/src/providers/gocardless/utils.ts b/apps/engine/src/providers/gocardless/utils.ts index df69d947ad..a197e9796e 100644 --- a/apps/engine/src/providers/gocardless/utils.ts +++ b/apps/engine/src/providers/gocardless/utils.ts @@ -186,6 +186,7 @@ export function getAccessValidForDays({ "HALIFAX_HLFXGB22", "BANK_OF_SCOTLAND_COMMERCIAL_BOFSGBS1", "FINOM_SOBKDEBB", + "BANCATRANSILVANIA_BTRLRO22", ]; if (RESTRICTED_TO_90DAYS.some((str) => str.startsWith(institutionId))) { diff --git a/apps/engine/tasks/download-gocardless.ts b/apps/engine/tasks/download-gocardless.ts index 33b63cf841..a603a118d9 100644 --- a/apps/engine/tasks/download-gocardless.ts +++ b/apps/engine/tasks/download-gocardless.ts @@ -10,8 +10,7 @@ async function main() { const data = await response.json(); - console.log(data); - + // @ts-ignore const tasks = data?.map(async (institution) => { const fileName = `${institution.id}.${getFileExtension(institution.logo)}`; diff --git a/apps/website/package.json b/apps/website/package.json index 036663bd58..1d58a2c4e4 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -12,18 +12,18 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@calcom/embed-react": "^1.5.0", + "@calcom/embed-react": "^1.5.1", "@midday/supabase": "workspace:*", "@midday/ui": "workspace:*", - "@openpanel/nextjs": "^1.0.3", + "@openpanel/nextjs": "^1.0.5", "@openstatus/react": "^0.0.3", "@splinetool/react-spline": "^4.0.0", - "@splinetool/runtime": "1.9.26", + "@splinetool/runtime": "1.9.28", "@team-plain/typescript-sdk": "4.9.0", "@uidotdev/usehooks": "^2.4.1", "d3": "^7.9.0", "date-fns": "^4.1.0", - "framer-motion": "^11.5.4", + "framer-motion": "^11.11.1", "geist": "^1.3.1", "next": "14.2.1", "next-mdx-remote": "^5.0.0", @@ -35,12 +35,12 @@ "react-use-draggable-scroll": "^0.4.7", "server-only": "^0.0.1", "sharp": "^0.33.5", - "sugar-high": "^0.7.0" + "sugar-high": "^0.7.1" }, "devDependencies": { "@midday/tsconfig": "workspace:*", - "@types/node": "^22.5.5", - "@types/react": "^18.3.7", + "@types/node": "^22.7.4", + "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0" } } diff --git a/bun.lockb b/bun.lockb index e8b9d90bfa..a76573df33 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/app-store/package.json b/packages/app-store/package.json index 6802334058..d13562941c 100644 --- a/packages/app-store/package.json +++ b/packages/app-store/package.json @@ -10,14 +10,14 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@ai-sdk/openai": "^0.0.62", - "@slack/bolt": "^3.21.4", + "@ai-sdk/openai": "^0.0.66", + "@slack/bolt": "^3.22.0", "@slack/web-api": "^7.5.0", - "ai": "^3.4.3", + "ai": "^3.4.9", "zod": "^3.23.8" }, "devDependencies": { - "@types/node": "^22.7.2", + "@types/node": "^22.7.4", "typescript": "^5.6.2" }, "exports": { diff --git a/packages/documents/package.json b/packages/documents/package.json index 980757c0f6..81dec7d9a6 100644 --- a/packages/documents/package.json +++ b/packages/documents/package.json @@ -11,17 +11,17 @@ "test": "bun test src" }, "dependencies": { - "@ai-sdk/openai": "^0.0.61", + "@ai-sdk/openai": "^0.0.66", "@azure-rest/ai-document-intelligence": "^1.0.0-beta.3", "@midday/utils": "workspace:*", - "ai": "3.4.0", + "ai": "3.4.9", "base64-arraybuffer": "^1.0.2", "change-case": "^5.4.4", "heic-convert": "1.2.4", "zod": "^3.23.8" }, "devDependencies": { - "@types/bun": "^1.1.9", + "@types/bun": "^1.1.10", "@types/heic-convert": "1.2.3", "request": "^2.88.2" } diff --git a/packages/events/package.json b/packages/events/package.json index 6818364209..c0f75c78ca 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -11,7 +11,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@openpanel/nextjs": "^1.0.3", + "@openpanel/nextjs": "^1.0.5", "@vercel/functions": "^1.4.1" }, "devDependencies": { diff --git a/packages/import/package.json b/packages/import/package.json index d76aceabe4..c8e9a7243c 100644 --- a/packages/import/package.json +++ b/packages/import/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "change-case": "^5.4.4", - "date-fns-tz": "^3.1.3", + "date-fns-tz": "^3.2.0", "uuid": "^10.0.0" } } diff --git a/packages/kv/package.json b/packages/kv/package.json index c411576fe8..c4db74ba8a 100644 --- a/packages/kv/package.json +++ b/packages/kv/package.json @@ -10,7 +10,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@upstash/redis": "^1.34.0", + "@upstash/redis": "^1.34.2", "server-only": "^0.0.1" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index f63aaf23df..438b48e898 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -13,13 +13,13 @@ "build": "storybook build" }, "devDependencies": { - "@storybook/addon-essentials": "^8.3.1", - "@storybook/addon-links": "^8.3.1", - "@storybook/react-vite": "^8.3.1", + "@storybook/addon-essentials": "^8.3.5", + "@storybook/addon-links": "^8.3.5", + "@storybook/react-vite": "^8.3.5", "autoprefixer": "^10.4.20", "react": "18.3.1", "react-dom": "18.3.1", - "storybook": "^8.3.1", + "storybook": "^8.3.5", "typescript": "^5.6.2" }, "exports": { @@ -79,33 +79,33 @@ "./hooks": "./src/hooks/index.ts" }, "dependencies": { - "@mui/icons-material": "^6.1.0", - "@radix-ui/react-accordion": "^1.2.0", - "@radix-ui/react-alert-dialog": "^1.1.1", - "@radix-ui/react-avatar": "^1.1.0", - "@radix-ui/react-checkbox": "^1.1.1", - "@radix-ui/react-collapsible": "^1.1.0", - "@radix-ui/react-context-menu": "^2.2.1", - "@radix-ui/react-dialog": "^1.1.1", - "@radix-ui/react-dropdown-menu": "^2.1.1", - "@radix-ui/react-hover-card": "^1.1.1", + "@mui/icons-material": "^6.1.2", + "@radix-ui/react-accordion": "^1.2.1", + "@radix-ui/react-alert-dialog": "^1.1.2", + "@radix-ui/react-avatar": "^1.1.1", + "@radix-ui/react-checkbox": "^1.1.2", + "@radix-ui/react-collapsible": "^1.1.1", + "@radix-ui/react-context-menu": "^2.2.2", + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", + "@radix-ui/react-hover-card": "^1.1.2", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-navigation-menu": "^1.2.0", - "@radix-ui/react-popover": "^1.1.1", + "@radix-ui/react-navigation-menu": "^1.2.1", + "@radix-ui/react-popover": "^1.1.2", "@radix-ui/react-progress": "^1.1.0", - "@radix-ui/react-radio-group": "^1.2.0", - "@radix-ui/react-scroll-area": "^1.1.0", - "@radix-ui/react-select": "^2.1.1", + "@radix-ui/react-radio-group": "^1.2.1", + "@radix-ui/react-scroll-area": "^1.2.0", + "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.0", - "@radix-ui/react-tabs": "^1.1.0", - "@radix-ui/react-toast": "^1.2.1", - "@radix-ui/react-tooltip": "^1.1.2", + "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-tabs": "^1.1.1", + "@radix-ui/react-toast": "^1.2.2", + "@radix-ui/react-tooltip": "^1.1.3", "@storybook/addon-styling": "^1.3.7", - "@storybook/addon-themes": "^8.3.1", - "@storybook/manager-api": "^8.3.1", + "@storybook/addon-themes": "^8.3.5", + "@storybook/manager-api": "^8.3.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "0.2.1", @@ -113,16 +113,16 @@ "embla-carousel-react": "^8.3.0", "input-otp": "^1.2.4", "jsonfile": "^6.1.0", - "lucide-react": "^0.441.0", + "lucide-react": "^0.447.0", "postcss": "^8.4.47", "react-day-picker": "8.10.1", "react-icons": "^5.3.0", "react-number-format": "^5.4.2", "recharts": "^2.12.7", "storybook-dark-mode": "^4.0.2", - "tailwind-merge": "2.4.0", - "tailwindcss": "^3.4.12", + "tailwind-merge": "2.5.3", + "tailwindcss": "^3.4.13", "tailwindcss-animate": "^1.0.7", - "vaul": "^0.9.3" + "vaul": "^1.0.0" } }