From 9ecf11272b8230045329f3c71fc928be81e24d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Thu, 29 Jan 2026 23:48:28 -0300 Subject: [PATCH 01/27] feat(subscriptions): enhance subscription management and webhook handling --- ...260130024720_alter_subscriptions_table.sql | 4 + .../meta/20260130024720_snapshot.json | 1603 +++++++++++++++++ .../src/db/migrations/meta/_journal.json | 7 + .../repositories/subscription-repository.ts | 29 + apps/backend/src/db/schema/index.ts | 7 + .../subscriptions/cancel-subscription.ts | 7 +- .../subscriptions/complete-subscription.ts | 18 +- .../handle-subscription-webhook.ts | 50 + .../schedule-subscription-cancellation.ts | 23 +- .../controllers/stripe-webhook-controller.ts | 21 +- 10 files changed, 1750 insertions(+), 19 deletions(-) create mode 100644 apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql create mode 100644 apps/backend/src/db/migrations/meta/20260130024720_snapshot.json create mode 100644 apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts diff --git a/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql b/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql new file mode 100644 index 00000000..50ef9f71 --- /dev/null +++ b/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql @@ -0,0 +1,4 @@ +CREATE TYPE "public"."subscription_provider" AS ENUM('STRIPE', 'APPLE');--> statement-breakpoint +ALTER TABLE "subscriptions" ADD COLUMN "subscription_provider" "subscription_provider" NOT NULL;--> statement-breakpoint +ALTER TABLE "subscriptions" ADD COLUMN "provider_subscription_id" varchar;--> statement-breakpoint +ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_provider_subscription_id_unique" UNIQUE("provider_subscription_id"); \ No newline at end of file diff --git a/apps/backend/src/db/migrations/meta/20260130024720_snapshot.json b/apps/backend/src/db/migrations/meta/20260130024720_snapshot.json new file mode 100644 index 00000000..96b8d4bf --- /dev/null +++ b/apps/backend/src/db/migrations/meta/20260130024720_snapshot.json @@ -0,0 +1,1603 @@ +{ + "id": "faacd4f0-6266-42dd-834b-b7fc4da105b3", + "prevId": "d8206ef4-3adb-4b26-8e63-dfc5c96b5555", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.followers": { + "name": "followers", + "schema": "", + "columns": { + "follower_id": { + "name": "follower_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "followed_id": { + "name": "followed_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "followers_follower_id_users_id_fk": { + "name": "followers_follower_id_users_id_fk", + "tableFrom": "followers", + "tableTo": "users", + "columnsFrom": [ + "follower_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "followers_followed_id_users_id_fk": { + "name": "followers_followed_id_users_id_fk", + "tableFrom": "followers", + "tableTo": "users", + "columnsFrom": [ + "followed_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "followers_followed_id_follower_id_pk": { + "name": "followers_followed_id_follower_id_pk", + "columns": [ + "followed_id", + "follower_id" + ] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.import_movies": { + "name": "import_movies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "import_id": { + "name": "import_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "end_date": { + "name": "end_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "item_status": { + "name": "item_status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "import_status": { + "name": "import_status", + "type": "import_item_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "TMDB_ID": { + "name": "TMDB_ID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "__metadata": { + "name": "__metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "import_movies_import_id_user_imports_id_fk": { + "name": "import_movies_import_id_user_imports_id_fk", + "tableFrom": "import_movies", + "tableTo": "user_imports", + "columnsFrom": [ + "import_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.import_series": { + "name": "import_series", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "import_id": { + "name": "import_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "start_date": { + "name": "start_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "end_date": { + "name": "end_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "item_status": { + "name": "item_status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "import_status": { + "name": "import_status", + "type": "import_item_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "TMDB_ID": { + "name": "TMDB_ID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "watched_episodes": { + "name": "watched_episodes", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "series_episodes": { + "name": "series_episodes", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "__metadata": { + "name": "__metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "import_series_import_id_user_imports_id_fk": { + "name": "import_series_import_id_user_imports_id_fk", + "tableFrom": "import_series", + "tableTo": "user_imports", + "columnsFrom": [ + "import_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.likes": { + "name": "likes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "entity_id": { + "name": "entity_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "entity_type": { + "name": "entity_type", + "type": "like_entity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "idx_entity_id": { + "name": "idx_entity_id", + "columns": [ + { + "expression": "entity_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "likes_user_id_users_id_fk": { + "name": "likes_user_id_users_id_fk", + "tableFrom": "likes", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.list_items": { + "name": "list_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "list_id": { + "name": "list_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "media_type": { + "name": "media_type", + "type": "media_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "list_items_list_id_lists_id_fk": { + "name": "list_items_list_id_lists_id_fk", + "tableFrom": "list_items", + "tableTo": "lists", + "columnsFrom": [ + "list_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "list_items_id_list_id_pk": { + "name": "list_items_id_list_id_pk", + "columns": [ + "id", + "list_id" + ] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lists": { + "name": "lists", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "banner_url": { + "name": "banner_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "visibility": { + "name": "visibility", + "type": "list_visibility", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "user_id_idx": { + "name": "user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "lists_user_id_users_id_fk": { + "name": "lists_user_id_users_id_fk", + "tableFrom": "lists", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.magic_tokens": { + "name": "magic_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "used": { + "name": "used", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "token_user_id_idx": { + "name": "token_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "token_idx": { + "name": "token_idx", + "columns": [ + { + "expression": "token", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "magic_tokens_user_id_users_id_fk": { + "name": "magic_tokens_user_id_users_id_fk", + "tableFrom": "magic_tokens", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.review_replies": { + "name": "review_replies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "reply": { + "name": "reply", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "review_id": { + "name": "review_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "review_replies_user_id_users_id_fk": { + "name": "review_replies_user_id_users_id_fk", + "tableFrom": "review_replies", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "review_replies_review_id_reviews_id_fk": { + "name": "review_replies_review_id_reviews_id_fk", + "tableFrom": "review_replies", + "tableTo": "reviews", + "columnsFrom": [ + "review_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.reviews": { + "name": "reviews", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "media_type": { + "name": "media_type", + "type": "media_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "review": { + "name": "review", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "rating": { + "name": "rating", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "has_spoilers": { + "name": "has_spoilers", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "language": { + "name": "language", + "type": "languages", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "season_number": { + "name": "season_number", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "episode_number": { + "name": "episode_number", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "reviews_user_id_users_id_fk": { + "name": "reviews_user_id_users_id_fk", + "tableFrom": "reviews", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.social_links": { + "name": "social_links", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "platform": { + "name": "platform", + "type": "social_platforms", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "social_links_user_id_users_id_fk": { + "name": "social_links_user_id_users_id_fk", + "tableFrom": "social_links", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_platform_unique": { + "name": "user_platform_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "platform" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.subscriptions": { + "name": "subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "subscription_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "subscription_provider": { + "name": "subscription_provider", + "type": "subscription_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "subscription_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'ACTIVE'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "canceled_at": { + "name": "canceled_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "cancellation_reason": { + "name": "cancellation_reason", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "provider_subscription_id": { + "name": "provider_subscription_id", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "active_subscription_idx": { + "name": "active_subscription_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "where": "\"subscriptions\".\"status\" = $1", + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "subscriptions_user_id_users_id_fk": { + "name": "subscriptions_user_id_users_id_fk", + "tableFrom": "subscriptions", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "subscriptions_provider_subscription_id_unique": { + "name": "subscriptions_provider_subscription_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_subscription_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_activities": { + "name": "user_activities", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "activity_type": { + "name": "activity_type", + "type": "activity_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "entity_id": { + "name": "entity_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "entity_type": { + "name": "entity_type", + "type": "like_entity", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "user_activity_idx": { + "name": "user_activity_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_activities_user_id_users_id_fk": { + "name": "user_activities_user_id_users_id_fk", + "tableFrom": "user_activities", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_episodes": { + "name": "user_episodes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "season_number": { + "name": "season_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "episode_number": { + "name": "episode_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "watched_at": { + "name": "watched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "runtime": { + "name": "runtime", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + } + }, + "indexes": {}, + "foreignKeys": { + "user_episodes_user_id_users_id_fk": { + "name": "user_episodes_user_id_users_id_fk", + "tableFrom": "user_episodes", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_episode_unique": { + "name": "user_episode_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "tmdb_id", + "season_number", + "episode_number" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_imports": { + "name": "user_imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "items_count": { + "name": "items_count", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "import_status": { + "name": "import_status", + "type": "import_status_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "providers_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "user_imports_user_id_users_id_fk": { + "name": "user_imports_user_id_users_id_fk", + "tableFrom": "user_imports", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_items": { + "name": "user_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "media_type": { + "name": "media_type", + "type": "media_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "added_at": { + "name": "added_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "user_items_user_id_users_id_fk": { + "name": "user_items_user_id_users_id_fk", + "tableFrom": "user_items", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_items_userid_tmdbid_media_type_unique": { + "name": "user_items_userid_tmdbid_media_type_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "tmdb_id", + "media_type" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "banner_url": { + "name": "banner_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "avatar_url": { + "name": "avatar_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "is_legacy": { + "name": "is_legacy", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "biography": { + "name": "biography", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "username_lower_idx": { + "name": "username_lower_idx", + "columns": [ + { + "expression": "LOWER(\"username\")", + "asc": true, + "isExpression": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "email_lower_idx": { + "name": "email_lower_idx", + "columns": [ + { + "expression": "LOWER(\"email\")", + "asc": true, + "isExpression": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_username_unique": { + "name": "users_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + }, + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_preferences": { + "name": "user_preferences", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "watch_providers_ids": { + "name": "watch_providers_ids", + "type": "integer[]", + "primaryKey": false, + "notNull": false + }, + "watch_region": { + "name": "watch_region", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_preferences_user_id_users_id_fk": { + "name": "user_preferences_user_id_users_id_fk", + "tableFrom": "user_preferences", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_preferences_user_id_unique": { + "name": "user_preferences_user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.activity_type": { + "name": "activity_type", + "schema": "public", + "values": [ + "CREATE_LIST", + "ADD_ITEM", + "DELETE_ITEM", + "LIKE_REVIEW", + "LIKE_REPLY", + "LIKE_LIST", + "CREATE_REVIEW", + "CREATE_REPLY", + "FOLLOW_USER", + "WATCH_EPISODE", + "CHANGE_STATUS", + "CREATE_ACCOUNT" + ] + }, + "public.import_item_status": { + "name": "import_item_status", + "schema": "public", + "values": [ + "COMPLETED", + "FAILED", + "NOT_STARTED" + ] + }, + "public.import_status_enum": { + "name": "import_status_enum", + "schema": "public", + "values": [ + "PARTIAL", + "COMPLETED", + "FAILED", + "NOT_STARTED" + ] + }, + "public.languages": { + "name": "languages", + "schema": "public", + "values": [ + "en-US", + "es-ES", + "fr-FR", + "it-IT", + "de-DE", + "pt-BR", + "ja-JP" + ] + }, + "public.like_entity": { + "name": "like_entity", + "schema": "public", + "values": [ + "REVIEW", + "REPLY", + "LIST" + ] + }, + "public.list_visibility": { + "name": "list_visibility", + "schema": "public", + "values": [ + "PUBLIC", + "NETWORK", + "PRIVATE" + ] + }, + "public.media_type": { + "name": "media_type", + "schema": "public", + "values": [ + "TV_SHOW", + "MOVIE" + ] + }, + "public.providers_enum": { + "name": "providers_enum", + "schema": "public", + "values": [ + "MY_ANIME_LIST", + "LETTERBOXD" + ] + }, + "public.social_platforms": { + "name": "social_platforms", + "schema": "public", + "values": [ + "INSTAGRAM", + "TIKTOK", + "YOUTUBE", + "X" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "WATCHLIST", + "WATCHED", + "WATCHING", + "DROPPED" + ] + }, + "public.subscription_provider": { + "name": "subscription_provider", + "schema": "public", + "values": [ + "STRIPE", + "APPLE" + ] + }, + "public.subscription_status": { + "name": "subscription_status", + "schema": "public", + "values": [ + "ACTIVE", + "CANCELED", + "EXPIRED", + "PENDING_CANCELLATION" + ] + }, + "public.subscription_type": { + "name": "subscription_type", + "schema": "public", + "values": [ + "MEMBER", + "PRO" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/backend/src/db/migrations/meta/_journal.json b/apps/backend/src/db/migrations/meta/_journal.json index 8692f823..f02f4d31 100644 --- a/apps/backend/src/db/migrations/meta/_journal.json +++ b/apps/backend/src/db/migrations/meta/_journal.json @@ -379,6 +379,13 @@ "when": 1743464364062, "tag": "20250331233924_alter_subscription_table", "breakpoints": true + }, + { + "idx": 54, + "version": "7", + "when": 1769741240595, + "tag": "20260130024720_alter_subscriptions_table", + "breakpoints": true } ] } \ No newline at end of file diff --git a/apps/backend/src/db/repositories/subscription-repository.ts b/apps/backend/src/db/repositories/subscription-repository.ts index 771b6444..5b9bab65 100644 --- a/apps/backend/src/db/repositories/subscription-repository.ts +++ b/apps/backend/src/db/repositories/subscription-repository.ts @@ -22,6 +22,35 @@ export async function getSubscriptionById(id: string) { }) } +export async function getSubscriptionById(subscriptionId: string) { + return db.query.subscriptions.findFirst({ + where: eq(schema.subscriptions.subscriptionId, subscriptionId), + }) +} + +export type UpdateSubscriptionStatusByIdParams = { + status: 'ACTIVE' | 'CANCELED' | 'PENDING_CANCELLATION' + canceledAt: Date | null + cancellationReason: string | null +} + +export async function updateSubscriptionStatusById( + subscriptionId: string, + params: UpdateSubscriptionStatusByIdParams +) { + const [subscription] = await db + .update(schema.subscriptions) + .set({ + status: params.status, + canceledAt: params.canceledAt, + cancellationReason: params.cancellationReason, + }) + .where(eq(schema.subscriptions.subscriptionId, subscriptionId)) + .returning() + + return subscription +} + export type CancelSubscriptionParams = { id: string userId: string diff --git a/apps/backend/src/db/schema/index.ts b/apps/backend/src/db/schema/index.ts index 9f14c918..21945cf1 100644 --- a/apps/backend/src/db/schema/index.ts +++ b/apps/backend/src/db/schema/index.ts @@ -538,6 +538,11 @@ export const userActivitiesRelations = relations(userActivities, ({ one }) => ({ }), })) +export const subscriptionProviderEnum = pgEnum('subscription_provider', [ + 'STRIPE', + 'APPLE', +]) + export const subscriptions = pgTable( 'subscriptions', { @@ -548,10 +553,12 @@ export const subscriptions = pgTable( .references(() => users.id, { onDelete: 'cascade' }) .notNull(), type: subscriptionTypeEnum('type').notNull(), + provider: subscriptionProviderEnum('subscription_provider').notNull(), status: subscriptionStatusEnum('status').default('ACTIVE').notNull(), createdAt: timestamp('created_at').defaultNow().notNull(), canceledAt: timestamp('canceled_at'), cancellationReason: varchar('cancellation_reason'), + providerSubscriptionId: varchar('provider_subscription_id').unique(), }, table => ({ activeSubscriptionIdx: uniqueIndex('active_subscription_idx') diff --git a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts index 67d8e452..dff447ea 100644 --- a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts +++ b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts @@ -4,11 +4,14 @@ import type { Subscription } from '@/domain/entities/subscription' import { DomainError } from '@/domain/errors/domain-error' export async function cancelSubscription( - { id, userId }: Subscription, + { id, userId, subscriptionId }: Subscription, reason: string | undefined ) { + const subscriptionIdToCancel = subscriptionId ?? id try { - const subscription = await stripe.subscriptions.cancel(id) + const subscription = await stripe.subscriptions.cancel( + subscriptionIdToCancel + ) if (!subscription || subscription.status !== 'canceled') { throw new DomainError('Failed to cancel subscription', 500) diff --git a/apps/backend/src/domain/services/subscriptions/complete-subscription.ts b/apps/backend/src/domain/services/subscriptions/complete-subscription.ts index 192480cc..b26a538c 100644 --- a/apps/backend/src/domain/services/subscriptions/complete-subscription.ts +++ b/apps/backend/src/domain/services/subscriptions/complete-subscription.ts @@ -1,9 +1,12 @@ +import type Stripe from 'stripe' import { DomainError } from '@/domain/errors/domain-error' import { createSubscription } from '../subscriptions/create-subscription' import { getUserByEmailService } from '../users/get-user-by-email' import { getLastestActiveSubscription } from './get-subscription' -export async function completeSubscription(email: string | null) { +export async function completeSubscription(session: Stripe.Checkout.Session) { + const email = + typeof session.customer_email === 'string' ? session.customer_email : null if (!email) return const result = await getUserByEmailService(email) @@ -11,15 +14,20 @@ export async function completeSubscription(email: string | null) { return result } - const subscription = await getLastestActiveSubscription(result.user.id) - - if (subscription) { - return { subscription } + const existing = await getLastestActiveSubscription(result.user.id) + if (existing) { + return { subscription: existing } } + const stripeSubscriptionId = + typeof session.subscription === 'string' + ? session.subscription + : session.subscription?.id ?? null + const createSubscriptionResult = await createSubscription({ type: 'PRO', userId: result.user.id, + stripeSubscriptionId, }) if (createSubscriptionResult instanceof DomainError) { diff --git a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts new file mode 100644 index 00000000..c8c24a81 --- /dev/null +++ b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts @@ -0,0 +1,50 @@ +import type Stripe from 'stripe' +import { + getSubscriptionByStripeSubscriptionId, + updateSubscriptionStatusByStripeId, +} from '@/db/repositories/subscription-repository' + +/** + * Handles customer.subscription.deleted webhook. + * Payload: event.data.object is a Stripe Subscription with id (sub_xxx), status 'canceled', canceled_at (unix). + */ +export async function handleSubscriptionDeleted( + stripeSubscription: Stripe.Subscription +) { + const row = await getSubscriptionByStripeSubscriptionId(stripeSubscription.id) + if (!row) return + + await updateSubscriptionStatusByStripeId(stripeSubscription.id, { + status: 'CANCELED', + canceledAt: stripeSubscription.canceled_at + ? new Date(stripeSubscription.canceled_at * 1000) + : new Date(), + cancellationReason: null, + }) +} + +/** + * Handles customer.subscription.updated webhook. + * Payload: event.data.object is a Stripe Subscription with cancel_at_period_end, cancel_at (unix). + * When cancel_at_period_end is true → PENDING_CANCELLATION; when false (reactivation) → ACTIVE. + */ +export async function handleSubscriptionUpdated( + stripeSubscription: Stripe.Subscription +) { + const row = await getSubscriptionByStripeSubscriptionId(stripeSubscription.id) + if (!row) return + + if (stripeSubscription.cancel_at_period_end && stripeSubscription.cancel_at) { + await updateSubscriptionStatusByStripeId(stripeSubscription.id, { + status: 'PENDING_CANCELLATION', + canceledAt: new Date(stripeSubscription.cancel_at * 1000), + cancellationReason: null, + }) + } else { + await updateSubscriptionStatusByStripeId(stripeSubscription.id, { + status: 'ACTIVE', + canceledAt: null, + cancellationReason: null, + }) + } +} diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts index ea2f106d..804947c1 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts @@ -4,15 +4,17 @@ import type { Subscription } from '@/domain/entities/subscription' import { DomainError } from '@/domain/errors/domain-error' export async function scheduleCancellation( - { id: subscriptionId, userId }: Subscription, + { id: subscriptionId, userId, providerSubscriptionId }: Subscription, paymentDay: number, reason: string | undefined ) { + const providerSubscriptionIdToUpdate = + providerSubscriptionId ?? subscriptionId try { const expirationDate = await calculateSubscriptionExpiration(paymentDay) - const subscription = await updateSubscription( - subscriptionId, + const subscription = await updateStripeSubscription( + providerSubscriptionIdToUpdate, expirationDate.getTime(), true ) @@ -38,15 +40,18 @@ export async function scheduleCancellation( } } -async function updateSubscription( - subscriptionId: string, +async function updateStripeSubscription( + providerSubscriptionId: string, date: number | null, cancelAtPeriodEnd: boolean ) { - const subscription = await stripe.subscriptions.update(subscriptionId, { - cancel_at: date, - cancel_at_period_end: cancelAtPeriodEnd, - }) + const subscription = await stripe.subscriptions.update( + providerSubscriptionId, + { + cancel_at: date, + cancel_at_period_end: cancelAtPeriodEnd, + } + ) return subscription } diff --git a/apps/backend/src/http/controllers/stripe-webhook-controller.ts b/apps/backend/src/http/controllers/stripe-webhook-controller.ts index ef7fcb55..889f74e5 100644 --- a/apps/backend/src/http/controllers/stripe-webhook-controller.ts +++ b/apps/backend/src/http/controllers/stripe-webhook-controller.ts @@ -3,6 +3,10 @@ import type Stripe from 'stripe' import { stripe } from '@/adapters/stripe' import { config } from '@/config' import { completeSubscription } from '@/domain/services/subscriptions/complete-subscription' +import { + handleSubscriptionDeleted, + handleSubscriptionUpdated, +} from '@/domain/services/subscriptions/handle-subscription-webhook' export async function stripeWebhookController( request: FastifyRequest, @@ -26,10 +30,21 @@ export async function stripeWebhookController( } switch (event.type) { - case 'checkout.session.completed': - await completeSubscription(event.data.object.customer_email) + case 'checkout.session.completed': { + const session = event.data.object as Stripe.Checkout.Session + await completeSubscription(session) break - + } + case 'customer.subscription.deleted': { + const subscription = event.data.object as Stripe.Subscription + await handleSubscriptionDeleted(subscription) + break + } + case 'customer.subscription.updated': { + const subscription = event.data.object as Stripe.Subscription + await handleSubscriptionUpdated(subscription) + break + } default: console.error(`Unhandled event type ${event.type}`) } From bf88801f07e726a2448715aea0437dce2e217902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Thu, 29 Jan 2026 23:49:27 -0300 Subject: [PATCH 02/27] refactor(subscriptions): update subscription retrieval and cancellation logic to include providerSubscriptionId --- .../repositories/subscription-repository.ts | 23 +++++++++++-------- .../subscriptions/cancel-subscription.ts | 6 ++--- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/apps/backend/src/db/repositories/subscription-repository.ts b/apps/backend/src/db/repositories/subscription-repository.ts index 5b9bab65..eb209b17 100644 --- a/apps/backend/src/db/repositories/subscription-repository.ts +++ b/apps/backend/src/db/repositories/subscription-repository.ts @@ -16,15 +16,15 @@ export async function getActiveSubscriptionByUserId(userId: string) { }) } -export async function getSubscriptionById(id: string) { - return db.query.subscriptions.findFirst({ - where: eq(schema.subscriptions.id, id), - }) -} - -export async function getSubscriptionById(subscriptionId: string) { +export async function getSubscriptionById( + id: string, + providerSubscriptionId: string +) { return db.query.subscriptions.findFirst({ - where: eq(schema.subscriptions.subscriptionId, subscriptionId), + where: and( + eq(schema.subscriptions.id, id), + eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId) + ), }) } @@ -45,7 +45,12 @@ export async function updateSubscriptionStatusById( canceledAt: params.canceledAt, cancellationReason: params.cancellationReason, }) - .where(eq(schema.subscriptions.subscriptionId, subscriptionId)) + .where( + and( + eq(schema.subscriptions.id, subscriptionId), + eq(schema.subscriptions.providerSubscriptionId, subscriptionId) + ) + ) .returning() return subscription diff --git a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts index dff447ea..0e957cc3 100644 --- a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts +++ b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts @@ -4,13 +4,13 @@ import type { Subscription } from '@/domain/entities/subscription' import { DomainError } from '@/domain/errors/domain-error' export async function cancelSubscription( - { id, userId, subscriptionId }: Subscription, + { id, userId, providerSubscriptionId }: Subscription, reason: string | undefined ) { - const subscriptionIdToCancel = subscriptionId ?? id + const providerSubscriptionIdToCancel = providerSubscriptionId ?? id try { const subscription = await stripe.subscriptions.cancel( - subscriptionIdToCancel + providerSubscriptionIdToCancel ) if (!subscription || subscription.status !== 'canceled') { From 0983d920f34d6656ed26d7eeb95b57f5f103b6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 00:18:52 -0300 Subject: [PATCH 03/27] refactor(subscriptions): standardize subscription handling with providerSubscriptionId and enhance webhook integration --- .../repositories/subscription-repository.ts | 40 ++++++------------- .../complete-subscription.spec.ts | 15 ++++++- .../subscriptions/complete-subscription.ts | 24 +++++------ .../subscriptions/create-subscription.spec.ts | 23 +++++++++-- .../subscriptions/get-subscription.spec.ts | 4 ++ .../handle-subscription-webhook.ts | 14 +++---- .../domain/services/users/get-by-id.spec.ts | 7 +++- .../controllers/stripe-webhook-controller.ts | 25 +++++++++++- .../src/test/factories/make-subscription.ts | 1 + 9 files changed, 99 insertions(+), 54 deletions(-) diff --git a/apps/backend/src/db/repositories/subscription-repository.ts b/apps/backend/src/db/repositories/subscription-repository.ts index eb209b17..1a1a1d24 100644 --- a/apps/backend/src/db/repositories/subscription-repository.ts +++ b/apps/backend/src/db/repositories/subscription-repository.ts @@ -16,27 +16,29 @@ export async function getActiveSubscriptionByUserId(userId: string) { }) } -export async function getSubscriptionById( - id: string, +export async function getSubscriptionById(id: string) { + return db.query.subscriptions.findFirst({ + where: eq(schema.subscriptions.id, id), + }) +} + +export async function getSubscriptionByProviderSubscriptionId( providerSubscriptionId: string ) { return db.query.subscriptions.findFirst({ - where: and( - eq(schema.subscriptions.id, id), - eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId) - ), + where: eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId), }) } -export type UpdateSubscriptionStatusByIdParams = { +export type UpdateSubscriptionStatusByProviderSubscriptionIdParams = { status: 'ACTIVE' | 'CANCELED' | 'PENDING_CANCELLATION' canceledAt: Date | null cancellationReason: string | null } -export async function updateSubscriptionStatusById( - subscriptionId: string, - params: UpdateSubscriptionStatusByIdParams +export async function updateSubscriptionStatusByProviderSubscriptionId( + providerSubscriptionId: string, + params: UpdateSubscriptionStatusByProviderSubscriptionIdParams ) { const [subscription] = await db .update(schema.subscriptions) @@ -45,12 +47,7 @@ export async function updateSubscriptionStatusById( canceledAt: params.canceledAt, cancellationReason: params.cancellationReason, }) - .where( - and( - eq(schema.subscriptions.id, subscriptionId), - eq(schema.subscriptions.providerSubscriptionId, subscriptionId) - ) - ) + .where(eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId)) .returning() return subscription @@ -83,17 +80,6 @@ export async function cancelUserSubscription(params: CancelSubscriptionParams) { return subscription } -export async function updateSubscription( - userId: string, - type: 'PRO' | 'MEMBER' -) { - return db - .update(schema.subscriptions) - .set({ type }) - .where(eq(schema.subscriptions.userId, userId)) - .returning() -} - export async function getLastestActiveSubscription(userId: string) { const [subscription] = await db .select() diff --git a/apps/backend/src/domain/services/subscriptions/complete-subscription.spec.ts b/apps/backend/src/domain/services/subscriptions/complete-subscription.spec.ts index 89216037..463b4b63 100644 --- a/apps/backend/src/domain/services/subscriptions/complete-subscription.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/complete-subscription.spec.ts @@ -1,3 +1,4 @@ +import { randomUUID } from 'node:crypto' import { describe, expect, it } from 'vitest' import { UserNotFoundError } from '@/domain/errors/user-not-found' import { makeUser } from '@/test/factories/make-user' @@ -6,7 +7,12 @@ import { completeSubscription } from './complete-subscription' describe('complete subscription', () => { it('should be able to complete subscription', async () => { const user = await makeUser() - const sut = await completeSubscription(user.email) + const sut = await completeSubscription({ + email: user.email, + provider: 'STRIPE', + providerSubscriptionId: randomUUID(), + type: 'PRO', + }) expect(sut).toEqual({ subscription: expect.objectContaining({ @@ -16,7 +22,12 @@ describe('complete subscription', () => { }) it('should not be able to complete subscription with user not found', async () => { - const sut = await completeSubscription('not-found@example.com') + const sut = await completeSubscription({ + email: 'not-found@example.com', + provider: 'STRIPE', + providerSubscriptionId: null, + type: 'PRO', + }) expect(sut).toBeInstanceOf(UserNotFoundError) }) diff --git a/apps/backend/src/domain/services/subscriptions/complete-subscription.ts b/apps/backend/src/domain/services/subscriptions/complete-subscription.ts index b26a538c..dea945c3 100644 --- a/apps/backend/src/domain/services/subscriptions/complete-subscription.ts +++ b/apps/backend/src/domain/services/subscriptions/complete-subscription.ts @@ -1,15 +1,17 @@ -import type Stripe from 'stripe' import { DomainError } from '@/domain/errors/domain-error' import { createSubscription } from '../subscriptions/create-subscription' import { getUserByEmailService } from '../users/get-user-by-email' import { getLastestActiveSubscription } from './get-subscription' -export async function completeSubscription(session: Stripe.Checkout.Session) { - const email = - typeof session.customer_email === 'string' ? session.customer_email : null - if (!email) return +export type CompleteSubscriptionParams = { + email: string + provider: 'STRIPE' | 'APPLE' + providerSubscriptionId: string | null + type: 'PRO' | 'MEMBER' +} - const result = await getUserByEmailService(email) +export async function completeSubscription(params: CompleteSubscriptionParams) { + const result = await getUserByEmailService(params.email) if (result instanceof DomainError) { return result } @@ -19,15 +21,11 @@ export async function completeSubscription(session: Stripe.Checkout.Session) { return { subscription: existing } } - const stripeSubscriptionId = - typeof session.subscription === 'string' - ? session.subscription - : session.subscription?.id ?? null - const createSubscriptionResult = await createSubscription({ - type: 'PRO', + type: params.type, userId: result.user.id, - stripeSubscriptionId, + provider: params.provider, + providerSubscriptionId: params.providerSubscriptionId, }) if (createSubscriptionResult instanceof DomainError) { diff --git a/apps/backend/src/domain/services/subscriptions/create-subscription.spec.ts b/apps/backend/src/domain/services/subscriptions/create-subscription.spec.ts index 5b83020f..7acb0037 100644 --- a/apps/backend/src/domain/services/subscriptions/create-subscription.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/create-subscription.spec.ts @@ -1,3 +1,4 @@ +import { randomUUID } from 'node:crypto' import { faker } from '@faker-js/faker' import { describe, expect, it } from 'vitest' import { AlreadyHaveActiveSubscriptionError } from '@/domain/errors/already-have-active-subscription' @@ -9,7 +10,12 @@ import { createSubscription } from './create-subscription' describe('create subscription', () => { it('should be able to create subscription', async () => { const user = await makeUser() - const sut = await createSubscription({ type: 'PRO', userId: user.id }) + const sut = await createSubscription({ + type: 'PRO', + userId: user.id, + provider: 'STRIPE', + providerSubscriptionId: randomUUID(), + }) expect(sut).toEqual({ subscription: expect.objectContaining({ @@ -20,9 +26,18 @@ describe('create subscription', () => { it('should not be able to generate a new subscription if user already has one', async () => { const user = await makeUser() - await makeSubscription({ userId: user.id }) + await makeSubscription({ + userId: user.id, + provider: 'STRIPE', + providerSubscriptionId: randomUUID(), + }) - const sut = await createSubscription({ type: 'PRO', userId: user.id }) + const sut = await createSubscription({ + type: 'PRO', + userId: user.id, + provider: 'STRIPE', + providerSubscriptionId: randomUUID(), + }) expect(sut).toBeInstanceOf(AlreadyHaveActiveSubscriptionError) }) @@ -31,6 +46,8 @@ describe('create subscription', () => { const sut = await createSubscription({ type: 'PRO', userId: faker.string.uuid(), + provider: 'STRIPE', + providerSubscriptionId: randomUUID(), }) expect(sut).toBeInstanceOf(UserNotFoundError) diff --git a/apps/backend/src/domain/services/subscriptions/get-subscription.spec.ts b/apps/backend/src/domain/services/subscriptions/get-subscription.spec.ts index ebdb7fe1..ab549dd1 100644 --- a/apps/backend/src/domain/services/subscriptions/get-subscription.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/get-subscription.spec.ts @@ -15,6 +15,7 @@ describe('get subscription', () => { const subscription = await createSubscription({ type: 'PRO', userId: user.id, + provider: 'STRIPE', }) expect(subscription).toEqual({ @@ -41,6 +42,7 @@ describe('get lastest active subscription', () => { await createSubscription({ type: 'PRO', userId: user.id, + provider: 'STRIPE', }) const lastestActiveSubscription = await getLastestActiveSubscription( @@ -61,6 +63,7 @@ describe('get lastest active subscription', () => { await createSubscription({ type: 'PRO', userId: user.id, + provider: 'STRIPE', status: 'PENDING_CANCELLATION', canceledAt: new Date(), cancellationReason: 'test', @@ -89,6 +92,7 @@ describe('get lastest active subscription', () => { await createSubscription({ type: 'PRO', userId: user.id, + provider: 'STRIPE', }) const subscription = await getLastestActiveSubscription(user.id) diff --git a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts index c8c24a81..0e3bdeda 100644 --- a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts +++ b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts @@ -1,7 +1,7 @@ import type Stripe from 'stripe' import { - getSubscriptionByStripeSubscriptionId, - updateSubscriptionStatusByStripeId, + getSubscriptionByProviderSubscriptionId, + updateSubscriptionStatusByProviderSubscriptionId, } from '@/db/repositories/subscription-repository' /** @@ -11,10 +11,10 @@ import { export async function handleSubscriptionDeleted( stripeSubscription: Stripe.Subscription ) { - const row = await getSubscriptionByStripeSubscriptionId(stripeSubscription.id) + const row = await getSubscriptionByProviderSubscriptionId(stripeSubscription.id) if (!row) return - await updateSubscriptionStatusByStripeId(stripeSubscription.id, { + await updateSubscriptionStatusByProviderSubscriptionId(stripeSubscription.id, { status: 'CANCELED', canceledAt: stripeSubscription.canceled_at ? new Date(stripeSubscription.canceled_at * 1000) @@ -31,17 +31,17 @@ export async function handleSubscriptionDeleted( export async function handleSubscriptionUpdated( stripeSubscription: Stripe.Subscription ) { - const row = await getSubscriptionByStripeSubscriptionId(stripeSubscription.id) + const row = await getSubscriptionByProviderSubscriptionId(stripeSubscription.id) if (!row) return if (stripeSubscription.cancel_at_period_end && stripeSubscription.cancel_at) { - await updateSubscriptionStatusByStripeId(stripeSubscription.id, { + await updateSubscriptionStatusByProviderSubscriptionId(stripeSubscription.id, { status: 'PENDING_CANCELLATION', canceledAt: new Date(stripeSubscription.cancel_at * 1000), cancellationReason: null, }) } else { - await updateSubscriptionStatusByStripeId(stripeSubscription.id, { + await updateSubscriptionStatusByProviderSubscriptionId(stripeSubscription.id, { status: 'ACTIVE', canceledAt: null, cancellationReason: null, diff --git a/apps/backend/src/domain/services/users/get-by-id.spec.ts b/apps/backend/src/domain/services/users/get-by-id.spec.ts index 2fc99f4b..acc8b62b 100644 --- a/apps/backend/src/domain/services/users/get-by-id.spec.ts +++ b/apps/backend/src/domain/services/users/get-by-id.spec.ts @@ -33,7 +33,12 @@ describe('get user by id', () => { expect(user.user.subscriptionType).toBe('MEMBER') - await completeSubscription(email) + await completeSubscription({ + email, + provider: 'STRIPE', + providerSubscriptionId: randomUUID(), + type: 'PRO', + }) const sut = await getUserById(id) diff --git a/apps/backend/src/http/controllers/stripe-webhook-controller.ts b/apps/backend/src/http/controllers/stripe-webhook-controller.ts index 889f74e5..d74ae81d 100644 --- a/apps/backend/src/http/controllers/stripe-webhook-controller.ts +++ b/apps/backend/src/http/controllers/stripe-webhook-controller.ts @@ -32,7 +32,15 @@ export async function stripeWebhookController( switch (event.type) { case 'checkout.session.completed': { const session = event.data.object as Stripe.Checkout.Session - await completeSubscription(session) + const params = parseCheckoutSessionCompleted(session) + if (params) { + await completeSubscription({ + email: params.email, + provider: 'STRIPE', + providerSubscriptionId: params.providerSubscriptionId, + type: 'PRO', + }) + } break } case 'customer.subscription.deleted': { @@ -51,3 +59,18 @@ export async function stripeWebhookController( return reply.status(200).send({ received: true }) } + +function parseCheckoutSessionCompleted( + object: Stripe.Checkout.Session +): { email: string; providerSubscriptionId: string | null } | null { + const email = + typeof object.customer_email === 'string' ? object.customer_email : null + if (!email) return null + + const providerSubscriptionId = + typeof object.subscription === 'string' + ? object.subscription + : (object.subscription?.id ?? null) + + return { email, providerSubscriptionId } +} diff --git a/apps/backend/src/test/factories/make-subscription.ts b/apps/backend/src/test/factories/make-subscription.ts index 08206cd1..1e7c9b43 100644 --- a/apps/backend/src/test/factories/make-subscription.ts +++ b/apps/backend/src/test/factories/make-subscription.ts @@ -14,6 +14,7 @@ export function makeRawSubscription( type: 'MEMBER', userId: faker.string.uuid(), status: 'ACTIVE', + provider: 'STRIPE', ...overrides, } } From 34b0898377ab59196cc9b2df911ca38ee249042c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 00:33:49 -0300 Subject: [PATCH 04/27] feat(subscriptions): implement StripeSubscriptionProvider for enhanced subscription management --- .../adapters/stripe-subscription-provider.ts | 30 +++++ .../subscriptions/cancel-subscription.spec.ts | 67 ++++++---- .../subscriptions/cancel-subscription.ts | 36 +++--- ...schedule-subscription-cancellation.spec.ts | 119 ++++++++---------- .../schedule-subscription-cancellation.ts | 58 +++------ .../controllers/subscriptions-controller.ts | 9 +- .../src/ports/subscription-provider.ts | 12 ++ 7 files changed, 175 insertions(+), 156 deletions(-) create mode 100644 apps/backend/src/adapters/stripe-subscription-provider.ts create mode 100644 apps/backend/src/ports/subscription-provider.ts diff --git a/apps/backend/src/adapters/stripe-subscription-provider.ts b/apps/backend/src/adapters/stripe-subscription-provider.ts new file mode 100644 index 00000000..31875497 --- /dev/null +++ b/apps/backend/src/adapters/stripe-subscription-provider.ts @@ -0,0 +1,30 @@ +import { stripe } from '@/adapters/stripe' +import type { SubscriptionProvider } from '@/ports/subscription-provider' + +async function getCurrentPeriodEnd(providerSubscriptionId: string) { + const retrieved = await stripe.subscriptions.retrieve(providerSubscriptionId) + const periodEndTimestamp = ( + retrieved as unknown as { current_period_end: number } + ).current_period_end + return new Date(periodEndTimestamp * 1000) +} + +async function scheduleCancelAtPeriodEnd( + providerSubscriptionId: string, + periodEnd: Date +) { + await stripe.subscriptions.update(providerSubscriptionId, { + cancel_at: Math.floor(periodEnd.getTime() / 1000), + cancel_at_period_end: true, + }) +} + +async function cancelImmediately(providerSubscriptionId: string) { + await stripe.subscriptions.cancel(providerSubscriptionId) +} + +export const StripeSubscriptionProvider: SubscriptionProvider = { + getCurrentPeriodEnd, + scheduleCancelAtPeriodEnd, + cancelImmediately, +} diff --git a/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts b/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts index 9b53cb76..bc71a532 100644 --- a/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts @@ -1,26 +1,34 @@ +import { randomUUID } from 'node:crypto' import { faker } from '@faker-js/faker' -import { describe, expect, it, type Mock } from 'vitest' -import { stripe } from '@/adapters/stripe' +import { describe, expect, it } from 'vitest' import { getSubscriptionById } from '@/db/repositories/subscription-repository' import { getUserById } from '@/db/repositories/user-repository' +import type { SubscriptionProvider } from '@/ports/subscription-provider' import { makeSubscription } from '@/test/factories/make-subscription' import { makeUser } from '@/test/factories/make-user' import { cancelSubscription } from './cancel-subscription' -vi.mock('@/adapters/stripe', () => ({ - stripe: { - subscriptions: { - cancel: vi.fn(), - }, - }, -})) +function uniqueProviderSubId() { + return `sub_${randomUUID().replace(/-/g, '')}` +} + +function mockSubscriptionProvider(): SubscriptionProvider { + return { + getCurrentPeriodEnd: vi.fn(), + scheduleCancelAtPeriodEnd: vi.fn(), + cancelImmediately: vi.fn().mockResolvedValue(undefined), + } +} describe('Cancel subscription', () => { it('should cancel the subscription', async () => { + const providerSubId = uniqueProviderSubId() const user = await makeUser() + const provider = mockSubscriptionProvider() const subscription = await makeSubscription({ userId: user.id, + providerSubscriptionId: providerSubId, }) expect(subscription).toMatchObject({ @@ -30,17 +38,11 @@ describe('Cancel subscription', () => { canceledAt: null, }) - const mockStripeResponse = { - id: subscription.id, - status: 'canceled', - } - ;(stripe.subscriptions.cancel as Mock).mockResolvedValue(mockStripeResponse) - const reason = faker.lorem.sentence(5) - await cancelSubscription(subscription, reason) + await cancelSubscription(subscription, reason, provider) - expect(stripe.subscriptions.cancel).toHaveBeenCalledWith(subscription.id) + expect(provider.cancelImmediately).toHaveBeenCalledWith(providerSubId) const updatedSubscription = await getSubscriptionById(subscription.id) @@ -53,23 +55,20 @@ describe('Cancel subscription', () => { }) it('should update user subscription status after cancel', async () => { + const providerSubId = uniqueProviderSubId() const user = await makeUser() + const provider = mockSubscriptionProvider() const subscription = await makeSubscription({ userId: user.id, + providerSubscriptionId: providerSubId, }) - const mockStripeResponse = { - id: subscription.id, - status: 'canceled', - } - ;(stripe.subscriptions.cancel as Mock).mockResolvedValue(mockStripeResponse) - const reason = faker.lorem.sentence(5) - await cancelSubscription(subscription, reason) + await cancelSubscription(subscription, reason, provider) - expect(stripe.subscriptions.cancel).toHaveBeenCalledWith(subscription.id) + expect(provider.cancelImmediately).toHaveBeenCalledWith(providerSubId) await getSubscriptionById(subscription.id) @@ -79,4 +78,22 @@ describe('Cancel subscription', () => { subscriptionType: 'MEMBER', }) }) + + it('should throw when subscription has no provider subscription id', async () => { + const user = await makeUser() + const provider = mockSubscriptionProvider() + + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: null, + }) + + await expect( + cancelSubscription(subscription, 'reason', provider) + ).rejects.toThrow( + 'Cannot cancel: subscription has no provider subscription id' + ) + + expect(provider.cancelImmediately).not.toHaveBeenCalled() + }) }) diff --git a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts index 0e957cc3..56e92e83 100644 --- a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts +++ b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts @@ -1,21 +1,22 @@ -import { stripe } from '@/adapters/stripe' import { cancelUserSubscription } from '@/db/repositories/subscription-repository' import type { Subscription } from '@/domain/entities/subscription' import { DomainError } from '@/domain/errors/domain-error' +import type { SubscriptionProvider } from '@/ports/subscription-provider' export async function cancelSubscription( { id, userId, providerSubscriptionId }: Subscription, - reason: string | undefined + reason: string | undefined, + provider: SubscriptionProvider ) { - const providerSubscriptionIdToCancel = providerSubscriptionId ?? id - try { - const subscription = await stripe.subscriptions.cancel( - providerSubscriptionIdToCancel + if (!providerSubscriptionId) { + throw new DomainError( + 'Cannot cancel: subscription has no provider subscription id', + 400 ) + } - if (!subscription || subscription.status !== 'canceled') { - throw new DomainError('Failed to cancel subscription', 500) - } + try { + await provider.cancelImmediately(providerSubscriptionId) await cancelUserSubscription({ id, @@ -25,17 +26,12 @@ export async function cancelSubscription( cancellationReason: reason, }) - return { - id, - } + return { id } } catch (error) { - if (error instanceof Error) { - throw new DomainError( - `Failed to cancel subscription, ${error.message}`, - 500 - ) - } - - throw new DomainError('Failed to cancel subscription', 500) + if (error instanceof DomainError) throw error + throw new DomainError( + `Failed to cancel subscription, ${error instanceof Error ? error.message : String(error)}`, + 500 + ) } } diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts index 5ff7448c..18dbf98b 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts @@ -1,36 +1,46 @@ -import { stripe } from '@/adapters/stripe' +import { randomUUID } from 'node:crypto' import { getSubscriptionById } from '@/db/repositories/subscription-repository' +import type { SubscriptionProvider } from '@/ports/subscription-provider' import { makeSubscription } from '@/test/factories/make-subscription' import { makeUser } from '@/test/factories/make-user' import { scheduleCancellation } from './schedule-subscription-cancellation' -vi.mock('@/adapters/stripe', () => ({ - stripe: { - subscriptions: { - update: vi.fn().mockResolvedValue({ - id: 'sub_123', - cancel_at_period_end: true, - status: 'active', - }), - }, - }, -})) +function uniqueProviderSubId() { + return `sub_${randomUUID().replace(/-/g, '')}` +} + +function mockSubscriptionProvider(periodEnd?: Date): SubscriptionProvider { + return { + getCurrentPeriodEnd: vi + .fn() + .mockResolvedValue(periodEnd ?? new Date(Date.now() + 86400 * 30 * 1000)), + scheduleCancelAtPeriodEnd: vi.fn().mockResolvedValue(undefined), + cancelImmediately: vi.fn(), + } +} describe('scheduleSubscriptionCancellation', () => { - it('should schedule subscription cancellation', async () => { + it('should schedule subscription cancellation at period end', async () => { + const providerSubId = uniqueProviderSubId() const user = await makeUser() - const subscription = await makeSubscription({ userId: user.id }) + const provider = mockSubscriptionProvider() + + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: providerSubId, + }) const scheduledCancellation = await scheduleCancellation( subscription, - 10, - 'test' + 'test', + provider + ) + + expect(provider.getCurrentPeriodEnd).toHaveBeenCalledWith(providerSubId) + expect(provider.scheduleCancelAtPeriodEnd).toHaveBeenCalledWith( + providerSubId, + expect.any(Date) ) - expect(stripe.subscriptions.update).toHaveBeenCalled() - expect(stripe.subscriptions.update).toHaveBeenCalledWith(subscription.id, { - cancel_at_period_end: true, - cancel_at: expect.any(Number), - }) expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') @@ -38,65 +48,46 @@ describe('scheduleSubscriptionCancellation', () => { expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') }) - it('should be able cancel after the payment day', async () => { - const paymentDay = 10 + it('should set canceledAt from provider getCurrentPeriodEnd', async () => { + const providerSubId = uniqueProviderSubId() + const periodEnd = new Date('2025-04-09T23:59:59.000Z') + const provider = mockSubscriptionProvider(periodEnd) const user = await makeUser() - - const subscription = await makeSubscription({ userId: user.id }) - - const fakeToday = new Date('2025-04-07T00:00:00.000Z') - - vi.setSystemTime(fakeToday) + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: providerSubId, + }) const scheduledCancellation = await scheduleCancellation( subscription, - paymentDay, - 'test' + 'test', + provider ) - expect(stripe.subscriptions.update).toHaveBeenCalled() - expect(stripe.subscriptions.update).toHaveBeenCalledWith(subscription.id, { - cancel_at_period_end: true, - cancel_at: expect.any(Number), - }) - expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') + expect(scheduledCancellation.canceledAt).toEqual(periodEnd) const subscriptionFromDb = await getSubscriptionById(subscription.id) - - expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') - expect(subscriptionFromDb?.canceledAt).toEqual(new Date(2025, 3, 9)) + expect(subscriptionFromDb?.canceledAt).toEqual(periodEnd) }) - it('should be able cancel before the payment day', async () => { - const paymentDay = 10 - + it('should throw when subscription has no provider subscription id', async () => { const user = await makeUser() + const provider = mockSubscriptionProvider() - const subscription = await makeSubscription({ userId: user.id }) - - const fakeToday = new Date('2025-04-11T00:00:00.000Z') - - vi.setSystemTime(fakeToday) - - const scheduledCancellation = await scheduleCancellation( - subscription, - paymentDay, - 'test' - ) - - expect(stripe.subscriptions.update).toHaveBeenCalled() - expect(stripe.subscriptions.update).toHaveBeenCalledWith(subscription.id, { - cancel_at_period_end: true, - cancel_at: expect.any(Number), + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: null, }) - expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') - - const subscriptionFromDb = await getSubscriptionById(subscription.id) + await expect( + scheduleCancellation(subscription, 'test', provider) + ).rejects.toThrow( + 'Cannot schedule cancellation: subscription has no provider subscription id' + ) - expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') - expect(subscriptionFromDb?.canceledAt).toEqual(new Date(2025, 4, 9)) + expect(provider.getCurrentPeriodEnd).not.toHaveBeenCalled() + expect(provider.scheduleCancelAtPeriodEnd).not.toHaveBeenCalled() }) }) diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts index 804947c1..dbd9892a 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts @@ -1,68 +1,38 @@ -import { stripe } from '@/adapters/stripe' import { cancelUserSubscription } from '@/db/repositories/subscription-repository' import type { Subscription } from '@/domain/entities/subscription' import { DomainError } from '@/domain/errors/domain-error' +import type { SubscriptionProvider } from '@/ports/subscription-provider' export async function scheduleCancellation( { id: subscriptionId, userId, providerSubscriptionId }: Subscription, - paymentDay: number, - reason: string | undefined + reason: string | undefined, + provider: SubscriptionProvider ) { - const providerSubscriptionIdToUpdate = - providerSubscriptionId ?? subscriptionId - try { - const expirationDate = await calculateSubscriptionExpiration(paymentDay) - - const subscription = await updateStripeSubscription( - providerSubscriptionIdToUpdate, - expirationDate.getTime(), - true + if (!providerSubscriptionId) { + throw new DomainError( + 'Cannot schedule cancellation: subscription has no provider subscription id', + 400 ) + } - if (!subscription) { - throw new DomainError('Failed to schedule subscription cancellation', 500) - } + try { + const canceledAt = await provider.getCurrentPeriodEnd(providerSubscriptionId) + await provider.scheduleCancelAtPeriodEnd(providerSubscriptionId, canceledAt) const scheduledCancellation = await cancelUserSubscription({ id: subscriptionId, userId, status: 'PENDING_CANCELLATION', - canceledAt: expirationDate, + canceledAt, cancellationReason: reason, }) return scheduledCancellation } catch (error) { - return new DomainError( + if (error instanceof DomainError) throw error + throw new DomainError( `Failed to schedule subscription cancellation, ${error instanceof Error ? error.message : String(error)}`, 500 ) } } - -async function updateStripeSubscription( - providerSubscriptionId: string, - date: number | null, - cancelAtPeriodEnd: boolean -) { - const subscription = await stripe.subscriptions.update( - providerSubscriptionId, - { - cancel_at: date, - cancel_at_period_end: cancelAtPeriodEnd, - } - ) - - return subscription -} - -async function calculateSubscriptionExpiration(paymentDay: number) { - const currentDate = new Date() - const currentDay = currentDate.getDate() - const currentMonth = - currentDay < paymentDay - ? currentDate.getMonth() - : currentDate.getMonth() + 1 - - return new Date(currentDate.getFullYear(), currentMonth, paymentDay - 1) -} diff --git a/apps/backend/src/http/controllers/subscriptions-controller.ts b/apps/backend/src/http/controllers/subscriptions-controller.ts index c635ad94..c3ba7340 100644 --- a/apps/backend/src/http/controllers/subscriptions-controller.ts +++ b/apps/backend/src/http/controllers/subscriptions-controller.ts @@ -1,9 +1,13 @@ import type { FastifyReply, FastifyRequest } from 'fastify' +import { StripeSubscriptionProvider } from '@/adapters/stripe-subscription-provider' import { DomainError } from '@/domain/errors/domain-error' import { cancelSubscription } from '@/domain/services/subscriptions/cancel-subscription' import { getSubscription } from '@/domain/services/subscriptions/get-subscription' import { scheduleCancellation } from '@/domain/services/subscriptions/schedule-subscription-cancellation' import { deleteSubscriptionBodySchema } from '../schemas/subscriptions' + +const subscriptionProvider = StripeSubscriptionProvider + export async function deleteSubscriptionController( request: FastifyRequest, reply: FastifyReply @@ -22,11 +26,10 @@ export async function deleteSubscriptionController( switch (when) { case 'now': - await cancelSubscription(subscription, reason) + await cancelSubscription(subscription, reason, subscriptionProvider) break case 'at_end_of_current_period': - // TODO: get the payment day from the subscription - await scheduleCancellation(subscription, 1, reason) + await scheduleCancellation(subscription, reason, subscriptionProvider) break default: return reply.status(400).send({ message: 'Invalid when parameter' }) diff --git a/apps/backend/src/ports/subscription-provider.ts b/apps/backend/src/ports/subscription-provider.ts new file mode 100644 index 00000000..a637285e --- /dev/null +++ b/apps/backend/src/ports/subscription-provider.ts @@ -0,0 +1,12 @@ +/** + * Port for payment/subscription provider operations (Stripe, Apple, etc.). + * Domain depends on this abstraction; infrastructure implements it. + */ +export interface SubscriptionProvider { + getCurrentPeriodEnd(providerSubscriptionId: string): Promise + scheduleCancelAtPeriodEnd( + providerSubscriptionId: string, + periodEnd: Date + ): Promise + cancelImmediately(providerSubscriptionId: string): Promise +} From bd71091bf93f6ee869404c5d93886dee79c109d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 00:39:45 -0300 Subject: [PATCH 05/27] refactor(subscriptions): enhance webhook handling by adding current_period_end to subscription payload and improving cancellation logic --- .../handle-subscription-webhook.ts | 72 ++++++++++++------- .../controllers/stripe-webhook-controller.ts | 1 + 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts index 0e3bdeda..d25c5b13 100644 --- a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts +++ b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts @@ -11,40 +11,64 @@ import { export async function handleSubscriptionDeleted( stripeSubscription: Stripe.Subscription ) { - const row = await getSubscriptionByProviderSubscriptionId(stripeSubscription.id) + const row = await getSubscriptionByProviderSubscriptionId( + stripeSubscription.id + ) if (!row) return - await updateSubscriptionStatusByProviderSubscriptionId(stripeSubscription.id, { - status: 'CANCELED', - canceledAt: stripeSubscription.canceled_at - ? new Date(stripeSubscription.canceled_at * 1000) - : new Date(), - cancellationReason: null, - }) + await updateSubscriptionStatusByProviderSubscriptionId( + stripeSubscription.id, + { + status: 'CANCELED', + canceledAt: stripeSubscription.canceled_at + ? new Date(stripeSubscription.canceled_at * 1000) + : new Date(), + cancellationReason: null, + } + ) +} + +type StripeSubscriptionPayload = Stripe.Subscription & { + current_period_end?: number } /** * Handles customer.subscription.updated webhook. - * Payload: event.data.object is a Stripe Subscription with cancel_at_period_end, cancel_at (unix). - * When cancel_at_period_end is true → PENDING_CANCELLATION; when false (reactivation) → ACTIVE. + * Payload: event.data.object is a Stripe Subscription with cancel_at_period_end, cancel_at (unix), current_period_end, status. + * When cancel_at_period_end is true → PENDING_CANCELLATION; when false and status is active → ACTIVE (reactivation). */ export async function handleSubscriptionUpdated( - stripeSubscription: Stripe.Subscription + stripeSubscription: StripeSubscriptionPayload ) { - const row = await getSubscriptionByProviderSubscriptionId(stripeSubscription.id) + const row = await getSubscriptionByProviderSubscriptionId( + stripeSubscription.id + ) if (!row) return - if (stripeSubscription.cancel_at_period_end && stripeSubscription.cancel_at) { - await updateSubscriptionStatusByProviderSubscriptionId(stripeSubscription.id, { - status: 'PENDING_CANCELLATION', - canceledAt: new Date(stripeSubscription.cancel_at * 1000), - cancellationReason: null, - }) - } else { - await updateSubscriptionStatusByProviderSubscriptionId(stripeSubscription.id, { - status: 'ACTIVE', - canceledAt: null, - cancellationReason: null, - }) + if (stripeSubscription.cancel_at_period_end) { + const canceledAtTimestamp = + stripeSubscription.cancel_at ?? + stripeSubscription.current_period_end ?? + Math.floor(Date.now() / 1000) + await updateSubscriptionStatusByProviderSubscriptionId( + stripeSubscription.id, + { + status: 'PENDING_CANCELLATION', + canceledAt: new Date(canceledAtTimestamp * 1000), + cancellationReason: null, + } + ) + return + } + + if (stripeSubscription.status === 'active') { + await updateSubscriptionStatusByProviderSubscriptionId( + stripeSubscription.id, + { + status: 'ACTIVE', + canceledAt: null, + cancellationReason: null, + } + ) } } diff --git a/apps/backend/src/http/controllers/stripe-webhook-controller.ts b/apps/backend/src/http/controllers/stripe-webhook-controller.ts index d74ae81d..5e58929e 100644 --- a/apps/backend/src/http/controllers/stripe-webhook-controller.ts +++ b/apps/backend/src/http/controllers/stripe-webhook-controller.ts @@ -32,6 +32,7 @@ export async function stripeWebhookController( switch (event.type) { case 'checkout.session.completed': { const session = event.data.object as Stripe.Checkout.Session + if (session.mode !== 'subscription') break const params = parseCheckoutSessionCompleted(session) if (params) { await completeSubscription({ From fa363e70f0a945f1118054640d59c8863375a6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 00:46:55 -0300 Subject: [PATCH 06/27] feat(subscriptions): add webhook secret handling and improve cancellation error management --- apps/backend/.env.example | 4 ++- .../adapters/stripe-subscription-provider.ts | 16 +++++++++- apps/backend/src/config.ts | 1 + .../subscription-already-canceled-error.ts | 7 +++++ .../subscriptions/cancel-subscription.spec.ts | 21 +++++++++++++ .../subscriptions/cancel-subscription.ts | 31 +++++++++++++------ .../controllers/stripe-webhook-controller.ts | 17 ++++++++-- 7 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 apps/backend/src/domain/errors/subscription-already-canceled-error.ts diff --git a/apps/backend/.env.example b/apps/backend/.env.example index 2cc6ee31..ebecd48f 100644 --- a/apps/backend/.env.example +++ b/apps/backend/.env.example @@ -9,8 +9,10 @@ CLIENT_URL=http://localhost:3000 # Database DATABASE_URL="postgresql://postgres:postgres@localhost:5432" -# Stripe +# Stripe STRIPE_SECRET_KEY="" +# Webhook signing secret (whsec_...) – use for constructEvent in production +STRIPE_WEBHOOK_SECRET="" # TMDB TMDB_ACCESS_TOKEN= diff --git a/apps/backend/src/adapters/stripe-subscription-provider.ts b/apps/backend/src/adapters/stripe-subscription-provider.ts index 31875497..b8f6813d 100644 --- a/apps/backend/src/adapters/stripe-subscription-provider.ts +++ b/apps/backend/src/adapters/stripe-subscription-provider.ts @@ -1,4 +1,5 @@ import { stripe } from '@/adapters/stripe' +import { SubscriptionAlreadyCanceledError } from '@/domain/errors/subscription-already-canceled-error' import type { SubscriptionProvider } from '@/ports/subscription-provider' async function getCurrentPeriodEnd(providerSubscriptionId: string) { @@ -20,7 +21,20 @@ async function scheduleCancelAtPeriodEnd( } async function cancelImmediately(providerSubscriptionId: string) { - await stripe.subscriptions.cancel(providerSubscriptionId) + try { + await stripe.subscriptions.cancel(providerSubscriptionId) + } catch (error: unknown) { + const stripeError = error as { code?: string; message?: string } + const isAlreadyCanceled = + stripeError.code === 'resource_already_canceled' || + /already canceled|cannot cancel.*canceled/i.test( + String(stripeError.message ?? '') + ) + if (isAlreadyCanceled) { + throw new SubscriptionAlreadyCanceledError() + } + throw error + } } export const StripeSubscriptionProvider: SubscriptionProvider = { diff --git a/apps/backend/src/config.ts b/apps/backend/src/config.ts index a96dfcf0..a83a4b68 100644 --- a/apps/backend/src/config.ts +++ b/apps/backend/src/config.ts @@ -25,6 +25,7 @@ function loadServicesEnvs() { const schema = z.object({ RESEND_API_KEY: z.string().optional().default('re_123'), STRIPE_SECRET_KEY: z.string().optional().default(''), + STRIPE_WEBHOOK_SECRET: z.string().optional().default(''), TMDB_ACCESS_TOKEN: z.string(), }) diff --git a/apps/backend/src/domain/errors/subscription-already-canceled-error.ts b/apps/backend/src/domain/errors/subscription-already-canceled-error.ts new file mode 100644 index 00000000..a4978bae --- /dev/null +++ b/apps/backend/src/domain/errors/subscription-already-canceled-error.ts @@ -0,0 +1,7 @@ +import { DomainError } from './domain-error' + +export class SubscriptionAlreadyCanceledError extends DomainError { + constructor() { + super('Subscription is already canceled', 409) + } +} diff --git a/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts b/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts index bc71a532..13b8b6e2 100644 --- a/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/cancel-subscription.spec.ts @@ -3,6 +3,7 @@ import { faker } from '@faker-js/faker' import { describe, expect, it } from 'vitest' import { getSubscriptionById } from '@/db/repositories/subscription-repository' import { getUserById } from '@/db/repositories/user-repository' +import { SubscriptionAlreadyCanceledError } from '@/domain/errors/subscription-already-canceled-error' import type { SubscriptionProvider } from '@/ports/subscription-provider' import { makeSubscription } from '@/test/factories/make-subscription' import { makeUser } from '@/test/factories/make-user' @@ -96,4 +97,24 @@ describe('Cancel subscription', () => { expect(provider.cancelImmediately).not.toHaveBeenCalled() }) + + it('should still update DB when provider says subscription already canceled (idempotent)', async () => { + const providerSubId = uniqueProviderSubId() + const user = await makeUser() + const provider = mockSubscriptionProvider() + vi.mocked(provider.cancelImmediately).mockRejectedValueOnce( + new SubscriptionAlreadyCanceledError() + ) + + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: providerSubId, + }) + + const result = await cancelSubscription(subscription, 'reason', provider) + + expect(result).toEqual({ id: subscription.id }) + const updated = await getSubscriptionById(subscription.id) + expect(updated?.status).toBe('CANCELED') + }) }) diff --git a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts index 56e92e83..69586286 100644 --- a/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts +++ b/apps/backend/src/domain/services/subscriptions/cancel-subscription.ts @@ -1,6 +1,7 @@ import { cancelUserSubscription } from '@/db/repositories/subscription-repository' import type { Subscription } from '@/domain/entities/subscription' import { DomainError } from '@/domain/errors/domain-error' +import { SubscriptionAlreadyCanceledError } from '@/domain/errors/subscription-already-canceled-error' import type { SubscriptionProvider } from '@/ports/subscription-provider' export async function cancelSubscription( @@ -17,21 +18,31 @@ export async function cancelSubscription( try { await provider.cancelImmediately(providerSubscriptionId) - - await cancelUserSubscription({ - id, - userId, - status: 'CANCELED', - canceledAt: new Date(), - cancellationReason: reason, - }) - - return { id } } catch (error) { + if (error instanceof SubscriptionAlreadyCanceledError) { + await cancelUserSubscription({ + id, + userId, + status: 'CANCELED', + canceledAt: new Date(), + cancellationReason: reason, + }) + return { id } + } if (error instanceof DomainError) throw error throw new DomainError( `Failed to cancel subscription, ${error instanceof Error ? error.message : String(error)}`, 500 ) } + + await cancelUserSubscription({ + id, + userId, + status: 'CANCELED', + canceledAt: new Date(), + cancellationReason: reason, + }) + + return { id } } diff --git a/apps/backend/src/http/controllers/stripe-webhook-controller.ts b/apps/backend/src/http/controllers/stripe-webhook-controller.ts index 5e58929e..ed50a370 100644 --- a/apps/backend/src/http/controllers/stripe-webhook-controller.ts +++ b/apps/backend/src/http/controllers/stripe-webhook-controller.ts @@ -1,13 +1,18 @@ import type { FastifyReply, FastifyRequest } from 'fastify' import type Stripe from 'stripe' import { stripe } from '@/adapters/stripe' +import { logger } from '@/adapters/logger' import { config } from '@/config' +import { DomainError } from '@/domain/errors/domain-error' import { completeSubscription } from '@/domain/services/subscriptions/complete-subscription' import { handleSubscriptionDeleted, handleSubscriptionUpdated, } from '@/domain/services/subscriptions/handle-subscription-webhook' +const webhookSecret = + config.services.STRIPE_WEBHOOK_SECRET || config.services.STRIPE_SECRET_KEY + export async function stripeWebhookController( request: FastifyRequest, reply: FastifyReply @@ -23,7 +28,7 @@ export async function stripeWebhookController( event = stripe.webhooks.constructEvent( request.body as string, stripeSignature, - config.services.STRIPE_SECRET_KEY + webhookSecret ) } catch (error) { return reply.status(400).send(`Webhook Error: ${error}`) @@ -35,12 +40,18 @@ export async function stripeWebhookController( if (session.mode !== 'subscription') break const params = parseCheckoutSessionCompleted(session) if (params) { - await completeSubscription({ + const result = await completeSubscription({ email: params.email, provider: 'STRIPE', providerSubscriptionId: params.providerSubscriptionId, type: 'PRO', }) + if (result instanceof DomainError) { + logger.warn( + { eventId: event.id, error: result.message }, + 'checkout.session.completed: completeSubscription returned error' + ) + } } break } @@ -55,7 +66,7 @@ export async function stripeWebhookController( break } default: - console.error(`Unhandled event type ${event.type}`) + logger.info({ eventType: event.type }, 'Unhandled Stripe webhook event') } return reply.status(200).send({ received: true }) From 218ca8bd4ea45ddc0c03063da9ddd8f90fb4e6da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 00:53:59 -0300 Subject: [PATCH 07/27] refactor(imports): simplify publishToQueue tests by mocking SQS interactions and removing unnecessary code --- .../imports/publish-import-to-queue.spec.ts | 156 ++++-------------- 1 file changed, 36 insertions(+), 120 deletions(-) diff --git a/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts b/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts index 13d5a693..d7c2640d 100644 --- a/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts +++ b/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts @@ -1,6 +1,4 @@ -import { DeleteQueueCommand, ReceiveMessageCommand } from '@aws-sdk/client-sqs' -import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import { createSqsClient, initializeSQS } from '@/adapters/sqs' +import { describe, expect, it } from 'vitest' import { config } from '@/config' import { makeManyRawImportMovies } from '@/test/factories/make-import-movies' import { makeManyRawImportSeries } from '@/test/factories/make-import-series' @@ -8,30 +6,20 @@ import { makeUser } from '@/test/factories/make-user' import { makeUserImport } from '@/test/factories/make-user-import' import { publishToQueue } from './publish-import-to-queue' -describe('publishToQueue', () => { - let sqsClient: ReturnType - - const queues = [ - config.sqsQueues.IMPORT_MOVIES_QUEUE, - config.sqsQueues.IMPORT_SERIES_QUEUE, - ] +const mockPublish = vi.fn().mockResolvedValue(undefined) - beforeEach(async () => { - sqsClient = createSqsClient() - await initializeSQS(sqsClient) - }) +vi.mock('@/factories/queue-service-factory', () => ({ + queueServiceFactory: () => ({ + publish: mockPublish, + }), +})) - afterEach(async () => { - for (const queue of queues) { - await sqsClient.send( - new DeleteQueueCommand({ - QueueUrl: `http://localhost:4566/000000000000/${queue}`, - }) - ) - } +describe('publishToQueue', () => { + beforeEach(() => { + mockPublish.mockClear() }) - it('should be able to send messages to SQS', async () => { + it('should publish movies and series to their queues', async () => { const { id: userId } = await makeUser({}) const movies = makeManyRawImportMovies(3, {}) @@ -40,104 +28,32 @@ describe('publishToQueue', () => { await publishToQueue(result) - const receiveMovies = { - QueueUrl: config.sqsQueues.IMPORT_MOVIES_QUEUE, - MaxNumberOfMessages: 3, - WaitTimeSeconds: 1, - } - - const receivedMovies = await sqsClient.send( - new ReceiveMessageCommand(receiveMovies) - ) - - expect(receivedMovies.Messages).toHaveLength(3) - - const receiveSeries = { - QueueUrl: config.sqsQueues.IMPORT_SERIES_QUEUE, - MaxNumberOfMessages: 8, - WaitTimeSeconds: 1, - } - - const receivedSeries = await sqsClient.send( - new ReceiveMessageCommand(receiveSeries) + await vi.waitFor(() => { + expect(mockPublish).toHaveBeenCalledTimes(2) + }) + + const [moviesCall, seriesCall] = mockPublish.mock.calls + + expect(moviesCall[0].queueUrl).toBe(config.sqsQueues.IMPORT_MOVIES_QUEUE) + expect(moviesCall[0].messages).toHaveLength(3) + expect(moviesCall[0].messages).toEqual( + result.movies.map(({ id, name }) => ({ + id, + name, + provider: result.provider, + userId, + })) ) - expect(receivedSeries.Messages).toHaveLength(8) - - const firstSerie = result.series[0] - const formattedSeries = { - id: firstSerie.id, - name: firstSerie.name, - provider: result.provider, - userId, - } - - expect(receivedSeries.Messages?.[0].Body).toBe( - JSON.stringify(formattedSeries) + expect(seriesCall[0].queueUrl).toBe(config.sqsQueues.IMPORT_SERIES_QUEUE) + expect(seriesCall[0].messages).toHaveLength(8) + expect(seriesCall[0].messages).toEqual( + result.series.map(({ id, name }) => ({ + id, + name, + provider: result.provider, + userId, + })) ) }) - - // it('should not be able to publish movies when it is empty', async () => { - // const { id: userId } = await makeUser({}) - - // const series = makeManyRawImportSeries(3, {}) - // const result = await makeUserImport({ userId, movies: [], series }) - - // await publishToQueue(result) - - // const receiveMovies = { - // QueueUrl: config.sqsQueues.IMPORT_MOVIES_QUEUE, - // MaxNumberOfMessages: 1, - // WaitTimeSeconds: 1, - // } - - // const receiveSeries = { - // QueueUrl: config.sqsQueues.IMPORT_SERIES_QUEUE, - // MaxNumberOfMessages: 3, - // WaitTimeSeconds: 1, - // } - - // const receivedMovies = await sqsClient.send( - // new ReceiveMessageCommand(receiveMovies) - // ) - - // const receivedSeries = await sqsClient.send( - // new ReceiveMessageCommand(receiveSeries) - // ) - - // expect(receivedMovies.Messages).toBeUndefined() - // expect(receivedSeries.Messages).toHaveLength(3) - // }) - - // it('should not be able to publish series when it is empty', async () => { - // const { id: userId } = await makeUser({}) - - // const movies = makeManyRawImportMovies(3, {}) - // const result = await makeUserImport({ userId, movies, series: [] }) - - // await publishToQueue(result) - - // const receiveMovies = { - // QueueUrl: config.sqsQueues.IMPORT_MOVIES_QUEUE, - // MaxNumberOfMessages: 3, - // WaitTimeSeconds: 1, - // } - - // const receiveSeries = { - // QueueUrl: config.sqsQueues.IMPORT_SERIES_QUEUE, - // MaxNumberOfMessages: 1, - // WaitTimeSeconds: 0.1, - // } - - // const receivedMovies = await sqsClient.send( - // new ReceiveMessageCommand(receiveMovies) - // ) - - // const receivedSeries = await sqsClient.send( - // new ReceiveMessageCommand(receiveSeries) - // ) - - // expect(receivedMovies.Messages).toHaveLength(3) - // expect(receivedSeries.Messages).toBeUndefined() - // }) -}, 10000) +}) From d705e8804c25dd9ca8626a81d99a677a1eda42d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 01:07:10 -0300 Subject: [PATCH 08/27] fix(subscriptions): set default value for subscription_provider column in migrations --- .../db/migrations/20260130024720_alter_subscriptions_table.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql b/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql index 50ef9f71..246c69b0 100644 --- a/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql +++ b/apps/backend/src/db/migrations/20260130024720_alter_subscriptions_table.sql @@ -1,4 +1,4 @@ CREATE TYPE "public"."subscription_provider" AS ENUM('STRIPE', 'APPLE');--> statement-breakpoint -ALTER TABLE "subscriptions" ADD COLUMN "subscription_provider" "subscription_provider" NOT NULL;--> statement-breakpoint +ALTER TABLE "subscriptions" ADD COLUMN "subscription_provider" "subscription_provider" NOT NULL DEFAULT 'STRIPE';--> statement-breakpoint ALTER TABLE "subscriptions" ADD COLUMN "provider_subscription_id" varchar;--> statement-breakpoint ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_provider_subscription_id_unique" UNIQUE("provider_subscription_id"); \ No newline at end of file From 6d107c9001648dee11ae9ca8721f704e47ac6c32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 01:11:15 -0300 Subject: [PATCH 09/27] refactor(subscriptions): update subscription routes to use Zod type provider and improve schema organization --- apps/backend/src/http/routes/subscriptions.ts | 39 +- apps/web/package.json | 3 +- apps/web/public/dictionaries/de-DE.json | 8 + apps/web/public/dictionaries/en-US.json | 8 + apps/web/public/dictionaries/es-ES.json | 8 + apps/web/public/dictionaries/fr-FR.json | 8 + apps/web/public/dictionaries/it-IT.json | 8 + apps/web/public/dictionaries/ja-JP.json | 8 + apps/web/public/dictionaries/pt-BR.json | 8 + apps/web/src/api/auth.ts | 18 +- apps/web/src/api/default.ts | 57 +- apps/web/src/api/endpoints.schemas.ts | 1030 +++++++++++------ apps/web/src/api/follows.ts | 225 +++- apps/web/src/api/images.ts | 20 +- apps/web/src/api/imports.ts | 70 +- apps/web/src/api/like.ts | 74 +- apps/web/src/api/list-item.ts | 80 +- apps/web/src/api/list.ts | 184 +-- apps/web/src/api/review-replies.ts | 80 +- apps/web/src/api/reviews.ts | 176 +-- apps/web/src/api/social-links.ts | 70 +- apps/web/src/api/subscriptions.ts | 88 ++ apps/web/src/api/user-activities.ts | 232 +++- apps/web/src/api/user-episodes.ts | 74 +- apps/web/src/api/user-items.ts | 277 +++-- apps/web/src/api/user-stats.ts | 462 ++++---- apps/web/src/api/users.ts | 384 +++--- apps/web/src/api/webhook.ts | 15 +- .../_components/subscription-form.tsx | 119 ++ .../[username]/_components/user-dialog.tsx | 11 +- 30 files changed, 2540 insertions(+), 1304 deletions(-) create mode 100644 apps/web/src/api/subscriptions.ts create mode 100644 apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx diff --git a/apps/backend/src/http/routes/subscriptions.ts b/apps/backend/src/http/routes/subscriptions.ts index 70093408..bc098c07 100644 --- a/apps/backend/src/http/routes/subscriptions.ts +++ b/apps/backend/src/http/routes/subscriptions.ts @@ -1,4 +1,5 @@ import type { FastifyInstance } from 'fastify' +import type { ZodTypeProvider } from 'fastify-type-provider-zod' import { deleteSubscriptionController } from '../controllers/subscriptions-controller' import { verifyJwt } from '../middlewares/verify-jwt' import { @@ -6,23 +7,23 @@ import { deleteSubscriptionResponseSchema, } from '../schemas/subscriptions' -export const subscriptionsRoutes = (app: FastifyInstance) => - app.route({ - method: 'DELETE', - url: '/user/subscription', - onRequest: [verifyJwt], - schema: { - description: 'Delete user subscription', - tags: ['subscriptions'], +const SUBSCRIPTIONS_TAG = ['subscriptions'] - body: deleteSubscriptionBodySchema, - response: deleteSubscriptionResponseSchema, - security: [ - { - bearerAuth: [], - }, - ], - }, - - handler: deleteSubscriptionController, - }) +export async function subscriptionsRoutes(app: FastifyInstance) { + app.after(() => + app.withTypeProvider().route({ + method: 'DELETE', + url: '/user/subscription', + onRequest: [verifyJwt], + schema: { + description: 'Delete user subscription', + operationId: 'deleteSubscription', + tags: SUBSCRIPTIONS_TAG, + body: deleteSubscriptionBodySchema, + response: deleteSubscriptionResponseSchema, + security: [{ bearerAuth: [] }], + }, + handler: deleteSubscriptionController, + }) + ) +} diff --git a/apps/web/package.json b/apps/web/package.json index e40eabf2..0293af43 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -8,7 +8,8 @@ "start": "next start", "test": "vitest", "test:ui": "vitest --coverage.enabled=true --ui", - "lint": "next lint" + "lint": "next lint", + "generate:api": "orval" }, "dependencies": { "@dnd-kit/core": "^6.3.1", diff --git a/apps/web/public/dictionaries/de-DE.json b/apps/web/public/dictionaries/de-DE.json index e7bc636c..244f0010 100644 --- a/apps/web/public/dictionaries/de-DE.json +++ b/apps/web/public/dictionaries/de-DE.json @@ -712,6 +712,14 @@ "account_data": "Kontodaten", "social_links": "Soziale Links", "subscription": "Abonnement", + "subscription_plan": "Plan", + "cancel_subscription": "Abonnement kündigen", + "cancel_subscription_confirm_title": "Abonnement kündigen?", + "cancel_subscription_confirm_description": "Wählen Sie, wann gekündigt werden soll. Sie können PRO bis zum Ende des Abrechnungszeitraums behalten.", + "cancel_at_end_of_period": "Am Periodenende", + "cancel_now": "Jetzt kündigen", + "cancel_subscription_success": "Abonnement gekündigt", + "cancel_subscription_error": "Kündigung fehlgeschlagen", "overall_progress": "Gesamtfortschritt", "episodes": "Episoden", "when_you_mark_all_episodes": "Wenn Sie alle Episoden als angesehen markieren, wird die Serie/Anime automatisch auf den Status aktualisiert", diff --git a/apps/web/public/dictionaries/en-US.json b/apps/web/public/dictionaries/en-US.json index b9736979..0999e94b 100644 --- a/apps/web/public/dictionaries/en-US.json +++ b/apps/web/public/dictionaries/en-US.json @@ -713,6 +713,14 @@ "account_data": "Account data", "social_links": "Social links", "subscription": "Subscription", + "subscription_plan": "Plan", + "cancel_subscription": "Cancel subscription", + "cancel_subscription_confirm_title": "Cancel subscription?", + "cancel_subscription_confirm_description": "Choose when to cancel. You can keep PRO until the end of your billing period.", + "cancel_at_end_of_period": "At end of period", + "cancel_now": "Cancel now", + "cancel_subscription_success": "Subscription cancelled", + "cancel_subscription_error": "Failed to cancel subscription", "overall_progress": "Overall Progress", "episodes": "Episodes", "when_you_mark_all_episodes": "When you mark all episodes as watched, the series/anime will automatically be updated to the status of", diff --git a/apps/web/public/dictionaries/es-ES.json b/apps/web/public/dictionaries/es-ES.json index e07256da..f3a6993b 100644 --- a/apps/web/public/dictionaries/es-ES.json +++ b/apps/web/public/dictionaries/es-ES.json @@ -715,6 +715,14 @@ "account_data": "Datos de la cuenta", "social_links": "Enlaces sociales", "subscription": "Suscripción", + "subscription_plan": "Plan", + "cancel_subscription": "Cancelar suscripción", + "cancel_subscription_confirm_title": "¿Cancelar suscripción?", + "cancel_subscription_confirm_description": "Elige cuándo cancelar. Puedes mantener PRO hasta el final del periodo de facturación.", + "cancel_at_end_of_period": "Al final del periodo", + "cancel_now": "Cancelar ahora", + "cancel_subscription_success": "Suscripción cancelada", + "cancel_subscription_error": "Error al cancelar la suscripción", "overall_progress": "Progreso general", "episodes": "Episodios", "when_you_mark_all_episodes": "Al marcar todos los episodios como vistos, la serie/anime se actualizará automáticamente al estado de", diff --git a/apps/web/public/dictionaries/fr-FR.json b/apps/web/public/dictionaries/fr-FR.json index 8928257f..81aeb157 100644 --- a/apps/web/public/dictionaries/fr-FR.json +++ b/apps/web/public/dictionaries/fr-FR.json @@ -718,6 +718,14 @@ "account_data": "Données du compte", "social_links": "Liens sociaux", "subscription": "Abonnement", + "subscription_plan": "Forfait", + "cancel_subscription": "Annuler l'abonnement", + "cancel_subscription_confirm_title": "Annuler l'abonnement ?", + "cancel_subscription_confirm_description": "Choisissez quand annuler. Vous pouvez conserver PRO jusqu'à la fin de la période de facturation.", + "cancel_at_end_of_period": "À la fin de la période", + "cancel_now": "Annuler maintenant", + "cancel_subscription_success": "Abonnement annulé", + "cancel_subscription_error": "Échec de l'annulation", "overall_progress": "Progrès global", "episodes": "Épisodes", "when_you_mark_all_episodes": "Lorsque vous marquez tous les épisodes comme regardés, la série/anime sera automatiquement mise à jour au statut de", diff --git a/apps/web/public/dictionaries/it-IT.json b/apps/web/public/dictionaries/it-IT.json index 692c61ec..27c717df 100644 --- a/apps/web/public/dictionaries/it-IT.json +++ b/apps/web/public/dictionaries/it-IT.json @@ -715,6 +715,14 @@ "account_data": "Dati dell'account", "social_links": "Link sociali", "subscription": "Abbonamento", + "subscription_plan": "Piano", + "cancel_subscription": "Annulla abbonamento", + "cancel_subscription_confirm_title": "Annullare l'abbonamento?", + "cancel_subscription_confirm_description": "Scegli quando annullare. Puoi mantenere PRO fino alla fine del periodo di fatturazione.", + "cancel_at_end_of_period": "Alla fine del periodo", + "cancel_now": "Annulla ora", + "cancel_subscription_success": "Abbonamento annullato", + "cancel_subscription_error": "Annullamento non riuscito", "overall_progress": "Progresso generale", "episodes": "Episodi", "when_you_mark_all_episodes": "Quando contrassegni tutti gli episodi come guardati, la serie/anime verrà automaticamente aggiornata allo stato di", diff --git a/apps/web/public/dictionaries/ja-JP.json b/apps/web/public/dictionaries/ja-JP.json index a6e1c087..7f9183d2 100644 --- a/apps/web/public/dictionaries/ja-JP.json +++ b/apps/web/public/dictionaries/ja-JP.json @@ -718,6 +718,14 @@ "account_data": "アカウントデータ", "social_links": "ソーシャルリンク", "subscription": "サブスクリプション", + "subscription_plan": "プラン", + "cancel_subscription": "サブスクリプションをキャンセル", + "cancel_subscription_confirm_title": "サブスクリプションをキャンセルしますか?", + "cancel_subscription_confirm_description": "キャンセルの時期を選択してください。請求期間の終了までPROを利用できます。", + "cancel_at_end_of_period": "期間終了時", + "cancel_now": "今すぐキャンセル", + "cancel_subscription_success": "サブスクリプションをキャンセルしました", + "cancel_subscription_error": "キャンセルに失敗しました", "overall_progress": "全体の進捗", "episodes": "エピソード", "when_you_mark_all_episodes": "すべてのエピソードを視聴済みにすると、シリーズ/アニメは自動的にステータスに更新されます", diff --git a/apps/web/public/dictionaries/pt-BR.json b/apps/web/public/dictionaries/pt-BR.json index 6d3b7326..60b8e963 100644 --- a/apps/web/public/dictionaries/pt-BR.json +++ b/apps/web/public/dictionaries/pt-BR.json @@ -716,6 +716,14 @@ "account_data": "Dados da conta", "social_links": "Links sociais", "subscription": "Assinatura", + "subscription_plan": "Plano", + "cancel_subscription": "Cancelar assinatura", + "cancel_subscription_confirm_title": "Cancelar assinatura?", + "cancel_subscription_confirm_description": "Escolha quando cancelar. Você pode manter o PRO até o fim do período de cobrança.", + "cancel_at_end_of_period": "No fim do período", + "cancel_now": "Cancelar agora", + "cancel_subscription_success": "Assinatura cancelada", + "cancel_subscription_error": "Falha ao cancelar assinatura", "overall_progress": "Progresso geral", "episodes": "Episódios", "when_you_mark_all_episodes": "Ao marcar todos os episódios como assistidos, a série/anime será atualizada automaticamente para o status de", diff --git a/apps/web/src/api/auth.ts b/apps/web/src/api/auth.ts index ec7a08e0..06cec9d8 100644 --- a/apps/web/src/api/auth.ts +++ b/apps/web/src/api/auth.ts @@ -1,27 +1,31 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 */ import { useMutation -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { MutationFunction, + QueryClient, UseMutationOptions, UseMutationResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { PostLogin200, PostLogin400, PostLoginBody -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * User login with login and password */ @@ -44,7 +48,7 @@ export const postLogin = ( export const getPostLoginMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostLoginBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostLoginBody}, TContext> => { - + const mutationKey = ['postLogin']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -72,7 +76,7 @@ const {mutation: mutationOptions} = options ? export const usePostLogin = (options?: { mutation?:UseMutationOptions>, TError,{data: PostLoginBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostLoginBody}, @@ -81,6 +85,6 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostLoginMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } \ No newline at end of file diff --git a/apps/web/src/api/default.ts b/apps/web/src/api/default.ts index 873e7191..1fcf87ab 100644 --- a/apps/web/src/api/default.ts +++ b/apps/web/src/api/default.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 @@ -7,11 +7,12 @@ import { useQuery, useSuspenseQuery -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { DataTag, DefinedInitialDataOptions, DefinedUseQueryResult, + QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, @@ -19,12 +20,14 @@ import type { UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import { axiosInstance } from '../services/axios-instance'; + export const getHealth = ( signal?: AbortSignal @@ -38,8 +41,12 @@ export const getHealth = ( } + + export const getGetHealthQueryKey = () => { - return [`/health`] as const; + return [ + `/health` + ] as const; } @@ -58,7 +65,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetHealthQueryResult = NonNullable>> @@ -73,8 +80,8 @@ export function useGetHealth>, TErr Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetHealth>, TError = unknown>( options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -83,21 +90,21 @@ export function useGetHealth>, TErr Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetHealth>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetHealth>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetHealthQueryOptions(options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -106,6 +113,7 @@ export function useGetHealth>, TErr + export const getGetHealthSuspenseQueryOptions = >, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } ) => { @@ -121,7 +129,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetHealthSuspenseQueryResult = NonNullable>> @@ -130,25 +138,25 @@ export type GetHealthSuspenseQueryError = unknown export function useGetHealthSuspense>, TError = unknown>( options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetHealthSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetHealthSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetHealthSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetHealthSuspenseQueryOptions(options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -157,3 +165,4 @@ export function useGetHealthSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PostFollowBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostFollowBody}, TContext> => { - + const mutationKey = ['postFollow']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -92,7 +96,7 @@ const {mutation: mutationOptions} = options ? export const usePostFollow = (options?: { mutation?:UseMutationOptions>, TError,{data: PostFollowBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostFollowBody}, @@ -101,7 +105,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostFollowMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get follow @@ -120,8 +124,12 @@ export const getFollow = ( } -export const getGetFollowQueryKey = (params: GetFollowParams,) => { - return [`/follow`, ...(params ? [params]: [])] as const; + + +export const getGetFollowQueryKey = (params?: GetFollowParams,) => { + return [ + `/follow`, ...(params ? [params]: []) + ] as const; } @@ -140,7 +148,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetFollowQueryResult = NonNullable>> @@ -155,8 +163,8 @@ export function useGetFollow>, TErr Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetFollow>, TError = unknown>( params: GetFollowParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -165,21 +173,21 @@ export function useGetFollow>, TErr Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetFollow>, TError = unknown>( params: GetFollowParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetFollow>, TError = unknown>( params: GetFollowParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetFollowQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -188,6 +196,7 @@ export function useGetFollow>, TErr + export const getGetFollowSuspenseQueryOptions = >, TError = unknown>(params: GetFollowParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -203,7 +212,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetFollowSuspenseQueryResult = NonNullable>> @@ -212,25 +221,25 @@ export type GetFollowSuspenseQueryError = unknown export function useGetFollowSuspense>, TError = unknown>( params: GetFollowParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetFollowSuspense>, TError = unknown>( params: GetFollowParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetFollowSuspense>, TError = unknown>( params: GetFollowParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetFollowSuspense>, TError = unknown>( params: GetFollowParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetFollowSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -239,6 +248,7 @@ export function useGetFollowSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: DeleteFollowBody}, TContext>, } ): UseMutationOptions>, TError,{data: DeleteFollowBody}, TContext> => { - + const mutationKey = ['deleteFollow']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -288,7 +298,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteFollow = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteFollowBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: DeleteFollowBody}, @@ -297,7 +307,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteFollowMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get followers @@ -316,8 +326,18 @@ export const getFollowers = ( } + + +export const getGetFollowersInfiniteQueryKey = (params?: GetFollowersParams,) => { + return [ + 'infinite', `/followers`, ...(params ? [params]: []) + ] as const; + } + export const getGetFollowersQueryKey = (params?: GetFollowersParams,) => { - return [`/followers`, ...(params ? [params]: [])] as const; + return [ + `/followers`, ...(params ? [params]: []) + ] as const; } @@ -326,7 +346,7 @@ export const getGetFollowersInfiniteQueryOptions = >, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseInfiniteQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetFollowersInfiniteQueryResult = NonNullable>> @@ -351,8 +371,8 @@ export function useGetFollowersInfinite> > , 'initialData' >, } - - ): DefinedUseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseInfiniteQueryResult & { queryKey: DataTag } export function useGetFollowersInfinite>>, TError = unknown>( params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -361,21 +381,21 @@ export function useGetFollowersInfinite> > , 'initialData' >, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } export function useGetFollowersInfinite>>, TError = unknown>( params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } export function useGetFollowersInfinite>>, TError = unknown>( params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } { const queryOptions = getGetFollowersInfiniteQueryOptions(params,options) - const query = useInfiniteQuery(queryOptions) as UseInfiniteQueryResult & { queryKey: DataTag }; + const query = useInfiniteQuery(queryOptions, queryClient) as UseInfiniteQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -384,3 +404,120 @@ export function useGetFollowersInfinite>, TError = unknown>(params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } +) => { + +const {query: queryOptions} = options ?? {}; + + const queryKey = queryOptions?.queryKey ?? getGetFollowersQueryKey(params); + + + + const queryFn: QueryFunction>> = ({ signal }) => getFollowers(params, signal); + + + + + + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } +} + +export type GetFollowersQueryResult = NonNullable>> +export type GetFollowersQueryError = unknown + + +export function useGetFollowers>, TError = unknown>( + params: undefined | GetFollowersParams, options: { query:Partial>, TError, TData>> & Pick< + DefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + > , 'initialData' + >, } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } +export function useGetFollowers>, TError = unknown>( + params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>> & Pick< + UndefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + > , 'initialData' + >, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } +export function useGetFollowers>, TError = unknown>( + params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } + +export function useGetFollowers>, TError = unknown>( + params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { + + const queryOptions = getGetFollowersQueryOptions(params,options) + + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; + + query.queryKey = queryOptions.queryKey ; + + return query; +} + + + + +export const getGetFollowersSuspenseQueryOptions = >, TError = unknown>(params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } +) => { + +const {query: queryOptions} = options ?? {}; + + const queryKey = queryOptions?.queryKey ?? getGetFollowersQueryKey(params); + + + + const queryFn: QueryFunction>> = ({ signal }) => getFollowers(params, signal); + + + + + + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } +} + +export type GetFollowersSuspenseQueryResult = NonNullable>> +export type GetFollowersSuspenseQueryError = unknown + + +export function useGetFollowersSuspense>, TError = unknown>( + params: undefined | GetFollowersParams, options: { query:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } +export function useGetFollowersSuspense>, TError = unknown>( + params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } +export function useGetFollowersSuspense>, TError = unknown>( + params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } + +export function useGetFollowersSuspense>, TError = unknown>( + params?: GetFollowersParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { + + const queryOptions = getGetFollowersSuspenseQueryOptions(params,options) + + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; + + query.queryKey = queryOptions.queryKey ; + + return query; +} + + + + diff --git a/apps/web/src/api/images.ts b/apps/web/src/api/images.ts index bc6a9ae2..1800b46d 100644 --- a/apps/web/src/api/images.ts +++ b/apps/web/src/api/images.ts @@ -1,27 +1,31 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 */ import { useMutation -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { MutationFunction, + QueryClient, UseMutationOptions, UseMutationResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { PostImage201, PostImageBody, PostImageParams -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * Create image */ @@ -32,7 +36,7 @@ export const postImage = ( ) => { const formData = new FormData(); -formData.append('file', postImageBody.file) +formData.append(`file`, postImageBody.file) return axiosInstance( {url: `/image`, method: 'POST', @@ -48,7 +52,7 @@ formData.append('file', postImageBody.file) export const getPostImageMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostImageBody;params: PostImageParams}, TContext>, } ): UseMutationOptions>, TError,{data: PostImageBody;params: PostImageParams}, TContext> => { - + const mutationKey = ['postImage']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -76,7 +80,7 @@ const {mutation: mutationOptions} = options ? export const usePostImage = (options?: { mutation?:UseMutationOptions>, TError,{data: PostImageBody;params: PostImageParams}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostImageBody;params: PostImageParams}, @@ -85,6 +89,6 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostImageMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } \ No newline at end of file diff --git a/apps/web/src/api/imports.ts b/apps/web/src/api/imports.ts index 36dbcd7e..20da37d4 100644 --- a/apps/web/src/api/imports.ts +++ b/apps/web/src/api/imports.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 @@ -8,12 +8,13 @@ import { useMutation, useQuery, useSuspenseQuery -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { DataTag, DefinedInitialDataOptions, DefinedUseQueryResult, MutationFunction, + QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, @@ -23,7 +24,8 @@ import type { UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { GetImportImportId200, GetImportImportId404, @@ -31,12 +33,14 @@ import type { PostImport422, PostImportBody, PostImportParams -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * Save imports to run */ @@ -47,7 +51,7 @@ export const postImport = ( ) => { const formData = new FormData(); -formData.append('file', postImportBody.file) +formData.append(`file`, postImportBody.file) return axiosInstance( {url: `/import`, method: 'POST', @@ -63,7 +67,7 @@ formData.append('file', postImportBody.file) export const getPostImportMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostImportBody;params: PostImportParams}, TContext>, } ): UseMutationOptions>, TError,{data: PostImportBody;params: PostImportParams}, TContext> => { - + const mutationKey = ['postImport']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -91,7 +95,7 @@ const {mutation: mutationOptions} = options ? export const usePostImport = (options?: { mutation?:UseMutationOptions>, TError,{data: PostImportBody;params: PostImportParams}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostImportBody;params: PostImportParams}, @@ -100,7 +104,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostImportMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get detailed import @@ -118,8 +122,12 @@ export const getImportImportId = ( } -export const getGetImportImportIdQueryKey = (importId: string,) => { - return [`/import/${importId}`] as const; + + +export const getGetImportImportIdQueryKey = (importId?: string,) => { + return [ + `/import/${importId}` + ] as const; } @@ -138,7 +146,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(importId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(importId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetImportImportIdQueryResult = NonNullable>> @@ -153,8 +161,8 @@ export function useGetImportImportId> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetImportImportId>, TError = GetImportImportId404>( importId: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -163,21 +171,21 @@ export function useGetImportImportId> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetImportImportId>, TError = GetImportImportId404>( importId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetImportImportId>, TError = GetImportImportId404>( importId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetImportImportIdQueryOptions(importId,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -186,6 +194,7 @@ export function useGetImportImportId>, TError = GetImportImportId404>(importId: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -201,7 +210,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetImportImportIdSuspenseQueryResult = NonNullable>> @@ -210,25 +219,25 @@ export type GetImportImportIdSuspenseQueryError = GetImportImportId404 export function useGetImportImportIdSuspense>, TError = GetImportImportId404>( importId: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetImportImportIdSuspense>, TError = GetImportImportId404>( importId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetImportImportIdSuspense>, TError = GetImportImportId404>( importId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetImportImportIdSuspense>, TError = GetImportImportId404>( importId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetImportImportIdSuspenseQueryOptions(importId,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -237,3 +246,4 @@ export function useGetImportImportIdSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PostLikeBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostLikeBody}, TContext> => { - + const mutationKey = ['postLike']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -84,7 +88,7 @@ const {mutation: mutationOptions} = options ? export const usePostLike = (options?: { mutation?:UseMutationOptions>, TError,{data: PostLikeBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostLikeBody}, @@ -93,7 +97,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostLikeMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Delete like @@ -114,7 +118,7 @@ export const deleteLikeId = ( export const getDeleteLikeIdMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } ): UseMutationOptions>, TError,{id: string}, TContext> => { - + const mutationKey = ['deleteLikeId']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -142,7 +146,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteLikeId = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string}, @@ -151,7 +155,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteLikeIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get likes @@ -169,8 +173,12 @@ export const getLikesEntityId = ( } -export const getGetLikesEntityIdQueryKey = (entityId: string,) => { - return [`/likes/${entityId}`] as const; + + +export const getGetLikesEntityIdQueryKey = (entityId?: string,) => { + return [ + `/likes/${entityId}` + ] as const; } @@ -189,7 +197,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(entityId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(entityId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetLikesEntityIdQueryResult = NonNullable>> @@ -204,8 +212,8 @@ export function useGetLikesEntityId> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetLikesEntityId>, TError = unknown>( entityId: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -214,21 +222,21 @@ export function useGetLikesEntityId> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetLikesEntityId>, TError = unknown>( entityId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetLikesEntityId>, TError = unknown>( entityId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetLikesEntityIdQueryOptions(entityId,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -237,6 +245,7 @@ export function useGetLikesEntityId>, TError = unknown>(entityId: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -252,7 +261,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetLikesEntityIdSuspenseQueryResult = NonNullable>> @@ -261,25 +270,25 @@ export type GetLikesEntityIdSuspenseQueryError = unknown export function useGetLikesEntityIdSuspense>, TError = unknown>( entityId: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetLikesEntityIdSuspense>, TError = unknown>( entityId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetLikesEntityIdSuspense>, TError = unknown>( entityId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetLikesEntityIdSuspense>, TError = unknown>( entityId: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetLikesEntityIdSuspenseQueryOptions(entityId,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -288,3 +297,4 @@ export function useGetLikesEntityIdSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PostListItemBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostListItemBody}, TContext> => { - + const mutationKey = ['postListItem']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -86,7 +90,7 @@ const {mutation: mutationOptions} = options ? export const usePostListItem = (options?: { mutation?:UseMutationOptions>, TError,{data: PostListItemBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostListItemBody}, @@ -95,7 +99,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostListItemMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Create list item @@ -115,9 +119,13 @@ export const getListItemsByListId = ( } -export const getGetListItemsByListIdQueryKey = (listId: string, + + +export const getGetListItemsByListIdQueryKey = (listId?: string, params?: GetListItemsByListIdParams,) => { - return [`/list-items/by/${listId}`, ...(params ? [params]: [])] as const; + return [ + `/list-items/by/${listId}`, ...(params ? [params]: []) + ] as const; } @@ -137,7 +145,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(listId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(listId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListItemsByListIdQueryResult = NonNullable>> @@ -153,8 +161,8 @@ export function useGetListItemsByListId> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetListItemsByListId>, TError = unknown>( listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -164,23 +172,23 @@ export function useGetListItemsByListId> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetListItemsByListId>, TError = unknown>( listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetListItemsByListId>, TError = unknown>( listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListItemsByListIdQueryOptions(listId,params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -189,6 +197,7 @@ export function useGetListItemsByListId>, TError = unknown>(listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -205,7 +214,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListItemsByListIdSuspenseQueryResult = NonNullable>> @@ -215,28 +224,28 @@ export type GetListItemsByListIdSuspenseQueryError = unknown export function useGetListItemsByListIdSuspense>, TError = unknown>( listId: string, params: undefined | GetListItemsByListIdParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListItemsByListIdSuspense>, TError = unknown>( listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListItemsByListIdSuspense>, TError = unknown>( listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListItemsByListIdSuspense>, TError = unknown>( listId: string, params?: GetListItemsByListIdParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListItemsByListIdSuspenseQueryOptions(listId,params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -245,6 +254,7 @@ export function useGetListItemsByListIdSuspense(options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } ): UseMutationOptions>, TError,{id: string}, TContext> => { - + const mutationKey = ['deleteListItemId']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -292,7 +302,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteListItemId = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string}, @@ -301,7 +311,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteListItemIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Update list items position @@ -324,7 +334,7 @@ export const updateListItemsPositions = ( export const getUpdateListItemsPositionsMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: UpdateListItemsPositionsBody}, TContext>, } ): UseMutationOptions>, TError,{data: UpdateListItemsPositionsBody}, TContext> => { - + const mutationKey = ['updateListItemsPositions']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -352,7 +362,7 @@ const {mutation: mutationOptions} = options ? export const useUpdateListItemsPositions = (options?: { mutation?:UseMutationOptions>, TError,{data: UpdateListItemsPositionsBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: UpdateListItemsPositionsBody}, @@ -361,6 +371,6 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getUpdateListItemsPositionsMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } \ No newline at end of file diff --git a/apps/web/src/api/list.ts b/apps/web/src/api/list.ts index 99f95726..d1eb9c63 100644 --- a/apps/web/src/api/list.ts +++ b/apps/web/src/api/list.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 @@ -8,12 +8,13 @@ import { useMutation, useQuery, useSuspenseQuery -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { DataTag, DefinedInitialDataOptions, DefinedUseQueryResult, MutationFunction, + QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, @@ -23,7 +24,8 @@ import type { UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { DeleteListId204, DeleteListId404, @@ -41,12 +43,14 @@ import type { PutListId200, PutListId404, PutListIdBody -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * Create a list */ @@ -69,7 +73,7 @@ export const postList = ( export const getPostListMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostListBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostListBody}, TContext> => { - + const mutationKey = ['postList']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -97,7 +101,7 @@ const {mutation: mutationOptions} = options ? export const usePostList = (options?: { mutation?:UseMutationOptions>, TError,{data: PostListBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostListBody}, @@ -106,7 +110,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostListMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get lists @@ -125,8 +129,12 @@ export const getLists = ( } + + export const getGetListsQueryKey = (params?: GetListsParams,) => { - return [`/lists`, ...(params ? [params]: [])] as const; + return [ + `/lists`, ...(params ? [params]: []) + ] as const; } @@ -145,7 +153,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListsQueryResult = NonNullable>> @@ -160,8 +168,8 @@ export function useGetLists>, TError Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetLists>, TError = GetLists404>( params?: GetListsParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -170,21 +178,21 @@ export function useGetLists>, TError Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetLists>, TError = GetLists404>( params?: GetListsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetLists>, TError = GetLists404>( params?: GetListsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListsQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -193,6 +201,7 @@ export function useGetLists>, TError + export const getGetListsSuspenseQueryOptions = >, TError = GetLists404>(params?: GetListsParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -208,7 +217,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListsSuspenseQueryResult = NonNullable>> @@ -217,25 +226,25 @@ export type GetListsSuspenseQueryError = GetLists404 export function useGetListsSuspense>, TError = GetLists404>( params: undefined | GetListsParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListsSuspense>, TError = GetLists404>( params?: GetListsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListsSuspense>, TError = GetLists404>( params?: GetListsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListsSuspense>, TError = GetLists404>( params?: GetListsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListsSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -244,6 +253,7 @@ export function useGetListsSuspense> + /** * Delete list */ @@ -263,7 +273,7 @@ export const deleteListId = ( export const getDeleteListIdMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } ): UseMutationOptions>, TError,{id: string}, TContext> => { - + const mutationKey = ['deleteListId']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -291,7 +301,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteListId = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string}, @@ -300,7 +310,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteListIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Update list @@ -324,7 +334,7 @@ export const putListId = ( export const getPutListIdMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{id: string;data: PutListIdBody}, TContext>, } ): UseMutationOptions>, TError,{id: string;data: PutListIdBody}, TContext> => { - + const mutationKey = ['putListId']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -352,7 +362,7 @@ const {mutation: mutationOptions} = options ? export const usePutListId = (options?: { mutation?:UseMutationOptions>, TError,{id: string;data: PutListIdBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string;data: PutListIdBody}, @@ -361,7 +371,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPutListIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get list by ID @@ -379,8 +389,12 @@ export const getListById = ( } -export const getGetListByIdQueryKey = (id: string,) => { - return [`/list/by/${id}`] as const; + + +export const getGetListByIdQueryKey = (id?: string,) => { + return [ + `/list/by/${id}` + ] as const; } @@ -399,7 +413,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListByIdQueryResult = NonNullable>> @@ -414,8 +428,8 @@ export function useGetListById>, Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetListById>, TError = GetListById404>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -424,21 +438,21 @@ export function useGetListById>, Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetListById>, TError = GetListById404>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetListById>, TError = GetListById404>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListByIdQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -447,6 +461,7 @@ export function useGetListById>, + export const getGetListByIdSuspenseQueryOptions = >, TError = GetListById404>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -462,7 +477,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListByIdSuspenseQueryResult = NonNullable>> @@ -471,25 +486,25 @@ export type GetListByIdSuspenseQueryError = GetListById404 export function useGetListByIdSuspense>, TError = GetListById404>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListByIdSuspense>, TError = GetListById404>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListByIdSuspense>, TError = GetListById404>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListByIdSuspense>, TError = GetListById404>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListByIdSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -498,6 +513,7 @@ export function useGetListByIdSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PatchListBannerBody}, TContext>, } ): UseMutationOptions>, TError,{data: PatchListBannerBody}, TContext> => { - + const mutationKey = ['patchListBanner']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -547,7 +563,7 @@ const {mutation: mutationOptions} = options ? export const usePatchListBanner = (options?: { mutation?:UseMutationOptions>, TError,{data: PatchListBannerBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PatchListBannerBody}, @@ -556,7 +572,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPatchListBannerMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get list progress @@ -574,8 +590,12 @@ export const getListProgress = ( } -export const getGetListProgressQueryKey = (id: string,) => { - return [`/list/${id}/progress`] as const; + + +export const getGetListProgressQueryKey = (id?: string,) => { + return [ + `/list/${id}/progress` + ] as const; } @@ -594,7 +614,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListProgressQueryResult = NonNullable>> @@ -609,8 +629,8 @@ export function useGetListProgress> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetListProgress>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -619,21 +639,21 @@ export function useGetListProgress> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetListProgress>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetListProgress>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListProgressQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -642,6 +662,7 @@ export function useGetListProgress>, TError = unknown>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -657,7 +678,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetListProgressSuspenseQueryResult = NonNullable>> @@ -666,25 +687,25 @@ export type GetListProgressSuspenseQueryError = unknown export function useGetListProgressSuspense>, TError = unknown>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListProgressSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListProgressSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetListProgressSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetListProgressSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -693,3 +714,4 @@ export function useGetListProgressSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PostReviewReplyBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostReviewReplyBody}, TContext> => { - + const mutationKey = ['postReviewReply']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -88,7 +92,7 @@ const {mutation: mutationOptions} = options ? export const usePostReviewReply = (options?: { mutation?:UseMutationOptions>, TError,{data: PostReviewReplyBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostReviewReplyBody}, @@ -97,7 +101,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostReviewReplyMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get review replies @@ -116,8 +120,12 @@ export const getReviewReplies = ( } -export const getGetReviewRepliesQueryKey = (params: GetReviewRepliesParams,) => { - return [`/review-replies`, ...(params ? [params]: [])] as const; + + +export const getGetReviewRepliesQueryKey = (params?: GetReviewRepliesParams,) => { + return [ + `/review-replies`, ...(params ? [params]: []) + ] as const; } @@ -136,7 +144,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetReviewRepliesQueryResult = NonNullable>> @@ -151,8 +159,8 @@ export function useGetReviewReplies> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetReviewReplies>, TError = unknown>( params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -161,21 +169,21 @@ export function useGetReviewReplies> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetReviewReplies>, TError = unknown>( params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetReviewReplies>, TError = unknown>( params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetReviewRepliesQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -184,6 +192,7 @@ export function useGetReviewReplies>, TError = unknown>(params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -199,7 +208,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetReviewRepliesSuspenseQueryResult = NonNullable>> @@ -208,25 +217,25 @@ export type GetReviewRepliesSuspenseQueryError = unknown export function useGetReviewRepliesSuspense>, TError = unknown>( params: GetReviewRepliesParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewRepliesSuspense>, TError = unknown>( params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewRepliesSuspense>, TError = unknown>( params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewRepliesSuspense>, TError = unknown>( params: GetReviewRepliesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetReviewRepliesSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -235,6 +244,7 @@ export function useGetReviewRepliesSuspense(options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } ): UseMutationOptions>, TError,{id: string}, TContext> => { - + const mutationKey = ['deleteReviewReplyById']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -282,7 +292,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteReviewReplyById = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string}, @@ -291,7 +301,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteReviewReplyByIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Update review reply by id @@ -315,7 +325,7 @@ export const putReviewReplyById = ( export const getPutReviewReplyByIdMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{id: string;data: PutReviewReplyByIdBody}, TContext>, } ): UseMutationOptions>, TError,{id: string;data: PutReviewReplyByIdBody}, TContext> => { - + const mutationKey = ['putReviewReplyById']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -343,7 +353,7 @@ const {mutation: mutationOptions} = options ? export const usePutReviewReplyById = (options?: { mutation?:UseMutationOptions>, TError,{id: string;data: PutReviewReplyByIdBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string;data: PutReviewReplyByIdBody}, @@ -352,6 +362,6 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPutReviewReplyByIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } \ No newline at end of file diff --git a/apps/web/src/api/reviews.ts b/apps/web/src/api/reviews.ts index 5cfb9ffb..72645621 100644 --- a/apps/web/src/api/reviews.ts +++ b/apps/web/src/api/reviews.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 @@ -8,12 +8,13 @@ import { useMutation, useQuery, useSuspenseQuery -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { DataTag, DefinedInitialDataOptions, DefinedUseQueryResult, MutationFunction, + QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, @@ -23,7 +24,8 @@ import type { UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { GetDetailedReviews200, GetDetailedReviewsParams, @@ -36,12 +38,14 @@ import type { PostReviewBody, PutReviewById200, PutReviewByIdBody -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * Create a review */ @@ -64,7 +68,7 @@ export const postReview = ( export const getPostReviewMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostReviewBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostReviewBody}, TContext> => { - + const mutationKey = ['postReview']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -92,7 +96,7 @@ const {mutation: mutationOptions} = options ? export const usePostReview = (options?: { mutation?:UseMutationOptions>, TError,{data: PostReviewBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostReviewBody}, @@ -101,7 +105,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostReviewMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get review @@ -120,8 +124,12 @@ export const getReview = ( } -export const getGetReviewQueryKey = (params: GetReviewParams,) => { - return [`/review`, ...(params ? [params]: [])] as const; + + +export const getGetReviewQueryKey = (params?: GetReviewParams,) => { + return [ + `/review`, ...(params ? [params]: []) + ] as const; } @@ -140,7 +148,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetReviewQueryResult = NonNullable>> @@ -155,8 +163,8 @@ export function useGetReview>, TErr Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetReview>, TError = unknown>( params: GetReviewParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -165,21 +173,21 @@ export function useGetReview>, TErr Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetReview>, TError = unknown>( params: GetReviewParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetReview>, TError = unknown>( params: GetReviewParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetReviewQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -188,6 +196,7 @@ export function useGetReview>, TErr + export const getGetReviewSuspenseQueryOptions = >, TError = unknown>(params: GetReviewParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -203,7 +212,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetReviewSuspenseQueryResult = NonNullable>> @@ -212,25 +221,25 @@ export type GetReviewSuspenseQueryError = unknown export function useGetReviewSuspense>, TError = unknown>( params: GetReviewParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewSuspense>, TError = unknown>( params: GetReviewParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewSuspense>, TError = unknown>( params: GetReviewParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewSuspense>, TError = unknown>( params: GetReviewParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetReviewSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -239,6 +248,7 @@ export function useGetReviewSuspense { - return [`/reviews`, ...(params ? [params]: [])] as const; + return [ + `/reviews`, ...(params ? [params]: []) + ] as const; } @@ -276,7 +290,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetReviewsQueryResult = NonNullable>> @@ -291,8 +305,8 @@ export function useGetReviews>, TE Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetReviews>, TError = unknown>( params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -301,21 +315,21 @@ export function useGetReviews>, TE Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetReviews>, TError = unknown>( params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetReviews>, TError = unknown>( params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetReviewsQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -324,6 +338,7 @@ export function useGetReviews>, TE + export const getGetReviewsSuspenseQueryOptions = >, TError = unknown>(params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -339,7 +354,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetReviewsSuspenseQueryResult = NonNullable>> @@ -348,25 +363,25 @@ export type GetReviewsSuspenseQueryError = unknown export function useGetReviewsSuspense>, TError = unknown>( params: undefined | GetReviewsParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewsSuspense>, TError = unknown>( params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewsSuspense>, TError = unknown>( params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetReviewsSuspense>, TError = unknown>( params?: GetReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetReviewsSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -375,6 +390,7 @@ export function useGetReviewsSuspense(options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } ): UseMutationOptions>, TError,{id: string}, TContext> => { - + const mutationKey = ['deleteReviewById']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -422,7 +438,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteReviewById = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string}, @@ -431,7 +447,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteReviewByIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Update review by id @@ -455,7 +471,7 @@ export const putReviewById = ( export const getPutReviewByIdMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{id: string;data: PutReviewByIdBody}, TContext>, } ): UseMutationOptions>, TError,{id: string;data: PutReviewByIdBody}, TContext> => { - + const mutationKey = ['putReviewById']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -483,7 +499,7 @@ const {mutation: mutationOptions} = options ? export const usePutReviewById = (options?: { mutation?:UseMutationOptions>, TError,{id: string;data: PutReviewByIdBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string;data: PutReviewByIdBody}, @@ -492,7 +508,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPutReviewByIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get detailed reviews @@ -511,8 +527,12 @@ export const getDetailedReviews = ( } + + export const getGetDetailedReviewsQueryKey = (params?: GetDetailedReviewsParams,) => { - return [`/detailed/reviews`, ...(params ? [params]: [])] as const; + return [ + `/detailed/reviews`, ...(params ? [params]: []) + ] as const; } @@ -531,7 +551,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetDetailedReviewsQueryResult = NonNullable>> @@ -546,8 +566,8 @@ export function useGetDetailedReviews> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetDetailedReviews>, TError = unknown>( params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -556,21 +576,21 @@ export function useGetDetailedReviews> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetDetailedReviews>, TError = unknown>( params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetDetailedReviews>, TError = unknown>( params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetDetailedReviewsQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -579,6 +599,7 @@ export function useGetDetailedReviews>, TError = unknown>(params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -594,7 +615,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetDetailedReviewsSuspenseQueryResult = NonNullable>> @@ -603,25 +624,25 @@ export type GetDetailedReviewsSuspenseQueryError = unknown export function useGetDetailedReviewsSuspense>, TError = unknown>( params: undefined | GetDetailedReviewsParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetDetailedReviewsSuspense>, TError = unknown>( params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetDetailedReviewsSuspense>, TError = unknown>( params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetDetailedReviewsSuspense>, TError = unknown>( params?: GetDetailedReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetDetailedReviewsSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -630,3 +651,4 @@ export function useGetDetailedReviewsSuspense { - return axiosInstance( + return axiosInstance( {url: `/social-links`, method: 'PUT', headers: {'Content-Type': 'application/json', }, data: putSocialLinksBody @@ -55,7 +59,7 @@ export const putSocialLinks = ( export const getPutSocialLinksMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PutSocialLinksBody}, TContext>, } ): UseMutationOptions>, TError,{data: PutSocialLinksBody}, TContext> => { - + const mutationKey = ['putSocialLinks']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -83,7 +87,7 @@ const {mutation: mutationOptions} = options ? export const usePutSocialLinks = (options?: { mutation?:UseMutationOptions>, TError,{data: PutSocialLinksBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PutSocialLinksBody}, @@ -92,7 +96,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPutSocialLinksMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get social links by userId @@ -111,8 +115,12 @@ export const getSocialLinks = ( } -export const getGetSocialLinksQueryKey = (params: GetSocialLinksParams,) => { - return [`/social-links`, ...(params ? [params]: [])] as const; + + +export const getGetSocialLinksQueryKey = (params?: GetSocialLinksParams,) => { + return [ + `/social-links`, ...(params ? [params]: []) + ] as const; } @@ -131,7 +139,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetSocialLinksQueryResult = NonNullable>> @@ -146,8 +154,8 @@ export function useGetSocialLinks> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetSocialLinks>, TError = unknown>( params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -156,21 +164,21 @@ export function useGetSocialLinks> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetSocialLinks>, TError = unknown>( params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetSocialLinks>, TError = unknown>( params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetSocialLinksQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -179,6 +187,7 @@ export function useGetSocialLinks>, TError = unknown>(params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -194,7 +203,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetSocialLinksSuspenseQueryResult = NonNullable>> @@ -203,25 +212,25 @@ export type GetSocialLinksSuspenseQueryError = unknown export function useGetSocialLinksSuspense>, TError = unknown>( params: GetSocialLinksParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetSocialLinksSuspense>, TError = unknown>( params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetSocialLinksSuspense>, TError = unknown>( params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetSocialLinksSuspense>, TError = unknown>( params: GetSocialLinksParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetSocialLinksSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -230,3 +239,4 @@ export function useGetSocialLinksSuspense { + + + return axiosInstance( + {url: `/user/subscription`, method: 'DELETE', + headers: {'Content-Type': 'application/json', }, + data: deleteSubscriptionBody + }, + ); + } + + + +export const getDeleteSubscriptionMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteSubscriptionBody}, TContext>, } +): UseMutationOptions>, TError,{data: DeleteSubscriptionBody}, TContext> => { + +const mutationKey = ['deleteSubscription']; +const {mutation: mutationOptions} = options ? + options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? + options + : {...options, mutation: {...options.mutation, mutationKey}} + : {mutation: { mutationKey, }}; + + + + + const mutationFn: MutationFunction>, {data: DeleteSubscriptionBody}> = (props) => { + const {data} = props ?? {}; + + return deleteSubscription(data,) + } + + + + + return { mutationFn, ...mutationOptions }} + + export type DeleteSubscriptionMutationResult = NonNullable>> + export type DeleteSubscriptionMutationBody = DeleteSubscriptionBody + export type DeleteSubscriptionMutationError = unknown + + export const useDeleteSubscription = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteSubscriptionBody}, TContext>, } + , queryClient?: QueryClient): UseMutationResult< + Awaited>, + TError, + {data: DeleteSubscriptionBody}, + TContext + > => { + + const mutationOptions = getDeleteSubscriptionMutationOptions(options); + + return useMutation(mutationOptions, queryClient); + } + \ No newline at end of file diff --git a/apps/web/src/api/user-activities.ts b/apps/web/src/api/user-activities.ts index e0d8e1fb..dbed937d 100644 --- a/apps/web/src/api/user-activities.ts +++ b/apps/web/src/api/user-activities.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 @@ -9,7 +9,7 @@ import { useMutation, useQuery, useSuspenseQuery -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { DataTag, DefinedInitialDataOptions, @@ -17,6 +17,7 @@ import type { DefinedUseQueryResult, InfiniteData, MutationFunction, + QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, @@ -28,18 +29,21 @@ import type { UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { GetNetworkActivities200, GetNetworkActivitiesParams, GetUserActivities200, GetUserActivitiesParams -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * Get user activities */ @@ -58,9 +62,20 @@ export const getUserActivities = ( } -export const getGetUserActivitiesQueryKey = (userId: string, + + +export const getGetUserActivitiesInfiniteQueryKey = (userId?: string, + params?: GetUserActivitiesParams,) => { + return [ + 'infinite', `/user/${userId}/activities`, ...(params ? [params]: []) + ] as const; + } + +export const getGetUserActivitiesQueryKey = (userId?: string, params?: GetUserActivitiesParams,) => { - return [`/user/${userId}/activities`, ...(params ? [params]: [])] as const; + return [ + `/user/${userId}/activities`, ...(params ? [params]: []) + ] as const; } @@ -70,7 +85,7 @@ export const getGetUserActivitiesInfiniteQueryOptions = >, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(userId), ...queryOptions} as UseInfiniteQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserActivitiesInfiniteQueryResult = NonNullable>> @@ -96,8 +111,8 @@ export function useGetUserActivitiesInfinite> > , 'initialData' >, } - - ): DefinedUseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseInfiniteQueryResult & { queryKey: DataTag } export function useGetUserActivitiesInfinite>>, TError = unknown>( userId: string, params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -107,23 +122,149 @@ export function useGetUserActivitiesInfinite> > , 'initialData' >, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } export function useGetUserActivitiesInfinite>>, TError = unknown>( userId: string, params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } export function useGetUserActivitiesInfinite>>, TError = unknown>( userId: string, params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserActivitiesInfiniteQueryOptions(userId,params,options) - const query = useInfiniteQuery(queryOptions) as UseInfiniteQueryResult & { queryKey: DataTag }; + const query = useInfiniteQuery(queryOptions, queryClient) as UseInfiniteQueryResult & { queryKey: DataTag }; + + query.queryKey = queryOptions.queryKey ; + + return query; +} + + + + +export const getGetUserActivitiesQueryOptions = >, TError = unknown>(userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } +) => { + +const {query: queryOptions} = options ?? {}; + + const queryKey = queryOptions?.queryKey ?? getGetUserActivitiesQueryKey(userId,params); + + + + const queryFn: QueryFunction>> = ({ signal }) => getUserActivities(userId,params, signal); + + + + + + return { queryKey, queryFn, enabled: !!(userId), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } +} + +export type GetUserActivitiesQueryResult = NonNullable>> +export type GetUserActivitiesQueryError = unknown + + +export function useGetUserActivities>, TError = unknown>( + userId: string, + params: undefined | GetUserActivitiesParams, options: { query:Partial>, TError, TData>> & Pick< + DefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + > , 'initialData' + >, } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } +export function useGetUserActivities>, TError = unknown>( + userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>> & Pick< + UndefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + > , 'initialData' + >, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } +export function useGetUserActivities>, TError = unknown>( + userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } + +export function useGetUserActivities>, TError = unknown>( + userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { + + const queryOptions = getGetUserActivitiesQueryOptions(userId,params,options) + + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; + + query.queryKey = queryOptions.queryKey ; + + return query; +} + + + + +export const getGetUserActivitiesSuspenseQueryOptions = >, TError = unknown>(userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } +) => { + +const {query: queryOptions} = options ?? {}; + + const queryKey = queryOptions?.queryKey ?? getGetUserActivitiesQueryKey(userId,params); + + + + const queryFn: QueryFunction>> = ({ signal }) => getUserActivities(userId,params, signal); + + + + + + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } +} + +export type GetUserActivitiesSuspenseQueryResult = NonNullable>> +export type GetUserActivitiesSuspenseQueryError = unknown + + +export function useGetUserActivitiesSuspense>, TError = unknown>( + userId: string, + params: undefined | GetUserActivitiesParams, options: { query:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } +export function useGetUserActivitiesSuspense>, TError = unknown>( + userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } +export function useGetUserActivitiesSuspense>, TError = unknown>( + userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } + +export function useGetUserActivitiesSuspense>, TError = unknown>( + userId: string, + params?: GetUserActivitiesParams, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { + + const queryOptions = getGetUserActivitiesSuspenseQueryOptions(userId,params,options) + + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -132,6 +273,7 @@ export function useGetUserActivitiesInfinite(options?: { mutation?:UseMutationOptions>, TError,{activityId: string}, TContext>, } ): UseMutationOptions>, TError,{activityId: string}, TContext> => { - + const mutationKey = ['deleteUserActivity']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -179,7 +321,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteUserActivity = (options?: { mutation?:UseMutationOptions>, TError,{activityId: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {activityId: string}, @@ -188,7 +330,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteUserActivityMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get network activities @@ -207,8 +349,12 @@ export const getNetworkActivities = ( } -export const getGetNetworkActivitiesQueryKey = (params: GetNetworkActivitiesParams,) => { - return [`/network/activities`, ...(params ? [params]: [])] as const; + + +export const getGetNetworkActivitiesQueryKey = (params?: GetNetworkActivitiesParams,) => { + return [ + `/network/activities`, ...(params ? [params]: []) + ] as const; } @@ -227,7 +373,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetNetworkActivitiesQueryResult = NonNullable>> @@ -242,8 +388,8 @@ export function useGetNetworkActivities> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetNetworkActivities>, TError = unknown>( params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -252,21 +398,21 @@ export function useGetNetworkActivities> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetNetworkActivities>, TError = unknown>( params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetNetworkActivities>, TError = unknown>( params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetNetworkActivitiesQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -275,6 +421,7 @@ export function useGetNetworkActivities>, TError = unknown>(params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -290,7 +437,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetNetworkActivitiesSuspenseQueryResult = NonNullable>> @@ -299,25 +446,25 @@ export type GetNetworkActivitiesSuspenseQueryError = unknown export function useGetNetworkActivitiesSuspense>, TError = unknown>( params: GetNetworkActivitiesParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetNetworkActivitiesSuspense>, TError = unknown>( params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetNetworkActivitiesSuspense>, TError = unknown>( params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetNetworkActivitiesSuspense>, TError = unknown>( params: GetNetworkActivitiesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetNetworkActivitiesSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -326,3 +473,4 @@ export function useGetNetworkActivitiesSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PostUserEpisodesBodyItem[]}, TContext>, } ): UseMutationOptions>, TError,{data: PostUserEpisodesBodyItem[]}, TContext> => { - + const mutationKey = ['postUserEpisodes']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -88,7 +92,7 @@ const {mutation: mutationOptions} = options ? export const usePostUserEpisodes = (options?: { mutation?:UseMutationOptions>, TError,{data: PostUserEpisodesBodyItem[]}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostUserEpisodesBodyItem[]}, @@ -97,7 +101,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostUserEpisodesMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get user episode @@ -116,8 +120,12 @@ export const getUserEpisodes = ( } -export const getGetUserEpisodesQueryKey = (params: GetUserEpisodesParams,) => { - return [`/user/episodes`, ...(params ? [params]: [])] as const; + + +export const getGetUserEpisodesQueryKey = (params?: GetUserEpisodesParams,) => { + return [ + `/user/episodes`, ...(params ? [params]: []) + ] as const; } @@ -136,7 +144,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserEpisodesQueryResult = NonNullable>> @@ -151,8 +159,8 @@ export function useGetUserEpisodes> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserEpisodes>, TError = unknown>( params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -161,21 +169,21 @@ export function useGetUserEpisodes> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserEpisodes>, TError = unknown>( params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserEpisodes>, TError = unknown>( params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserEpisodesQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -184,6 +192,7 @@ export function useGetUserEpisodes>, TError = unknown>(params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -199,7 +208,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserEpisodesSuspenseQueryResult = NonNullable>> @@ -208,25 +217,25 @@ export type GetUserEpisodesSuspenseQueryError = unknown export function useGetUserEpisodesSuspense>, TError = unknown>( params: GetUserEpisodesParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserEpisodesSuspense>, TError = unknown>( params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserEpisodesSuspense>, TError = unknown>( params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserEpisodesSuspense>, TError = unknown>( params: GetUserEpisodesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserEpisodesSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -235,6 +244,7 @@ export function useGetUserEpisodesSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: DeleteUserEpisodesBody}, TContext>, } ): UseMutationOptions>, TError,{data: DeleteUserEpisodesBody}, TContext> => { - + const mutationKey = ['deleteUserEpisodes']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -284,7 +294,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteUserEpisodes = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteUserEpisodesBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: DeleteUserEpisodesBody}, @@ -293,6 +303,6 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteUserEpisodesMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } \ No newline at end of file diff --git a/apps/web/src/api/user-items.ts b/apps/web/src/api/user-items.ts index d638233b..2ed2f7d0 100644 --- a/apps/web/src/api/user-items.ts +++ b/apps/web/src/api/user-items.ts @@ -1,5 +1,5 @@ /** - * Generated by orval v7.5.0 🍺 + * Generated by orval v7.17.2 🍺 * Do not edit manually. * Plotwist * OpenAPI spec version: 0.1.0 @@ -9,7 +9,7 @@ import { useMutation, useQuery, useSuspenseQuery -} from '@tanstack/react-query' +} from '@tanstack/react-query'; import type { DataTag, DefinedInitialDataOptions, @@ -17,6 +17,7 @@ import type { DefinedUseQueryResult, InfiniteData, MutationFunction, + QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, @@ -28,7 +29,8 @@ import type { UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult -} from '@tanstack/react-query' +} from '@tanstack/react-query'; + import type { GetAllUserItems200, GetAllUserItemsParams, @@ -38,12 +40,14 @@ import type { GetUserItemsBody, PutUserItem201, PutUserItemBody -} from './endpoints.schemas' +} from './endpoints.schemas'; + import { axiosInstance } from '../services/axios-instance'; + /** * Upsert user item */ @@ -65,7 +69,7 @@ export const putUserItem = ( export const getPutUserItemMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PutUserItemBody}, TContext>, } ): UseMutationOptions>, TError,{data: PutUserItemBody}, TContext> => { - + const mutationKey = ['putUserItem']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -93,7 +97,7 @@ const {mutation: mutationOptions} = options ? export const usePutUserItem = (options?: { mutation?:UseMutationOptions>, TError,{data: PutUserItemBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PutUserItemBody}, @@ -102,7 +106,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPutUserItemMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get user item @@ -121,8 +125,12 @@ export const getUserItem = ( } -export const getGetUserItemQueryKey = (params: GetUserItemParams,) => { - return [`/user/item`, ...(params ? [params]: [])] as const; + + +export const getGetUserItemQueryKey = (params?: GetUserItemParams,) => { + return [ + `/user/item`, ...(params ? [params]: []) + ] as const; } @@ -141,7 +149,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserItemQueryResult = NonNullable>> @@ -156,8 +164,8 @@ export function useGetUserItem>, Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserItem>, TError = unknown>( params: GetUserItemParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -166,21 +174,21 @@ export function useGetUserItem>, Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserItem>, TError = unknown>( params: GetUserItemParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserItem>, TError = unknown>( params: GetUserItemParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserItemQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -189,6 +197,7 @@ export function useGetUserItem>, + export const getGetUserItemSuspenseQueryOptions = >, TError = unknown>(params: GetUserItemParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -204,7 +213,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserItemSuspenseQueryResult = NonNullable>> @@ -213,25 +222,25 @@ export type GetUserItemSuspenseQueryError = unknown export function useGetUserItemSuspense>, TError = unknown>( params: GetUserItemParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserItemSuspense>, TError = unknown>( params: GetUserItemParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserItemSuspense>, TError = unknown>( params: GetUserItemParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserItemSuspense>, TError = unknown>( params: GetUserItemParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserItemSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -240,6 +249,7 @@ export function useGetUserItemSuspense { - return [`/user/items`, getUserItemsBody] as const; + + +export const getGetUserItemsInfiniteQueryKey = (getUserItemsBody?: GetUserItemsBody,) => { + return [ + 'infinite', `/user/items`, getUserItemsBody + ] as const; + } + +export const getGetUserItemsQueryKey = (getUserItemsBody?: GetUserItemsBody,) => { + return [ + `/user/items`, getUserItemsBody + ] as const; } @@ -268,7 +288,7 @@ export const getGetUserItemsInfiniteQueryOptions = >, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseInfiniteQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserItemsInfiniteQueryResult = NonNullable>> @@ -293,8 +313,8 @@ export function useGetUserItemsInfinite> > , 'initialData' >, } - - ): DefinedUseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseInfiniteQueryResult & { queryKey: DataTag } export function useGetUserItemsInfinite>>, TError = unknown>( getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -303,21 +323,21 @@ export function useGetUserItemsInfinite> > , 'initialData' >, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } export function useGetUserItemsInfinite>>, TError = unknown>( getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } export function useGetUserItemsInfinite>>, TError = unknown>( getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } - - ): UseInfiniteQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseInfiniteQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserItemsInfiniteQueryOptions(getUserItemsBody,options) - const query = useInfiniteQuery(queryOptions) as UseInfiniteQueryResult & { queryKey: DataTag }; + const query = useInfiniteQuery(queryOptions, queryClient) as UseInfiniteQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -326,6 +346,123 @@ export function useGetUserItemsInfinite>, TError = unknown>(getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } +) => { + +const {query: queryOptions} = options ?? {}; + + const queryKey = queryOptions?.queryKey ?? getGetUserItemsQueryKey(getUserItemsBody); + + + + const queryFn: QueryFunction>> = ({ signal }) => getUserItems(getUserItemsBody, signal); + + + + + + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } +} + +export type GetUserItemsQueryResult = NonNullable>> +export type GetUserItemsQueryError = unknown + + +export function useGetUserItems>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options: { query:Partial>, TError, TData>> & Pick< + DefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + > , 'initialData' + >, } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } +export function useGetUserItems>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>> & Pick< + UndefinedInitialDataOptions< + Awaited>, + TError, + Awaited> + > , 'initialData' + >, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } +export function useGetUserItems>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } + +export function useGetUserItems>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { + + const queryOptions = getGetUserItemsQueryOptions(getUserItemsBody,options) + + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; + + query.queryKey = queryOptions.queryKey ; + + return query; +} + + + + +export const getGetUserItemsSuspenseQueryOptions = >, TError = unknown>(getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } +) => { + +const {query: queryOptions} = options ?? {}; + + const queryKey = queryOptions?.queryKey ?? getGetUserItemsQueryKey(getUserItemsBody); + + + + const queryFn: QueryFunction>> = ({ signal }) => getUserItems(getUserItemsBody, signal); + + + + + + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } +} + +export type GetUserItemsSuspenseQueryResult = NonNullable>> +export type GetUserItemsSuspenseQueryError = unknown + + +export function useGetUserItemsSuspense>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options: { query:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } +export function useGetUserItemsSuspense>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } +export function useGetUserItemsSuspense>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } + +export function useGetUserItemsSuspense>, TError = unknown>( + getUserItemsBody: GetUserItemsBody, options?: { query?:Partial>, TError, TData>>, } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { + + const queryOptions = getGetUserItemsSuspenseQueryOptions(getUserItemsBody,options) + + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; + + query.queryKey = queryOptions.queryKey ; + + return query; +} + + + + /** * Delete user item */ @@ -345,7 +482,7 @@ export const deleteUserItemId = ( export const getDeleteUserItemIdMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } ): UseMutationOptions>, TError,{id: string}, TContext> => { - + const mutationKey = ['deleteUserItemId']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -373,7 +510,7 @@ const {mutation: mutationOptions} = options ? export const useDeleteUserItemId = (options?: { mutation?:UseMutationOptions>, TError,{id: string}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {id: string}, @@ -382,7 +519,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getDeleteUserItemIdMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get user items @@ -401,8 +538,12 @@ export const getAllUserItems = ( } -export const getGetAllUserItemsQueryKey = (params: GetAllUserItemsParams,) => { - return [`/user/items/all`, ...(params ? [params]: [])] as const; + + +export const getGetAllUserItemsQueryKey = (params?: GetAllUserItemsParams,) => { + return [ + `/user/items/all`, ...(params ? [params]: []) + ] as const; } @@ -421,7 +562,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetAllUserItemsQueryResult = NonNullable>> @@ -436,8 +577,8 @@ export function useGetAllUserItems> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetAllUserItems>, TError = unknown>( params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -446,21 +587,21 @@ export function useGetAllUserItems> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetAllUserItems>, TError = unknown>( params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetAllUserItems>, TError = unknown>( params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetAllUserItemsQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -469,6 +610,7 @@ export function useGetAllUserItems>, TError = unknown>(params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -484,7 +626,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetAllUserItemsSuspenseQueryResult = NonNullable>> @@ -493,25 +635,25 @@ export type GetAllUserItemsSuspenseQueryError = unknown export function useGetAllUserItemsSuspense>, TError = unknown>( params: GetAllUserItemsParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetAllUserItemsSuspense>, TError = unknown>( params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetAllUserItemsSuspense>, TError = unknown>( params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetAllUserItemsSuspense>, TError = unknown>( params: GetAllUserItemsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetAllUserItemsSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -520,3 +662,4 @@ export function useGetAllUserItemsSuspense { - return [`/user/${id}/stats`] as const; + + +export const getGetUserIdStatsQueryKey = (id?: string,) => { + return [ + `/user/${id}/stats` + ] as const; } @@ -77,7 +85,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdStatsQueryResult = NonNullable>> @@ -92,8 +100,8 @@ export function useGetUserIdStats> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdStats>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -102,21 +110,21 @@ export function useGetUserIdStats> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdStats>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdStats>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdStatsQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -125,6 +133,7 @@ export function useGetUserIdStats>, TError = unknown>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -140,7 +149,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdStatsSuspenseQueryResult = NonNullable>> @@ -149,25 +158,25 @@ export type GetUserIdStatsSuspenseQueryError = unknown export function useGetUserIdStatsSuspense>, TError = unknown>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdStatsSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdStatsSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdStatsSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdStatsSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -176,6 +185,7 @@ export function useGetUserIdStatsSuspense { - return [`/user/${id}/total-hours`] as const; + + +export const getGetUserIdTotalHoursQueryKey = (id?: string,) => { + return [ + `/user/${id}/total-hours` + ] as const; } @@ -212,7 +226,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdTotalHoursQueryResult = NonNullable>> @@ -227,8 +241,8 @@ export function useGetUserIdTotalHours> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdTotalHours>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -237,21 +251,21 @@ export function useGetUserIdTotalHours> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdTotalHours>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdTotalHours>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdTotalHoursQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -260,6 +274,7 @@ export function useGetUserIdTotalHours>, TError = unknown>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -275,7 +290,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdTotalHoursSuspenseQueryResult = NonNullable>> @@ -284,25 +299,25 @@ export type GetUserIdTotalHoursSuspenseQueryError = unknown export function useGetUserIdTotalHoursSuspense>, TError = unknown>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdTotalHoursSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdTotalHoursSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdTotalHoursSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdTotalHoursSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -311,6 +326,7 @@ export function useGetUserIdTotalHoursSuspense { - return [`/user/${id}/reviews-count`] as const; + + +export const getGetUserIdReviewsCountQueryKey = (id?: string,) => { + return [ + `/user/${id}/reviews-count` + ] as const; } @@ -347,7 +367,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdReviewsCountQueryResult = NonNullable>> @@ -362,8 +382,8 @@ export function useGetUserIdReviewsCount> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdReviewsCount>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -372,21 +392,21 @@ export function useGetUserIdReviewsCount> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdReviewsCount>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdReviewsCount>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdReviewsCountQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -395,6 +415,7 @@ export function useGetUserIdReviewsCount>, TError = unknown>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -410,7 +431,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdReviewsCountSuspenseQueryResult = NonNullable>> @@ -419,25 +440,25 @@ export type GetUserIdReviewsCountSuspenseQueryError = unknown export function useGetUserIdReviewsCountSuspense>, TError = unknown>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdReviewsCountSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdReviewsCountSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdReviewsCountSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdReviewsCountSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -446,6 +467,7 @@ export function useGetUserIdReviewsCountSuspense { - return [`/user/${id}/most-watched-series`, ...(params ? [params]: [])] as const; + return [ + `/user/${id}/most-watched-series`, ...(params ? [params]: []) + ] as const; } @@ -486,7 +512,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdMostWatchedSeriesQueryResult = NonNullable>> @@ -502,8 +528,8 @@ export function useGetUserIdMostWatchedSeries> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdMostWatchedSeries>, TError = unknown>( id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -513,23 +539,23 @@ export function useGetUserIdMostWatchedSeries> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdMostWatchedSeries>, TError = unknown>( id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdMostWatchedSeries>, TError = unknown>( id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdMostWatchedSeriesQueryOptions(id,params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -538,6 +564,7 @@ export function useGetUserIdMostWatchedSeries>, TError = unknown>(id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -554,7 +581,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdMostWatchedSeriesSuspenseQueryResult = NonNullable>> @@ -564,28 +591,28 @@ export type GetUserIdMostWatchedSeriesSuspenseQueryError = unknown export function useGetUserIdMostWatchedSeriesSuspense>, TError = unknown>( id: string, params: undefined | GetUserIdMostWatchedSeriesParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdMostWatchedSeriesSuspense>, TError = unknown>( id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdMostWatchedSeriesSuspense>, TError = unknown>( id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdMostWatchedSeriesSuspense>, TError = unknown>( id: string, params?: GetUserIdMostWatchedSeriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdMostWatchedSeriesSuspenseQueryOptions(id,params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -594,6 +621,7 @@ export function useGetUserIdMostWatchedSeriesSuspense { - return [`/user/${id}/watched-genres`, ...(params ? [params]: [])] as const; + return [ + `/user/${id}/watched-genres`, ...(params ? [params]: []) + ] as const; } @@ -634,7 +666,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdWatchedGenresQueryResult = NonNullable>> @@ -650,8 +682,8 @@ export function useGetUserIdWatchedGenres> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedGenres>, TError = unknown>( id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -661,23 +693,23 @@ export function useGetUserIdWatchedGenres> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedGenres>, TError = unknown>( id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedGenres>, TError = unknown>( id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdWatchedGenresQueryOptions(id,params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -686,6 +718,7 @@ export function useGetUserIdWatchedGenres>, TError = unknown>(id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -702,7 +735,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdWatchedGenresSuspenseQueryResult = NonNullable>> @@ -712,28 +745,28 @@ export type GetUserIdWatchedGenresSuspenseQueryError = unknown export function useGetUserIdWatchedGenresSuspense>, TError = unknown>( id: string, params: undefined | GetUserIdWatchedGenresParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedGenresSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedGenresSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedGenresSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedGenresParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdWatchedGenresSuspenseQueryOptions(id,params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -742,6 +775,7 @@ export function useGetUserIdWatchedGenresSuspense { - return [`/user/${id}/watched-cast`, ...(params ? [params]: [])] as const; + return [ + `/user/${id}/watched-cast`, ...(params ? [params]: []) + ] as const; } @@ -782,7 +820,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdWatchedCastQueryResult = NonNullable>> @@ -798,8 +836,8 @@ export function useGetUserIdWatchedCast> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCast>, TError = unknown>( id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -809,23 +847,23 @@ export function useGetUserIdWatchedCast> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCast>, TError = unknown>( id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCast>, TError = unknown>( id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdWatchedCastQueryOptions(id,params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -834,6 +872,7 @@ export function useGetUserIdWatchedCast>, TError = unknown>(id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -850,7 +889,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdWatchedCastSuspenseQueryResult = NonNullable>> @@ -860,28 +899,28 @@ export type GetUserIdWatchedCastSuspenseQueryError = unknown export function useGetUserIdWatchedCastSuspense>, TError = unknown>( id: string, params: undefined | GetUserIdWatchedCastParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCastSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCastSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCastSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedCastParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdWatchedCastSuspenseQueryOptions(id,params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -890,6 +929,7 @@ export function useGetUserIdWatchedCastSuspense { - return [`/user/${id}/watched-countries`, ...(params ? [params]: [])] as const; + return [ + `/user/${id}/watched-countries`, ...(params ? [params]: []) + ] as const; } @@ -930,7 +974,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdWatchedCountriesQueryResult = NonNullable>> @@ -946,8 +990,8 @@ export function useGetUserIdWatchedCountries> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCountries>, TError = unknown>( id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -957,23 +1001,23 @@ export function useGetUserIdWatchedCountries> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCountries>, TError = unknown>( id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCountries>, TError = unknown>( id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdWatchedCountriesQueryOptions(id,params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -982,6 +1026,7 @@ export function useGetUserIdWatchedCountries>, TError = unknown>(id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -998,7 +1043,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdWatchedCountriesSuspenseQueryResult = NonNullable>> @@ -1008,28 +1053,28 @@ export type GetUserIdWatchedCountriesSuspenseQueryError = unknown export function useGetUserIdWatchedCountriesSuspense>, TError = unknown>( id: string, params: undefined | GetUserIdWatchedCountriesParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCountriesSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCountriesSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdWatchedCountriesSuspense>, TError = unknown>( id: string, params?: GetUserIdWatchedCountriesParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdWatchedCountriesSuspenseQueryOptions(id,params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1038,6 +1083,7 @@ export function useGetUserIdWatchedCountriesSuspense { - return [`/user/${id}/best-reviews`, ...(params ? [params]: [])] as const; + return [ + `/user/${id}/best-reviews`, ...(params ? [params]: []) + ] as const; } @@ -1078,7 +1128,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdBestReviewsQueryResult = NonNullable>> @@ -1094,8 +1144,8 @@ export function useGetUserIdBestReviews> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdBestReviews>, TError = unknown>( id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>> & Pick< @@ -1105,23 +1155,23 @@ export function useGetUserIdBestReviews> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdBestReviews>, TError = unknown>( id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdBestReviews>, TError = unknown>( id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdBestReviewsQueryOptions(id,params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1130,6 +1180,7 @@ export function useGetUserIdBestReviews>, TError = unknown>(id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -1146,7 +1197,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdBestReviewsSuspenseQueryResult = NonNullable>> @@ -1156,28 +1207,28 @@ export type GetUserIdBestReviewsSuspenseQueryError = unknown export function useGetUserIdBestReviewsSuspense>, TError = unknown>( id: string, params: undefined | GetUserIdBestReviewsParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdBestReviewsSuspense>, TError = unknown>( id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdBestReviewsSuspense>, TError = unknown>( id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdBestReviewsSuspense>, TError = unknown>( id: string, params?: GetUserIdBestReviewsParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdBestReviewsSuspenseQueryOptions(id,params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1186,6 +1237,7 @@ export function useGetUserIdBestReviewsSuspense { - return [`/user/${id}/items-status`] as const; + + +export const getGetUserIdItemsStatusQueryKey = (id?: string,) => { + return [ + `/user/${id}/items-status` + ] as const; } @@ -1222,7 +1278,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdItemsStatusQueryResult = NonNullable>> @@ -1237,8 +1293,8 @@ export function useGetUserIdItemsStatus> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserIdItemsStatus>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -1247,21 +1303,21 @@ export function useGetUserIdItemsStatus> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdItemsStatus>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserIdItemsStatus>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdItemsStatusQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1270,6 +1326,7 @@ export function useGetUserIdItemsStatus>, TError = unknown>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -1285,7 +1342,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserIdItemsStatusSuspenseQueryResult = NonNullable>> @@ -1294,25 +1351,25 @@ export type GetUserIdItemsStatusSuspenseQueryError = unknown export function useGetUserIdItemsStatusSuspense>, TError = unknown>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdItemsStatusSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdItemsStatusSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserIdItemsStatusSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserIdItemsStatusSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1321,3 +1378,4 @@ export function useGetUserIdItemsStatusSuspense(options?: { mutation?:UseMutationOptions>, TError,{data: PostUsersCreateBody}, TContext>, } ): UseMutationOptions>, TError,{data: PostUsersCreateBody}, TContext> => { - + const mutationKey = ['postUsersCreate']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -103,7 +107,7 @@ const {mutation: mutationOptions} = options ? export const usePostUsersCreate = (options?: { mutation?:UseMutationOptions>, TError,{data: PostUsersCreateBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PostUsersCreateBody}, @@ -112,7 +116,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostUsersCreateMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Check if this username is available @@ -131,8 +135,12 @@ export const getUsersAvailableUsername = ( } -export const getGetUsersAvailableUsernameQueryKey = (params: GetUsersAvailableUsernameParams,) => { - return [`/users/available-username`, ...(params ? [params]: [])] as const; + + +export const getGetUsersAvailableUsernameQueryKey = (params?: GetUsersAvailableUsernameParams,) => { + return [ + `/users/available-username`, ...(params ? [params]: []) + ] as const; } @@ -151,7 +159,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersAvailableUsernameQueryResult = NonNullable>> @@ -166,8 +174,8 @@ export function useGetUsersAvailableUsername> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableUsername>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -176,21 +184,21 @@ export function useGetUsersAvailableUsername> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableUsername>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableUsername>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersAvailableUsernameQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -199,6 +207,7 @@ export function useGetUsersAvailableUsername>, TError = GetUsersAvailableUsername409>(params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -214,7 +223,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersAvailableUsernameSuspenseQueryResult = NonNullable>> @@ -223,25 +232,25 @@ export type GetUsersAvailableUsernameSuspenseQueryError = GetUsersAvailableUsern export function useGetUsersAvailableUsernameSuspense>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableUsernameSuspense>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableUsernameSuspense>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableUsernameSuspense>, TError = GetUsersAvailableUsername409>( params: GetUsersAvailableUsernameParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersAvailableUsernameSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -250,6 +259,7 @@ export function useGetUsersAvailableUsernameSuspense { - return [`/users/available-email`, ...(params ? [params]: [])] as const; + + +export const getGetUsersAvailableEmailQueryKey = (params?: GetUsersAvailableEmailParams,) => { + return [ + `/users/available-email`, ...(params ? [params]: []) + ] as const; } @@ -287,7 +301,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersAvailableEmailQueryResult = NonNullable>> @@ -302,8 +316,8 @@ export function useGetUsersAvailableEmail> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableEmail>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -312,21 +326,21 @@ export function useGetUsersAvailableEmail> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableEmail>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableEmail>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersAvailableEmailQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -335,6 +349,7 @@ export function useGetUsersAvailableEmail>, TError = GetUsersAvailableEmail409>(params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -350,7 +365,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersAvailableEmailSuspenseQueryResult = NonNullable>> @@ -359,25 +374,25 @@ export type GetUsersAvailableEmailSuspenseQueryError = GetUsersAvailableEmail409 export function useGetUsersAvailableEmailSuspense>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableEmailSuspense>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableEmailSuspense>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersAvailableEmailSuspense>, TError = GetUsersAvailableEmail409>( params: GetUsersAvailableEmailParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersAvailableEmailSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -386,6 +401,7 @@ export function useGetUsersAvailableEmailSuspense { - return [`/users/${username}`] as const; + + +export const getGetUsersUsernameQueryKey = (username?: string,) => { + return [ + `/users/${username}` + ] as const; } @@ -422,7 +442,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(username), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(username), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersUsernameQueryResult = NonNullable>> @@ -437,8 +457,8 @@ export function useGetUsersUsername> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUsersUsername>, TError = unknown>( username: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -447,21 +467,21 @@ export function useGetUsersUsername> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersUsername>, TError = unknown>( username: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersUsername>, TError = unknown>( username: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersUsernameQueryOptions(username,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -470,6 +490,7 @@ export function useGetUsersUsername>, TError = unknown>(username: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -485,7 +506,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersUsernameSuspenseQueryResult = NonNullable>> @@ -494,25 +515,25 @@ export type GetUsersUsernameSuspenseQueryError = unknown export function useGetUsersUsernameSuspense>, TError = unknown>( username: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersUsernameSuspense>, TError = unknown>( username: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersUsernameSuspense>, TError = unknown>( username: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersUsernameSuspense>, TError = unknown>( username: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersUsernameSuspenseQueryOptions(username,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -521,6 +542,7 @@ export function useGetUsersUsernameSuspense { - return [`/user/by/${id}`] as const; + + +export const getGetUserByIdQueryKey = (id?: string,) => { + return [ + `/user/by/${id}` + ] as const; } @@ -557,7 +583,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, enabled: !!(id), ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserByIdQueryResult = NonNullable>> @@ -572,8 +598,8 @@ export function useGetUserById>, Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserById>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -582,21 +608,21 @@ export function useGetUserById>, Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserById>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserById>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserByIdQueryOptions(id,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -605,6 +631,7 @@ export function useGetUserById>, + export const getGetUserByIdSuspenseQueryOptions = >, TError = unknown>(id: string, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -620,7 +647,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserByIdSuspenseQueryResult = NonNullable>> @@ -629,25 +656,25 @@ export type GetUserByIdSuspenseQueryError = unknown export function useGetUserByIdSuspense>, TError = unknown>( id: string, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserByIdSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserByIdSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserByIdSuspense>, TError = unknown>( id: string, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserByIdSuspenseQueryOptions(id,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -656,8 +683,9 @@ export function useGetUserByIdSuspense { - return [`/me`] as const; + return [ + `/me` + ] as const; } @@ -692,7 +724,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetMeQueryResult = NonNullable>> @@ -707,8 +739,8 @@ export function useGetMe>, TError = unk Awaited> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetMe>, TError = unknown>( options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -717,21 +749,21 @@ export function useGetMe>, TError = unk Awaited> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetMe>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetMe>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetMeQueryOptions(options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -740,6 +772,7 @@ export function useGetMe>, TError = unk + export const getGetMeSuspenseQueryOptions = >, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } ) => { @@ -755,7 +788,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetMeSuspenseQueryResult = NonNullable>> @@ -764,25 +797,25 @@ export type GetMeSuspenseQueryError = unknown export function useGetMeSuspense>, TError = unknown>( options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetMeSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetMeSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetMeSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetMeSuspenseQueryOptions(options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -791,6 +824,7 @@ export function useGetMeSuspense>, TErr + /** * Update user */ @@ -812,7 +846,7 @@ export const patchUser = ( export const getPatchUserMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PatchUserBody}, TContext>, } ): UseMutationOptions>, TError,{data: PatchUserBody}, TContext> => { - + const mutationKey = ['patchUser']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -840,7 +874,7 @@ const {mutation: mutationOptions} = options ? export const usePatchUser = (options?: { mutation?:UseMutationOptions>, TError,{data: PatchUserBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PatchUserBody}, @@ -849,7 +883,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPatchUserMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Update user password @@ -872,7 +906,7 @@ export const patchUserPassword = ( export const getPatchUserPasswordMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PatchUserPasswordBody}, TContext>, } ): UseMutationOptions>, TError,{data: PatchUserPasswordBody}, TContext> => { - + const mutationKey = ['patchUserPassword']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -900,7 +934,7 @@ const {mutation: mutationOptions} = options ? export const usePatchUserPassword = (options?: { mutation?:UseMutationOptions>, TError,{data: PatchUserPasswordBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: PatchUserPasswordBody}, @@ -909,7 +943,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPatchUserPasswordMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Update user preferences @@ -932,7 +966,7 @@ export const updateUserPreferences = ( export const getUpdateUserPreferencesMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: UpdateUserPreferencesBody}, TContext>, } ): UseMutationOptions>, TError,{data: UpdateUserPreferencesBody}, TContext> => { - + const mutationKey = ['updateUserPreferences']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -960,7 +994,7 @@ const {mutation: mutationOptions} = options ? export const useUpdateUserPreferences = (options?: { mutation?:UseMutationOptions>, TError,{data: UpdateUserPreferencesBody}, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, {data: UpdateUserPreferencesBody}, @@ -969,7 +1003,7 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getUpdateUserPreferencesMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } /** * Get user preferences @@ -987,8 +1021,12 @@ export const getUserPreferences = ( } + + export const getGetUserPreferencesQueryKey = () => { - return [`/user/preferences`] as const; + return [ + `/user/preferences` + ] as const; } @@ -1007,7 +1045,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserPreferencesQueryResult = NonNullable>> @@ -1022,8 +1060,8 @@ export function useGetUserPreferences> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUserPreferences>, TError = unknown>( options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -1032,21 +1070,21 @@ export function useGetUserPreferences> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserPreferences>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUserPreferences>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserPreferencesQueryOptions(options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1055,6 +1093,7 @@ export function useGetUserPreferences>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } ) => { @@ -1070,7 +1109,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUserPreferencesSuspenseQueryResult = NonNullable>> @@ -1079,25 +1118,25 @@ export type GetUserPreferencesSuspenseQueryError = unknown export function useGetUserPreferencesSuspense>, TError = unknown>( options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserPreferencesSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserPreferencesSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUserPreferencesSuspense>, TError = unknown>( options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUserPreferencesSuspenseQueryOptions(options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1106,6 +1145,7 @@ export function useGetUserPreferencesSuspense { - return [`/users/search`, ...(params ? [params]: [])] as const; + + +export const getGetUsersSearchQueryKey = (params?: GetUsersSearchParams,) => { + return [ + `/users/search`, ...(params ? [params]: []) + ] as const; } @@ -1143,7 +1187,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersSearchQueryResult = NonNullable>> @@ -1158,8 +1202,8 @@ export function useGetUsersSearch> > , 'initialData' >, } - - ): DefinedUseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): DefinedUseQueryResult & { queryKey: DataTag } export function useGetUsersSearch>, TError = unknown>( params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>> & Pick< UndefinedInitialDataOptions< @@ -1168,21 +1212,21 @@ export function useGetUsersSearch> > , 'initialData' >, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersSearch>, TError = unknown>( params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } export function useGetUsersSearch>, TError = unknown>( params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersSearchQueryOptions(params,options) - const query = useQuery(queryOptions) as UseQueryResult & { queryKey: DataTag }; + const query = useQuery(queryOptions, queryClient) as UseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1191,6 +1235,7 @@ export function useGetUsersSearch>, TError = unknown>(params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>>, } ) => { @@ -1206,7 +1251,7 @@ const {query: queryOptions} = options ?? {}; - return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } + return { queryKey, queryFn, ...queryOptions} as UseSuspenseQueryOptions>, TError, TData> & { queryKey: DataTag } } export type GetUsersSearchSuspenseQueryResult = NonNullable>> @@ -1215,25 +1260,25 @@ export type GetUsersSearchSuspenseQueryError = unknown export function useGetUsersSearchSuspense>, TError = unknown>( params: GetUsersSearchParams, options: { query:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersSearchSuspense>, TError = unknown>( params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersSearchSuspense>, TError = unknown>( params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } export function useGetUsersSearchSuspense>, TError = unknown>( params: GetUsersSearchParams, options?: { query?:Partial>, TError, TData>>, } - - ): UseSuspenseQueryResult & { queryKey: DataTag } { + , queryClient?: QueryClient + ): UseSuspenseQueryResult & { queryKey: DataTag } { const queryOptions = getGetUsersSearchSuspenseQueryOptions(params,options) - const query = useSuspenseQuery(queryOptions) as UseSuspenseQueryResult & { queryKey: DataTag }; + const query = useSuspenseQuery(queryOptions, queryClient) as UseSuspenseQueryResult & { queryKey: DataTag }; query.queryKey = queryOptions.queryKey ; @@ -1242,3 +1287,4 @@ export function useGetUsersSearchSuspense(options?: { mutation?:UseMutationOptions>, TError,void, TContext>, } ): UseMutationOptions>, TError,void, TContext> => { - + const mutationKey = ['postCompleteStripeSubscription']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? @@ -65,7 +68,7 @@ const {mutation: mutationOptions} = options ? export const usePostCompleteStripeSubscription = (options?: { mutation?:UseMutationOptions>, TError,void, TContext>, } -): UseMutationResult< + , queryClient?: QueryClient): UseMutationResult< Awaited>, TError, void, @@ -74,6 +77,6 @@ const {mutation: mutationOptions} = options ? const mutationOptions = getPostCompleteStripeSubscriptionMutationOptions(options); - return useMutation(mutationOptions); + return useMutation(mutationOptions, queryClient); } \ No newline at end of file diff --git a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx new file mode 100644 index 00000000..37720519 --- /dev/null +++ b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx @@ -0,0 +1,119 @@ +'use client' + +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from '@plotwist/ui/components/ui/alert-dialog' +import { Badge } from '@plotwist/ui/components/ui/badge' +import { Button } from '@plotwist/ui/components/ui/button' +import { useMutation } from '@tanstack/react-query' +import { useRouter } from 'next/navigation' +import { toast } from 'sonner' +import type { GetUsersUsername200User } from '@/api/endpoints.schemas' +import { deleteSubscription } from '@/api/subscriptions' +import { useLanguage } from '@/context/language' + +type SubscriptionFormProps = { + user: GetUsersUsername200User +} + +export function SubscriptionForm({ user }: SubscriptionFormProps) { + const { dictionary } = useLanguage() + const router = useRouter() + + const cancelMutation = useMutation({ + mutationFn: (when: 'now' | 'at_end_of_current_period') => + deleteSubscription({ when }), + onSuccess: () => { + toast.success( + (dictionary as Record).cancel_subscription_success ?? + 'Subscription cancelled' + ) + router.refresh() + }, + onError: () => { + toast.error( + (dictionary as Record).cancel_subscription_error ?? + 'Failed to cancel subscription' + ) + }, + }) + + const isPro = user.subscriptionType === 'PRO' + + if (!isPro) { + return ( +
+

+ {(dictionary as Record).subscription_plan ?? 'Plan'}:{' '} + + {(dictionary as Record).free_plan ?? 'Free'} + +

+
+ ) + } + + return ( +
+

+ {(dictionary as Record).subscription_plan ?? 'Plan'}:{' '} + PRO +

+ +
+ + + + + + + + {(dictionary as Record) + .cancel_subscription_confirm_title ?? 'Cancel subscription?'} + + + {(dictionary as Record) + .cancel_subscription_confirm_description ?? + 'Choose when to cancel. You can keep PRO until the end of your billing period.'} + + + + + {(dictionary as Record).cancel ?? 'Cancel'} + + + cancelMutation.mutate('at_end_of_current_period') + } + disabled={cancelMutation.isPending} + className="bg-muted text-muted-foreground hover:bg-muted/90" + > + {(dictionary as Record) + .cancel_at_end_of_period ?? 'At end of period'} + + cancelMutation.mutate('now')} + disabled={cancelMutation.isPending} + className="bg-destructive text-destructive-foreground hover:bg-destructive/90" + > + {(dictionary as Record).cancel_now ?? + 'Cancel now'} + + + + +
+
+ ) +} diff --git a/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx b/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx index de3ef84b..68595df3 100644 --- a/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx @@ -28,6 +28,7 @@ import { useLanguage } from '@/context/language' import { useSession } from '@/context/session' import { useMediaQuery } from '@/hooks/use-media-query' import { SocialLinksForm } from './social-links-form' +import { SubscriptionForm } from './subscription-form' import { UserForm } from './user-form' import { UserPreferences } from './user-preferences' @@ -40,7 +41,9 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { const [tab, setTab] = useQueryState('tab') const [open, setOpen] = useState( - tab ? ['account', 'social-links', 'preferences'].includes(tab) : false + tab + ? ['account', 'social-links', 'preferences', 'subscription'].includes(tab) + : false ) const { dictionary } = useLanguage() @@ -65,7 +68,7 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { {dictionary.preferences} - + {dictionary.subscription} @@ -82,6 +85,10 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { + + + + ) From edd1dbdbe257bae1a2fddead7df7250a7faae936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 01:18:34 -0300 Subject: [PATCH 10/27] refactor(subscription-form): simplify toast messages and improve dictionary usage for better readability --- apps/web/next-env.d.ts | 2 +- .../_components/subscription-form.tsx | 45 +++++++------------ 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts index a3e4680c..c4b7818f 100644 --- a/apps/web/next-env.d.ts +++ b/apps/web/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import './.next/dev/types/routes.d.ts' +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx index 37720519..9d4c198b 100644 --- a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx @@ -32,17 +32,11 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { mutationFn: (when: 'now' | 'at_end_of_current_period') => deleteSubscription({ when }), onSuccess: () => { - toast.success( - (dictionary as Record).cancel_subscription_success ?? - 'Subscription cancelled' - ) + toast.success(dictionary.cancel_subscription_success) router.refresh() }, onError: () => { - toast.error( - (dictionary as Record).cancel_subscription_error ?? - 'Failed to cancel subscription' - ) + toast.error(dictionary.cancel_subscription_error) }, }) @@ -51,47 +45,40 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { if (!isPro) { return (
-

- {(dictionary as Record).subscription_plan ?? 'Plan'}:{' '} +

+ {dictionary.subscription_plan}:{' '} - {(dictionary as Record).free_plan ?? 'Free'} + {dictionary.home_prices.free_plan.title} -

+
) } return (
-

- {(dictionary as Record).subscription_plan ?? 'Plan'}:{' '} - PRO -

+
+ {dictionary.subscription_plan}: PRO +
- {(dictionary as Record) - .cancel_subscription_confirm_title ?? 'Cancel subscription?'} + {dictionary.cancel_subscription_confirm_title} - {(dictionary as Record) - .cancel_subscription_confirm_description ?? - 'Choose when to cancel. You can keep PRO until the end of your billing period.'} + {dictionary.cancel_subscription_confirm_description} - - {(dictionary as Record).cancel ?? 'Cancel'} - + {dictionary.cancel} cancelMutation.mutate('at_end_of_current_period') @@ -99,16 +86,14 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { disabled={cancelMutation.isPending} className="bg-muted text-muted-foreground hover:bg-muted/90" > - {(dictionary as Record) - .cancel_at_end_of_period ?? 'At end of period'} + {dictionary.cancel_at_end_of_period} cancelMutation.mutate('now')} disabled={cancelMutation.isPending} className="bg-destructive text-destructive-foreground hover:bg-destructive/90" > - {(dictionary as Record).cancel_now ?? - 'Cancel now'} + {dictionary.cancel_now} From 9028823f4073cb969b5c29e200b5c12b80b2620d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Fri, 30 Jan 2026 01:22:11 -0300 Subject: [PATCH 11/27] refactor(subscriptions): improve code formatting and readability in subscription repository and cancellation scheduling --- .../src/db/repositories/subscription-repository.ts | 9 +++++++-- .../subscriptions/schedule-subscription-cancellation.ts | 4 +++- .../src/http/controllers/stripe-webhook-controller.ts | 2 +- apps/web/next-env.d.ts | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/backend/src/db/repositories/subscription-repository.ts b/apps/backend/src/db/repositories/subscription-repository.ts index 1a1a1d24..53a2932b 100644 --- a/apps/backend/src/db/repositories/subscription-repository.ts +++ b/apps/backend/src/db/repositories/subscription-repository.ts @@ -26,7 +26,10 @@ export async function getSubscriptionByProviderSubscriptionId( providerSubscriptionId: string ) { return db.query.subscriptions.findFirst({ - where: eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId), + where: eq( + schema.subscriptions.providerSubscriptionId, + providerSubscriptionId + ), }) } @@ -47,7 +50,9 @@ export async function updateSubscriptionStatusByProviderSubscriptionId( canceledAt: params.canceledAt, cancellationReason: params.cancellationReason, }) - .where(eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId)) + .where( + eq(schema.subscriptions.providerSubscriptionId, providerSubscriptionId) + ) .returning() return subscription diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts index dbd9892a..00b26ee2 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts @@ -16,7 +16,9 @@ export async function scheduleCancellation( } try { - const canceledAt = await provider.getCurrentPeriodEnd(providerSubscriptionId) + const canceledAt = await provider.getCurrentPeriodEnd( + providerSubscriptionId + ) await provider.scheduleCancelAtPeriodEnd(providerSubscriptionId, canceledAt) const scheduledCancellation = await cancelUserSubscription({ diff --git a/apps/backend/src/http/controllers/stripe-webhook-controller.ts b/apps/backend/src/http/controllers/stripe-webhook-controller.ts index ed50a370..69abf068 100644 --- a/apps/backend/src/http/controllers/stripe-webhook-controller.ts +++ b/apps/backend/src/http/controllers/stripe-webhook-controller.ts @@ -1,7 +1,7 @@ import type { FastifyReply, FastifyRequest } from 'fastify' import type Stripe from 'stripe' -import { stripe } from '@/adapters/stripe' import { logger } from '@/adapters/logger' +import { stripe } from '@/adapters/stripe' import { config } from '@/config' import { DomainError } from '@/domain/errors/domain-error' import { completeSubscription } from '@/domain/services/subscriptions/complete-subscription' diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts index c4b7818f..a3e4680c 100644 --- a/apps/web/next-env.d.ts +++ b/apps/web/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/dev/types/routes.d.ts"; +import './.next/dev/types/routes.d.ts' // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. From 7f7087ca57e7cfbff5f91fcc78fdc4880103509e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 2 Feb 2026 11:18:28 -0300 Subject: [PATCH 12/27] feat(migrations): add new migration entry for altering subscriptions table --- apps/backend/src/db/migrations/meta/_journal.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/backend/src/db/migrations/meta/_journal.json b/apps/backend/src/db/migrations/meta/_journal.json index eef9c295..4fa7bf5e 100644 --- a/apps/backend/src/db/migrations/meta/_journal.json +++ b/apps/backend/src/db/migrations/meta/_journal.json @@ -386,6 +386,13 @@ "when": 1768684257805, "tag": "20260117211057_tearful_vertigo", "breakpoints": true + }, + { + "idx": 55, + "version": "7", + "when": 1769741240595, + "tag": "20260130024720_alter_subscriptions_table", + "breakpoints": true } ] } \ No newline at end of file From 55503ed5caf5ee5fbaabecd3993c64aea2fd63ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 2 Feb 2026 11:21:35 -0300 Subject: [PATCH 13/27] chore(dependencies): update various package versions in pnpm-lock.yaml, including google-auth-library, jsonwebtoken, and jwks-rsa for improved compatibility and security --- pnpm-lock.yaml | 206 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 901a1303..b729d45a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,12 +110,21 @@ importers: fastify-type-provider-zod: specifier: ^6.1.0 version: 6.1.0(@fastify/swagger@9.6.1)(fastify@5.7.2)(openapi-types@12.1.3)(zod@4.3.6) + google-auth-library: + specifier: ^9.14.0 + version: 9.15.1 https: specifier: ^1.0.0 version: 1.0.0 ioredis: specifier: ^5.8.2 version: 5.9.2 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.3 + jwks-rsa: + specifier: ^3.1.0 + version: 3.2.2 node-cron: specifier: ^4.2.1 version: 4.2.1 @@ -165,6 +174,9 @@ importers: '@types/ioredis-mock': specifier: ^8.2.6 version: 8.2.6(ioredis@5.9.2) + '@types/jsonwebtoken': + specifier: ^9.0.6 + version: 9.0.10 '@types/node': specifier: ^25.0.3 version: 25.1.0 @@ -4283,6 +4295,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jsonwebtoken@9.0.10': + resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -4703,6 +4718,9 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -4741,6 +4759,9 @@ packages: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -5821,6 +5842,14 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + + gcp-metadata@6.1.1: + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} + engines: {node: '>=14'} + generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -5904,6 +5933,14 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + google-auth-library@9.15.1: + resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} + engines: {node: '>=14'} + + google-logging-utils@0.0.2: + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5915,6 +5952,10 @@ packages: resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -6323,6 +6364,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -6362,6 +6406,20 @@ packages: jsonschema@1.5.0: resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jwks-rsa@3.2.2: + resolution: {integrity: sha512-BqTyEDV+lS8F2trk3A+qJnxV5Q9EqKCBJOPti3W97r7qTympCZjb7h2X6f2kc+0K3rsSTY1/6YG2eaXKoj497w==} + engines: {node: '>=14'} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -6393,6 +6451,9 @@ packages: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} + limiter@1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -6413,21 +6474,45 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + lodash.isempty@4.4.0: resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.omitby@4.6.0: resolution: {integrity: sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.topath@4.5.2: resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} @@ -6489,6 +6574,9 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lru-memoizer@2.3.0: + resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} + lucide-react@0.562.0: resolution: {integrity: sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==} peerDependencies: @@ -8452,6 +8540,10 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + validator@13.15.26: resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==} engines: {node: '>= 0.10'} @@ -12881,6 +12973,11 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/jsonwebtoken@9.0.10': + dependencies: + '@types/ms': 2.1.0 + '@types/node': 25.1.0 + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -13340,6 +13437,8 @@ snapshots: dependencies: require-from-string: 2.0.2 + bignumber.js@9.3.1: {} + binary-extensions@2.3.0: {} bl@4.1.0: @@ -13379,6 +13478,8 @@ snapshots: buffer-crc32@1.0.0: {} + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@5.6.0: @@ -14546,6 +14647,26 @@ snapshots: functions-have-names@1.2.3: {} + gaxios@6.7.1: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + is-stream: 2.0.1 + node-fetch: 2.7.0 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@6.1.1: + dependencies: + gaxios: 6.7.1 + google-logging-utils: 0.0.2 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -14648,12 +14769,34 @@ snapshots: globrex@0.1.2: {} + google-auth-library@9.15.1: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.7.1 + gcp-metadata: 6.1.1 + gtoken: 7.1.0 + jws: 4.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + google-logging-utils@0.0.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} graphql@16.12.0: {} + gtoken@7.1.0: + dependencies: + gaxios: 6.7.1 + jws: 4.0.1 + transitivePeerDependencies: + - encoding + - supports-color + gzip-size@6.0.0: dependencies: duplexer: 0.1.2 @@ -15105,6 +15248,10 @@ snapshots: jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + json-parse-even-better-errors@2.3.1: {} json-schema-ref-resolver@3.0.0: @@ -15143,6 +15290,40 @@ snapshots: jsonschema@1.5.0: {} + jsonwebtoken@9.0.3: + dependencies: + jws: 4.0.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.3 + + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jwks-rsa@3.2.2: + dependencies: + '@types/jsonwebtoken': 9.0.10 + debug: 4.4.3 + jose: 4.15.9 + limiter: 1.1.5 + lru-memoizer: 2.3.0 + transitivePeerDependencies: + - supports-color + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + kleur@3.0.3: {} lazystream@1.0.1: @@ -15172,6 +15353,8 @@ snapshots: lilconfig@3.1.3: {} + limiter@1.1.5: {} + lines-and-columns@1.2.4: {} linkify-it@5.0.0: @@ -15188,16 +15371,32 @@ snapshots: lodash.camelcase@4.3.0: {} + lodash.clonedeep@4.5.0: {} + lodash.debounce@4.0.8: {} lodash.defaults@4.2.0: {} + lodash.includes@4.3.0: {} + lodash.isarguments@3.1.0: {} + lodash.isboolean@3.0.3: {} + lodash.isempty@4.4.0: {} + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + lodash.omitby@4.6.0: {} + lodash.once@4.1.1: {} + lodash.topath@4.5.2: {} lodash.uniq@4.5.0: {} @@ -15248,6 +15447,11 @@ snapshots: lru-cache@7.18.3: {} + lru-memoizer@2.3.0: + dependencies: + lodash.clonedeep: 4.5.0 + lru-cache: 6.0.0 + lucide-react@0.562.0(react@19.2.4): dependencies: react: 19.2.4 @@ -17704,6 +17908,8 @@ snapshots: uuid@8.3.2: {} + uuid@9.0.1: {} + validator@13.15.26: {} vary@1.1.2: {} From 2657d8f7d8ce429f0f8400b2f6e03402d2be0493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 2 Feb 2026 11:28:12 -0300 Subject: [PATCH 14/27] refactor(routes): clean up user-items and watch-entries routes by removing unused imports and improving code formatting --- apps/backend/src/db/schema/index.ts | 15 ++++--- .../user-items/get-user-items-count.ts | 4 +- apps/backend/src/http/routes/user-items.ts | 9 +--- apps/backend/src/http/routes/watch-entries.ts | 2 +- .../AccentColor.colorset/Contents.json | 10 ++--- .../AppIcon.appiconset/Contents.json | 44 +++++++++---------- .../Plotwist/Assets.xcassets/Contents.json | 6 +-- .../FilmStrip.imageset/Contents.json | 28 ++++++------ apps/web/next-env.d.ts | 2 +- .../_components/user-activities.tsx | 12 ++--- 10 files changed, 66 insertions(+), 66 deletions(-) diff --git a/apps/backend/src/db/schema/index.ts b/apps/backend/src/db/schema/index.ts index 0ffcb97c..12321b88 100644 --- a/apps/backend/src/db/schema/index.ts +++ b/apps/backend/src/db/schema/index.ts @@ -308,12 +308,15 @@ export const userWatchEntries = pgTable( }) ) -export const userWatchEntriesRelations = relations(userWatchEntries, ({ one }) => ({ - userItem: one(userItems, { - fields: [userWatchEntries.userItemId], - references: [userItems.id], - }), -})) +export const userWatchEntriesRelations = relations( + userWatchEntries, + ({ one }) => ({ + userItem: one(userItems, { + fields: [userWatchEntries.userItemId], + references: [userItems.id], + }), + }) +) export const magicTokens = pgTable( 'magic_tokens', diff --git a/apps/backend/src/domain/services/user-items/get-user-items-count.ts b/apps/backend/src/domain/services/user-items/get-user-items-count.ts index 417524c4..bfea8e9b 100644 --- a/apps/backend/src/domain/services/user-items/get-user-items-count.ts +++ b/apps/backend/src/domain/services/user-items/get-user-items-count.ts @@ -4,7 +4,9 @@ type GetUserItemsCountInput = { userId: string } -export async function getUserItemsCountService({ userId }: GetUserItemsCountInput) { +export async function getUserItemsCountService({ + userId, +}: GetUserItemsCountInput) { const count = await selectUserItemsCount(userId) return { diff --git a/apps/backend/src/http/routes/user-items.ts b/apps/backend/src/http/routes/user-items.ts index 57130cdd..e7ff8935 100644 --- a/apps/backend/src/http/routes/user-items.ts +++ b/apps/backend/src/http/routes/user-items.ts @@ -5,6 +5,7 @@ import { getAllUserItemsController, getUserItemController, getUserItemsController, + getUserItemsCountController, upsertUserItemController, } from '../controllers/user-items-controller' import { verifyJwt } from '../middlewares/verify-jwt' @@ -21,14 +22,6 @@ import { upsertUserItemBodySchema, upsertUserItemResponseSchema, } from '../schemas/user-items' -import { - deleteUserItemController, - getAllUserItemsController, - getUserItemController, - getUserItemsController, - getUserItemsCountController, - upsertUserItemController, -} from '../controllers/user-items-controller' const USER_ITEMS_TAGS = ['User items'] diff --git a/apps/backend/src/http/routes/watch-entries.ts b/apps/backend/src/http/routes/watch-entries.ts index 2046845f..4e8130cf 100644 --- a/apps/backend/src/http/routes/watch-entries.ts +++ b/apps/backend/src/http/routes/watch-entries.ts @@ -1,12 +1,12 @@ import type { FastifyInstance } from 'fastify' import type { ZodTypeProvider } from 'fastify-type-provider-zod' -import { verifyJwt } from '../middlewares/verify-jwt' import { createWatchEntryController, deleteWatchEntryController, getWatchEntriesController, updateWatchEntryController, } from '../controllers/watch-entries-controller' +import { verifyJwt } from '../middlewares/verify-jwt' import { createWatchEntryBodySchema, createWatchEntryResponseSchema, diff --git a/apps/ios/Plotwist/Plotwist/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/Plotwist/Plotwist/Assets.xcassets/AccentColor.colorset/Contents.json index eb878970..0afb3cf0 100644 --- a/apps/ios/Plotwist/Plotwist/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/apps/ios/Plotwist/Plotwist/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,11 +1,11 @@ { - "colors" : [ + "colors": [ { - "idiom" : "universal" + "idiom": "universal" } ], - "info" : { - "author" : "xcode", - "version" : 1 + "info": { + "author": "xcode", + "version": 1 } } diff --git a/apps/ios/Plotwist/Plotwist/Assets.xcassets/AppIcon.appiconset/Contents.json b/apps/ios/Plotwist/Plotwist/Assets.xcassets/AppIcon.appiconset/Contents.json index 87d40152..e59070cb 100644 --- a/apps/ios/Plotwist/Plotwist/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/apps/ios/Plotwist/Plotwist/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,38 +1,38 @@ { - "images" : [ + "images": [ { - "filename" : "AppIcon.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" + "filename": "AppIcon.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" }, { - "appearances" : [ + "appearances": [ { - "appearance" : "luminosity", - "value" : "dark" + "appearance": "luminosity", + "value": "dark" } ], - "filename" : "AppIcon.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" + "filename": "AppIcon.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" }, { - "appearances" : [ + "appearances": [ { - "appearance" : "luminosity", - "value" : "tinted" + "appearance": "luminosity", + "value": "tinted" } ], - "filename" : "AppIcon.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" + "filename": "AppIcon.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" } ], - "info" : { - "author" : "xcode", - "version" : 1 + "info": { + "author": "xcode", + "version": 1 } } diff --git a/apps/ios/Plotwist/Plotwist/Assets.xcassets/Contents.json b/apps/ios/Plotwist/Plotwist/Assets.xcassets/Contents.json index 73c00596..74d6a722 100644 --- a/apps/ios/Plotwist/Plotwist/Assets.xcassets/Contents.json +++ b/apps/ios/Plotwist/Plotwist/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { - "info" : { - "author" : "xcode", - "version" : 1 + "info": { + "author": "xcode", + "version": 1 } } diff --git a/apps/ios/Plotwist/Plotwist/Assets.xcassets/FilmStrip.imageset/Contents.json b/apps/ios/Plotwist/Plotwist/Assets.xcassets/FilmStrip.imageset/Contents.json index 67f6f100..18257411 100644 --- a/apps/ios/Plotwist/Plotwist/Assets.xcassets/FilmStrip.imageset/Contents.json +++ b/apps/ios/Plotwist/Plotwist/Assets.xcassets/FilmStrip.imageset/Contents.json @@ -1,25 +1,25 @@ { - "images" : [ + "images": [ { - "idiom" : "universal", - "scale" : "1x" + "idiom": "universal", + "scale": "1x" }, { - "idiom" : "universal", - "scale" : "2x" + "idiom": "universal", + "scale": "2x" }, { - "filename" : "film-strip.png", - "idiom" : "universal", - "scale" : "3x" + "filename": "film-strip.png", + "idiom": "universal", + "scale": "3x" } ], - "info" : { - "author" : "xcode", - "version" : 1 + "info": { + "author": "xcode", + "version": 1 }, - "properties" : { - "preserves-vector-representation" : true, - "template-rendering-intent" : "original" + "properties": { + "preserves-vector-representation": true, + "template-rendering-intent": "original" } } diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts index c4b7818f..a3e4680c 100644 --- a/apps/web/next-env.d.ts +++ b/apps/web/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/dev/types/routes.d.ts"; +import './.next/dev/types/routes.d.ts' // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/web/src/app/[lang]/[username]/_components/user-activities.tsx b/apps/web/src/app/[lang]/[username]/_components/user-activities.tsx index 2a51e09c..c8bdfdb5 100644 --- a/apps/web/src/app/[lang]/[username]/_components/user-activities.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/user-activities.tsx @@ -299,11 +299,13 @@ export function WatchEpisodeActivity({
    - {episodes.map((episode: { seasonNumber: number; episodeNumber: number }) => ( -
  • - • S{episode.seasonNumber}, EP{episode.episodeNumber} -
  • - ))} + {episodes.map( + (episode: { seasonNumber: number; episodeNumber: number }) => ( +
  • + • S{episode.seasonNumber}, EP{episode.episodeNumber} +
  • + ) + )}
From b3630318c98d3350c57a6f49a50474a260716d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 2 Feb 2026 11:30:11 -0300 Subject: [PATCH 15/27] feat(auth): add Apple and Google authentication endpoints with corresponding mutation hooks and types --- apps/web/src/api/auth.ts | 130 ++++++++++++++++++++++++++ apps/web/src/api/endpoints.schemas.ts | 102 +++++++++++++++----- apps/web/src/api/subscriptions.ts | 40 ++++---- 3 files changed, 231 insertions(+), 41 deletions(-) diff --git a/apps/web/src/api/auth.ts b/apps/web/src/api/auth.ts index 9f2f852a..7a36dba9 100644 --- a/apps/web/src/api/auth.ts +++ b/apps/web/src/api/auth.ts @@ -15,6 +15,14 @@ import type { } from '@tanstack/react-query'; import type { + PostAuthApple200, + PostAuthApple400, + PostAuthApple500, + PostAuthAppleBody, + PostAuthGoogle200, + PostAuthGoogle400, + PostAuthGoogle500, + PostAuthGoogleBody, PostLogin200, PostLogin400, PostLoginBody @@ -87,4 +95,126 @@ const {mutation: mutationOptions} = options ? return useMutation(mutationOptions, queryClient); } + /** + * Sign in or sign up with Apple + */ +export const postAuthApple = ( + postAuthAppleBody: PostAuthAppleBody, + signal?: AbortSignal +) => { + + + return axiosInstance( + {url: `/auth/apple`, method: 'POST', + headers: {'Content-Type': 'application/json', }, + data: postAuthAppleBody, signal + }, + ); + } + + + +export const getPostAuthAppleMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostAuthAppleBody}, TContext>, } +): UseMutationOptions>, TError,{data: PostAuthAppleBody}, TContext> => { + +const mutationKey = ['postAuthApple']; +const {mutation: mutationOptions} = options ? + options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? + options + : {...options, mutation: {...options.mutation, mutationKey}} + : {mutation: { mutationKey, }}; + + + + + const mutationFn: MutationFunction>, {data: PostAuthAppleBody}> = (props) => { + const {data} = props ?? {}; + + return postAuthApple(data,) + } + + + + + return { mutationFn, ...mutationOptions }} + + export type PostAuthAppleMutationResult = NonNullable>> + export type PostAuthAppleMutationBody = PostAuthAppleBody + export type PostAuthAppleMutationError = PostAuthApple400 | PostAuthApple500 + + export const usePostAuthApple = (options?: { mutation?:UseMutationOptions>, TError,{data: PostAuthAppleBody}, TContext>, } + , queryClient?: QueryClient): UseMutationResult< + Awaited>, + TError, + {data: PostAuthAppleBody}, + TContext + > => { + + const mutationOptions = getPostAuthAppleMutationOptions(options); + + return useMutation(mutationOptions, queryClient); + } + /** + * Sign in or sign up with Google + */ +export const postAuthGoogle = ( + postAuthGoogleBody: PostAuthGoogleBody, + signal?: AbortSignal +) => { + + + return axiosInstance( + {url: `/auth/google`, method: 'POST', + headers: {'Content-Type': 'application/json', }, + data: postAuthGoogleBody, signal + }, + ); + } + + + +export const getPostAuthGoogleMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: PostAuthGoogleBody}, TContext>, } +): UseMutationOptions>, TError,{data: PostAuthGoogleBody}, TContext> => { + +const mutationKey = ['postAuthGoogle']; +const {mutation: mutationOptions} = options ? + options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? + options + : {...options, mutation: {...options.mutation, mutationKey}} + : {mutation: { mutationKey, }}; + + + + + const mutationFn: MutationFunction>, {data: PostAuthGoogleBody}> = (props) => { + const {data} = props ?? {}; + + return postAuthGoogle(data,) + } + + + + + return { mutationFn, ...mutationOptions }} + + export type PostAuthGoogleMutationResult = NonNullable>> + export type PostAuthGoogleMutationBody = PostAuthGoogleBody + export type PostAuthGoogleMutationError = PostAuthGoogle400 | PostAuthGoogle500 + + export const usePostAuthGoogle = (options?: { mutation?:UseMutationOptions>, TError,{data: PostAuthGoogleBody}, TContext>, } + , queryClient?: QueryClient): UseMutationResult< + Awaited>, + TError, + {data: PostAuthGoogleBody}, + TContext + > => { + + const mutationOptions = getPostAuthGoogleMutationOptions(options); + + return useMutation(mutationOptions, queryClient); + } \ No newline at end of file diff --git a/apps/web/src/api/endpoints.schemas.ts b/apps/web/src/api/endpoints.schemas.ts index bdb52245..fef6ef3a 100644 --- a/apps/web/src/api/endpoints.schemas.ts +++ b/apps/web/src/api/endpoints.schemas.ts @@ -597,6 +597,66 @@ export type PostLogin400 = { message: string; }; +export type PostAuthAppleBodyFullName = { + givenName?: string; + familyName?: string; +}; + +export type PostAuthAppleBody = { + /** @minLength 1 */ + identityToken: string; + /** @minLength 1 */ + authorizationCode: string; + /** @pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ */ + email?: string; + fullName?: PostAuthAppleBodyFullName; +}; + +export type PostAuthApple200 = { + token: string; + isNewUser: boolean; + needsUsername: boolean; +}; + +/** + * Invalid token or authentication failed + */ +export type PostAuthApple400 = { + message: string; +}; + +/** + * Internal server error + */ +export type PostAuthApple500 = { + message: string; +}; + +export type PostAuthGoogleBody = { + /** @minLength 1 */ + idToken: string; +}; + +export type PostAuthGoogle200 = { + token: string; + isNewUser: boolean; + needsUsername: boolean; +}; + +/** + * Invalid token or authentication failed + */ +export type PostAuthGoogle400 = { + message: string; +}; + +/** + * Internal server error + */ +export type PostAuthGoogle500 = { + message: string; +}; + export type PostReviewBodyMediaType = typeof PostReviewBodyMediaType[keyof typeof PostReviewBodyMediaType]; @@ -2372,7 +2432,7 @@ export const GetUserActivitiesLanguage = { 'ja-JP': 'ja-JP', } as const; -export type GetUserActivities200UserActivitiesItemOneOfMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2439,7 +2499,7 @@ export type GetUserActivities200UserActivitiesItemOneOf = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfOnezeroMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfOnezeroMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfOnezeroMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2508,7 +2568,7 @@ export type GetUserActivities200UserActivitiesItemOneOfOnezero = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfOnezeroAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfOnenineMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfOnenineMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfOnenineMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2561,7 +2621,7 @@ export type GetUserActivities200UserActivitiesItemOneOfOnenine = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfOnenineAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfTwosevenMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfTwosevenMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfTwosevenMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2639,7 +2699,7 @@ export type GetUserActivities200UserActivitiesItemOneOfTwoseven = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfTwosevenAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfThreesevenMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfThreesevenMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfThreesevenMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2723,7 +2783,7 @@ export type GetUserActivities200UserActivitiesItemOneOfThreeseven = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfThreesevenAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfFoureightMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfFoureightMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfFoureightMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2797,7 +2857,7 @@ export type GetUserActivities200UserActivitiesItemOneOfFoureight = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfFoureightAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfFiveeightMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfFiveeightMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfFiveeightMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2874,7 +2934,7 @@ export type GetUserActivities200UserActivitiesItemOneOfFiveeight = { additionalInfo: GetUserActivities200UserActivitiesItemOneOfFiveeightAdditionalInfo; }; -export type GetUserActivities200UserActivitiesItemOneOfSixeightMetadataAnyOf = string | number | boolean | null; +export type GetUserActivities200UserActivitiesItemOneOfSixeightMetadataAnyOf = string | number | boolean | | null; export type GetUserActivities200UserActivitiesItemOneOfSixeightMetadataAnyOfTwo = {[key: string]: unknown}; @@ -2963,7 +3023,7 @@ export const GetNetworkActivitiesLanguage = { 'ja-JP': 'ja-JP', } as const; -export type GetNetworkActivities200UserActivitiesItemOneOfMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3030,7 +3090,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOf = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfOnezeroMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfOnezeroMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfOnezeroMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3099,7 +3159,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOfOnezero = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfOnezeroAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfOnenineMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfOnenineMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfOnenineMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3152,7 +3212,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOfOnenine = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfOnenineAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfTwosevenMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfTwosevenMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfTwosevenMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3230,7 +3290,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOfTwoseven = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfTwosevenAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfThreesevenMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfThreesevenMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfThreesevenMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3314,7 +3374,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOfThreeseven = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfThreesevenAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfFoureightMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfFoureightMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfFoureightMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3388,7 +3448,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOfFoureight = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfFoureightAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfFiveeightMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfFiveeightMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfFiveeightMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3465,7 +3525,7 @@ export type GetNetworkActivities200UserActivitiesItemOneOfFiveeight = { additionalInfo: GetNetworkActivities200UserActivitiesItemOneOfFiveeightAdditionalInfo; }; -export type GetNetworkActivities200UserActivitiesItemOneOfSixeightMetadataAnyOf = string | number | boolean | null; +export type GetNetworkActivities200UserActivitiesItemOneOfSixeightMetadataAnyOf = string | number | boolean | | null; export type GetNetworkActivities200UserActivitiesItemOneOfSixeightMetadataAnyOfTwo = {[key: string]: unknown}; @@ -3533,21 +3593,21 @@ export type GetNetworkActivities200 = { nextCursor: string | null; }; -export type DeleteUserSubscriptionBodyWhen = typeof DeleteUserSubscriptionBodyWhen[keyof typeof DeleteUserSubscriptionBodyWhen]; +export type DeleteSubscriptionBodyWhen = typeof DeleteSubscriptionBodyWhen[keyof typeof DeleteSubscriptionBodyWhen]; // eslint-disable-next-line @typescript-eslint/no-redeclare -export const DeleteUserSubscriptionBodyWhen = { +export const DeleteSubscriptionBodyWhen = { now: 'now', at_end_of_current_period: 'at_end_of_current_period', } as const; -export type DeleteUserSubscriptionBody = { - when: DeleteUserSubscriptionBodyWhen; +export type DeleteSubscriptionBody = { + when: DeleteSubscriptionBodyWhen; reason?: string; }; -export type DeleteUserSubscription200 = { +export type DeleteSubscription200 = { message: string; }; diff --git a/apps/web/src/api/subscriptions.ts b/apps/web/src/api/subscriptions.ts index ad1e1309..f5cefef6 100644 --- a/apps/web/src/api/subscriptions.ts +++ b/apps/web/src/api/subscriptions.ts @@ -15,8 +15,8 @@ import type { } from '@tanstack/react-query'; import type { - DeleteUserSubscription200, - DeleteUserSubscriptionBody + DeleteSubscription200, + DeleteSubscriptionBody } from './endpoints.schemas'; import { axiosInstance } from '../services/axios-instance'; @@ -28,26 +28,26 @@ import { axiosInstance } from '../services/axios-instance'; /** * Delete user subscription */ -export const deleteUserSubscription = ( - deleteUserSubscriptionBody: DeleteUserSubscriptionBody, +export const deleteSubscription = ( + deleteSubscriptionBody: DeleteSubscriptionBody, ) => { - return axiosInstance( + return axiosInstance( {url: `/user/subscription`, method: 'DELETE', headers: {'Content-Type': 'application/json', }, - data: deleteUserSubscriptionBody + data: deleteSubscriptionBody }, ); } -export const getDeleteUserSubscriptionMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteUserSubscriptionBody}, TContext>, } -): UseMutationOptions>, TError,{data: DeleteUserSubscriptionBody}, TContext> => { +export const getDeleteSubscriptionMutationOptions = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteSubscriptionBody}, TContext>, } +): UseMutationOptions>, TError,{data: DeleteSubscriptionBody}, TContext> => { -const mutationKey = ['deleteUserSubscription']; +const mutationKey = ['deleteSubscription']; const {mutation: mutationOptions} = options ? options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ? options @@ -57,10 +57,10 @@ const {mutation: mutationOptions} = options ? - const mutationFn: MutationFunction>, {data: DeleteUserSubscriptionBody}> = (props) => { + const mutationFn: MutationFunction>, {data: DeleteSubscriptionBody}> = (props) => { const {data} = props ?? {}; - return deleteUserSubscription(data,) + return deleteSubscription(data,) } @@ -68,20 +68,20 @@ const {mutation: mutationOptions} = options ? return { mutationFn, ...mutationOptions }} - export type DeleteUserSubscriptionMutationResult = NonNullable>> - export type DeleteUserSubscriptionMutationBody = DeleteUserSubscriptionBody - export type DeleteUserSubscriptionMutationError = unknown + export type DeleteSubscriptionMutationResult = NonNullable>> + export type DeleteSubscriptionMutationBody = DeleteSubscriptionBody + export type DeleteSubscriptionMutationError = unknown - export const useDeleteUserSubscription = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteUserSubscriptionBody}, TContext>, } + export const useDeleteSubscription = (options?: { mutation?:UseMutationOptions>, TError,{data: DeleteSubscriptionBody}, TContext>, } , queryClient?: QueryClient): UseMutationResult< - Awaited>, + Awaited>, TError, - {data: DeleteUserSubscriptionBody}, + {data: DeleteSubscriptionBody}, TContext > => { - const mutationOptions = getDeleteUserSubscriptionMutationOptions(options); + const mutationOptions = getDeleteSubscriptionMutationOptions(options); return useMutation(mutationOptions, queryClient); } From 37e371b4917ffc5fec21be659c9bf8886602a753 Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Thu, 19 Feb 2026 15:32:57 -0300 Subject: [PATCH 16/27] feat(translations): update subscription cancellation messages across multiple languages for clarity and consistency --- apps/web/public/dictionaries/de-DE.json | 4 ++-- apps/web/public/dictionaries/en-US.json | 4 ++-- apps/web/public/dictionaries/es-ES.json | 4 ++-- apps/web/public/dictionaries/fr-FR.json | 4 ++-- apps/web/public/dictionaries/it-IT.json | 4 ++-- apps/web/public/dictionaries/ja-JP.json | 4 ++-- apps/web/public/dictionaries/pt-BR.json | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/web/public/dictionaries/de-DE.json b/apps/web/public/dictionaries/de-DE.json index 244f0010..eee33f13 100644 --- a/apps/web/public/dictionaries/de-DE.json +++ b/apps/web/public/dictionaries/de-DE.json @@ -714,9 +714,9 @@ "subscription": "Abonnement", "subscription_plan": "Plan", "cancel_subscription": "Abonnement kündigen", - "cancel_subscription_confirm_title": "Abonnement kündigen?", + "cancel_subscription_confirm_title": "Kündigung bestätigen?", + "keep_subscription": "Abonnement behalten", "cancel_subscription_confirm_description": "Wählen Sie, wann gekündigt werden soll. Sie können PRO bis zum Ende des Abrechnungszeitraums behalten.", - "cancel_at_end_of_period": "Am Periodenende", "cancel_now": "Jetzt kündigen", "cancel_subscription_success": "Abonnement gekündigt", "cancel_subscription_error": "Kündigung fehlgeschlagen", diff --git a/apps/web/public/dictionaries/en-US.json b/apps/web/public/dictionaries/en-US.json index 0999e94b..60fa3f42 100644 --- a/apps/web/public/dictionaries/en-US.json +++ b/apps/web/public/dictionaries/en-US.json @@ -715,9 +715,9 @@ "subscription": "Subscription", "subscription_plan": "Plan", "cancel_subscription": "Cancel subscription", - "cancel_subscription_confirm_title": "Cancel subscription?", + "cancel_subscription_confirm_title": "Confirm cancellation?", + "keep_subscription": "Keep subscription", "cancel_subscription_confirm_description": "Choose when to cancel. You can keep PRO until the end of your billing period.", - "cancel_at_end_of_period": "At end of period", "cancel_now": "Cancel now", "cancel_subscription_success": "Subscription cancelled", "cancel_subscription_error": "Failed to cancel subscription", diff --git a/apps/web/public/dictionaries/es-ES.json b/apps/web/public/dictionaries/es-ES.json index f3a6993b..642c26d3 100644 --- a/apps/web/public/dictionaries/es-ES.json +++ b/apps/web/public/dictionaries/es-ES.json @@ -717,9 +717,9 @@ "subscription": "Suscripción", "subscription_plan": "Plan", "cancel_subscription": "Cancelar suscripción", - "cancel_subscription_confirm_title": "¿Cancelar suscripción?", + "cancel_subscription_confirm_title": "¿Confirmar la cancelación?", + "keep_subscription": "Mantener la suscripción", "cancel_subscription_confirm_description": "Elige cuándo cancelar. Puedes mantener PRO hasta el final del periodo de facturación.", - "cancel_at_end_of_period": "Al final del periodo", "cancel_now": "Cancelar ahora", "cancel_subscription_success": "Suscripción cancelada", "cancel_subscription_error": "Error al cancelar la suscripción", diff --git a/apps/web/public/dictionaries/fr-FR.json b/apps/web/public/dictionaries/fr-FR.json index 81aeb157..0492dd82 100644 --- a/apps/web/public/dictionaries/fr-FR.json +++ b/apps/web/public/dictionaries/fr-FR.json @@ -720,9 +720,9 @@ "subscription": "Abonnement", "subscription_plan": "Forfait", "cancel_subscription": "Annuler l'abonnement", - "cancel_subscription_confirm_title": "Annuler l'abonnement ?", + "cancel_subscription_confirm_title": "Confirmer l’annulation ?", + "keep_subscription": "Conserver l’abonnement", "cancel_subscription_confirm_description": "Choisissez quand annuler. Vous pouvez conserver PRO jusqu'à la fin de la période de facturation.", - "cancel_at_end_of_period": "À la fin de la période", "cancel_now": "Annuler maintenant", "cancel_subscription_success": "Abonnement annulé", "cancel_subscription_error": "Échec de l'annulation", diff --git a/apps/web/public/dictionaries/it-IT.json b/apps/web/public/dictionaries/it-IT.json index 27c717df..19d9f1bb 100644 --- a/apps/web/public/dictionaries/it-IT.json +++ b/apps/web/public/dictionaries/it-IT.json @@ -717,9 +717,9 @@ "subscription": "Abbonamento", "subscription_plan": "Piano", "cancel_subscription": "Annulla abbonamento", - "cancel_subscription_confirm_title": "Annullare l'abbonamento?", + "cancel_subscription_confirm_title": "Confermare l'annullamento?", + "keep_subscription": "Mantenere l'abbonamento", "cancel_subscription_confirm_description": "Scegli quando annullare. Puoi mantenere PRO fino alla fine del periodo di fatturazione.", - "cancel_at_end_of_period": "Alla fine del periodo", "cancel_now": "Annulla ora", "cancel_subscription_success": "Abbonamento annullato", "cancel_subscription_error": "Annullamento non riuscito", diff --git a/apps/web/public/dictionaries/ja-JP.json b/apps/web/public/dictionaries/ja-JP.json index 7f9183d2..06ab3c0f 100644 --- a/apps/web/public/dictionaries/ja-JP.json +++ b/apps/web/public/dictionaries/ja-JP.json @@ -720,9 +720,9 @@ "subscription": "サブスクリプション", "subscription_plan": "プラン", "cancel_subscription": "サブスクリプションをキャンセル", - "cancel_subscription_confirm_title": "サブスクリプションをキャンセルしますか?", + "cancel_subscription_confirm_title": "解約を確認しますか?", + "keep_subscription": "サブスクリプションを継続する", "cancel_subscription_confirm_description": "キャンセルの時期を選択してください。請求期間の終了までPROを利用できます。", - "cancel_at_end_of_period": "期間終了時", "cancel_now": "今すぐキャンセル", "cancel_subscription_success": "サブスクリプションをキャンセルしました", "cancel_subscription_error": "キャンセルに失敗しました", diff --git a/apps/web/public/dictionaries/pt-BR.json b/apps/web/public/dictionaries/pt-BR.json index 60b8e963..d74add13 100644 --- a/apps/web/public/dictionaries/pt-BR.json +++ b/apps/web/public/dictionaries/pt-BR.json @@ -718,9 +718,9 @@ "subscription": "Assinatura", "subscription_plan": "Plano", "cancel_subscription": "Cancelar assinatura", - "cancel_subscription_confirm_title": "Cancelar assinatura?", + "keep_subscription": "Manter assinatura", + "cancel_subscription_confirm_title": "Confirmar cancelamento?", "cancel_subscription_confirm_description": "Escolha quando cancelar. Você pode manter o PRO até o fim do período de cobrança.", - "cancel_at_end_of_period": "No fim do período", "cancel_now": "Cancelar agora", "cancel_subscription_success": "Assinatura cancelada", "cancel_subscription_error": "Falha ao cancelar assinatura", From 698a644340143e2ed18c33619134bbf39487c697 Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Thu, 19 Feb 2026 15:33:08 -0300 Subject: [PATCH 17/27] feat(user-dialog): enhance user dialog component with vertical tab layout and improved accessibility features --- apps/web/next-env.d.ts | 2 +- .../[username]/_components/user-dialog.tsx | 93 +++++++++++++------ 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts index a3e4680c..c4b7818f 100644 --- a/apps/web/next-env.d.ts +++ b/apps/web/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import './.next/dev/types/routes.d.ts' +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx b/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx index 68595df3..676887af 100644 --- a/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx @@ -18,6 +18,7 @@ import { TabsList, TabsTrigger, } from '@plotwist/ui/components/ui/tabs' +import { CreditCard, Link, Settings, User } from 'lucide-react' import { useQueryState } from 'nuqs' import { type PropsWithChildren, useState } from 'react' import type { @@ -58,37 +59,77 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { } const content = ( - -
- - {dictionary.account_data} - + + + +
+ +
+

{dictionary.account_data}

+
+ +
+ + +
+

{dictionary.social_links}

+
+ +
+ + +
+

{dictionary.preferences}

+
+ +
+ + +
+

{dictionary.subscription}

+
+ +
- - - - - - - - - - - - - - - -
) @@ -105,7 +146,7 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { > {children} - + {content} @@ -123,9 +164,9 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { }} > {children} - + -
{content}
+
{content}
) From e27b487d751ff2a77cc8fc992d58f491b9d00c5c Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Thu, 19 Feb 2026 15:33:16 -0300 Subject: [PATCH 18/27] feat(subscription-form): implement subscription upgrade and cancellation confirmation in the subscription form component --- .../_components/subscription-form.tsx | 225 +++++++++++++----- 1 file changed, 162 insertions(+), 63 deletions(-) diff --git a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx index 9d4c198b..a9de5efb 100644 --- a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx @@ -1,32 +1,25 @@ 'use client' -import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, - AlertDialogTrigger, -} from '@plotwist/ui/components/ui/alert-dialog' import { Badge } from '@plotwist/ui/components/ui/badge' import { Button } from '@plotwist/ui/components/ui/button' import { useMutation } from '@tanstack/react-query' +import { Check } from 'lucide-react' import { useRouter } from 'next/navigation' +import { useState } from 'react' import { toast } from 'sonner' import type { GetUsersUsername200User } from '@/api/endpoints.schemas' import { deleteSubscription } from '@/api/subscriptions' import { useLanguage } from '@/context/language' +import { cn } from '@/lib/utils' type SubscriptionFormProps = { user: GetUsersUsername200User } export function SubscriptionForm({ user }: SubscriptionFormProps) { - const { dictionary } = useLanguage() + const { dictionary, language } = useLanguage() const router = useRouter() + const [isConfirmingCancel, setIsConfirmingCancel] = useState(false) const cancelMutation = useMutation({ mutationFn: (when: 'now' | 'at_end_of_current_period') => @@ -41,63 +34,169 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { }) const isPro = user.subscriptionType === 'PRO' + const isFree = user.subscriptionType === 'MEMBER' - if (!isPro) { - return ( -
-
- {dictionary.subscription_plan}:{' '} - - {dictionary.home_prices.free_plan.title} - -
-
- ) + const handleUpgrade = async () => { + try { + const locale = language.split('-')[0] ?? 'en' + const response = await fetch( + `/api/checkout_sessions?locale=${locale}&email=${user.email}&username=${user.username}&redirect=checkout`, + { method: 'POST' } + ) + + if (response.redirected) { + window.location.href = response.url + } else { + const data = await response.json() + if (data.url) { + window.location.href = data.url + } + } + } catch { + toast.error('Failed to start checkout') + } } return ( -
-
- {dictionary.subscription_plan}: PRO -
+
+
+
+
+
+

+ {dictionary.home_prices.free_plan.title} +

+
+ +
+ + {dictionary.home_prices.free_plan.price} + +

+ {dictionary.home_prices.free_plan.description} +

+
+ +
    + {dictionary.home_prices.free_plan.benefits.map( + (benefit: string) => ( +
  • +
    + +
    + + {benefit} + +
  • + ) + )} +
+
+ + +
+ +
+ {!isPro && dictionary.home_prices.pro_plan.recommended && ( + + {dictionary.home_prices.pro_plan.recommended} + + )} + +
+
+

+ {dictionary.home_prices.pro_plan.title} +

+
+ +
+ + {dictionary.home_prices.pro_plan.price} + +

+ {dictionary.home_prices.pro_plan.description} +

+
-
- - -
+ + {isPro ? ( +
+ {!isConfirmingCancel ? ( + + ) : ( +
+ + + +
+ )} +
+ ) : ( + - - - - - {dictionary.cancel_subscription_confirm_title} - - - {dictionary.cancel_subscription_confirm_description} - - - - {dictionary.cancel} - - cancelMutation.mutate('at_end_of_current_period') - } - disabled={cancelMutation.isPending} - className="bg-muted text-muted-foreground hover:bg-muted/90" - > - {dictionary.cancel_at_end_of_period} - - cancelMutation.mutate('now')} - disabled={cancelMutation.isPending} - className="bg-destructive text-destructive-foreground hover:bg-destructive/90" - > - {dictionary.cancel_now} - - - - + )} +
) From aa797d369467e44821543102634d1fd0c52e5893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 23 Feb 2026 23:24:12 -0300 Subject: [PATCH 19/27] refactor: clean up subscription cancellation tests and improve mock implementation --- ...schedule-subscription-cancellation.spec.ts | 87 +++++++++---------- .../schedule-subscription-cancellation.ts | 8 +- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts index 51eac88d..84d2f3bb 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts @@ -3,65 +3,63 @@ import { getSubscriptionById } from '@/db/repositories/subscription-repository' import { stripe } from '@/infra/adapters/stripe' import { getSubscriptionById } from '@/infra/db/repositories/subscription-repository' import type { SubscriptionProvider } from '@/ports/subscription-provider' + import { makeSubscription } from '@/test/factories/make-subscription' import { makeUser } from '@/test/factories/make-user' import { scheduleCancellation } from './schedule-subscription-cancellation' function uniqueProviderSubId() { return `sub_${randomUUID().replace(/-/g, '')}` +} - function mockSubscriptionProvider(periodEnd?: Date): SubscriptionProvider { - return { - getCurrentPeriodEnd: vi - .fn() - .mockResolvedValue( - periodEnd ?? new Date(Date.now() + 86400 * 30 * 1000) - ), - scheduleCancelAtPeriodEnd: vi.fn().mockResolvedValue(undefined), - cancelImmediately: vi.fn(), - } +function mockSubscriptionProvider(periodEnd?: Date): SubscriptionProvider { + return { + getCurrentPeriodEnd: vi + .fn() + scheduleCancelAtPeriodEnd: vi.fn().mockResolvedValue(undefined), + cancelImmediately: vi.fn(), } - vi.mock('@/infra/adapters/stripe', () => ({ - stripe: { - update: vi.fn().mockResolvedValue({ +} +vi.mock('@/infra/adapters/stripe', () => ( +{ + update: vi.fn().mockResolvedValue({ id: 'sub_123', cancel_at_period_end: true, status: 'active', - }), - }, - }, + , + , } )) describe('scheduleSubscriptionCancellation', () => { - const providerSubId = uniqueProviderSubId() - const user = await makeUser() - const provider = mockSubscriptionProvider() - - const subscription = await makeSubscription({ - userId: user.id, - providerSubscriptionId: providerSubId, - }) - - const scheduledCancellation = await scheduleCancellation( - subscription, - 'test', - provider - ) - - expect(provider.getCurrentPeriodEnd).toHaveBeenCalledWith(providerSubId) - expect(provider.scheduleCancelAtPeriodEnd).toHaveBeenCalledWith( - providerSubId, - expect.any(Date) - ) - - expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') - - const subscriptionFromDb = await getSubscriptionById(subscription.id) - expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') -} -) + it('should schedule subscription cancellation at period end', async () => { + const providerSubId = uniqueProviderSubId() + const user = await makeUser() + const provider = mockSubscriptionProvider() + + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: providerSubId, + }) + + const scheduledCancellation = await scheduleCancellation( + subscription, + 'test', + provider + ) + + expect(provider.getCurrentPeriodEnd).toHaveBeenCalledWith(providerSubId) + expect(provider.scheduleCancelAtPeriodEnd).toHaveBeenCalledWith( + providerSubId, + expect.any(Date) + ) + +expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') + +const subscriptionFromDb = await getSubscriptionById(subscription.id) +expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') +}) it('should set canceledAt from provider getCurrentPeriodEnd', async () => { @@ -109,4 +107,5 @@ describe('scheduleSubscriptionCancellation', () => expect(provider.scheduleCancelAtPeriodEnd).not.toHaveBeenCalled() } ) -}) +} +) diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts index 5acaf602..dc15d57a 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.ts @@ -1,9 +1,7 @@ -import { cancelUserSubscription } from '@/db/repositories/subscription-repository' -import type { Subscription, Subscription } from '@/domain/entities/subscription' -import { DomainError, DomainError } from '@/domain/errors/domain-error' -import { stripe } from '@/infra/adapters/stripe' +import type { Subscription } from '@/domain/entities/subscription' +import { DomainError } from '@/domain/errors/domain-error' import { cancelUserSubscription } from '@/infra/db/repositories/subscription-repository' -import type { SubscriptionProvider } from '@/ports/subscription-provider' +import type { SubscriptionProvider } from '@/infra/ports/subscription-provider' export async function scheduleCancellation( { id: subscriptionId, userId, providerSubscriptionId }: Subscription, From 2a3d01a8952109030662e3fddd0a8a96f812dc0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 23 Feb 2026 23:25:40 -0300 Subject: [PATCH 20/27] chore: remove obsolete migration files for subscriptions table --- ...260130024720_alter_subscriptions_table.sql | 4 - .../meta/20260130024720_snapshot.json | 1603 ----------------- 2 files changed, 1607 deletions(-) delete mode 100644 apps/backend/src/infra/db/migrations/20260130024720_alter_subscriptions_table.sql delete mode 100644 apps/backend/src/infra/db/migrations/meta/20260130024720_snapshot.json diff --git a/apps/backend/src/infra/db/migrations/20260130024720_alter_subscriptions_table.sql b/apps/backend/src/infra/db/migrations/20260130024720_alter_subscriptions_table.sql deleted file mode 100644 index 246c69b0..00000000 --- a/apps/backend/src/infra/db/migrations/20260130024720_alter_subscriptions_table.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE TYPE "public"."subscription_provider" AS ENUM('STRIPE', 'APPLE');--> statement-breakpoint -ALTER TABLE "subscriptions" ADD COLUMN "subscription_provider" "subscription_provider" NOT NULL DEFAULT 'STRIPE';--> statement-breakpoint -ALTER TABLE "subscriptions" ADD COLUMN "provider_subscription_id" varchar;--> statement-breakpoint -ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_provider_subscription_id_unique" UNIQUE("provider_subscription_id"); \ No newline at end of file diff --git a/apps/backend/src/infra/db/migrations/meta/20260130024720_snapshot.json b/apps/backend/src/infra/db/migrations/meta/20260130024720_snapshot.json deleted file mode 100644 index 96b8d4bf..00000000 --- a/apps/backend/src/infra/db/migrations/meta/20260130024720_snapshot.json +++ /dev/null @@ -1,1603 +0,0 @@ -{ - "id": "faacd4f0-6266-42dd-834b-b7fc4da105b3", - "prevId": "d8206ef4-3adb-4b26-8e63-dfc5c96b5555", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.followers": { - "name": "followers", - "schema": "", - "columns": { - "follower_id": { - "name": "follower_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "followed_id": { - "name": "followed_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "followers_follower_id_users_id_fk": { - "name": "followers_follower_id_users_id_fk", - "tableFrom": "followers", - "tableTo": "users", - "columnsFrom": [ - "follower_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "followers_followed_id_users_id_fk": { - "name": "followers_followed_id_users_id_fk", - "tableFrom": "followers", - "tableTo": "users", - "columnsFrom": [ - "followed_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "followers_followed_id_follower_id_pk": { - "name": "followers_followed_id_follower_id_pk", - "columns": [ - "followed_id", - "follower_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.import_movies": { - "name": "import_movies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "import_id": { - "name": "import_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "end_date": { - "name": "end_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "item_status": { - "name": "item_status", - "type": "status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "import_status": { - "name": "import_status", - "type": "import_item_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "TMDB_ID": { - "name": "TMDB_ID", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "__metadata": { - "name": "__metadata", - "type": "jsonb", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "import_movies_import_id_user_imports_id_fk": { - "name": "import_movies_import_id_user_imports_id_fk", - "tableFrom": "import_movies", - "tableTo": "user_imports", - "columnsFrom": [ - "import_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.import_series": { - "name": "import_series", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "import_id": { - "name": "import_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "start_date": { - "name": "start_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "item_status": { - "name": "item_status", - "type": "status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "import_status": { - "name": "import_status", - "type": "import_item_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "TMDB_ID": { - "name": "TMDB_ID", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "watched_episodes": { - "name": "watched_episodes", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "series_episodes": { - "name": "series_episodes", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "__metadata": { - "name": "__metadata", - "type": "jsonb", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "import_series_import_id_user_imports_id_fk": { - "name": "import_series_import_id_user_imports_id_fk", - "tableFrom": "import_series", - "tableTo": "user_imports", - "columnsFrom": [ - "import_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.likes": { - "name": "likes", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "entity_id": { - "name": "entity_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "entity_type": { - "name": "entity_type", - "type": "like_entity", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "idx_entity_id": { - "name": "idx_entity_id", - "columns": [ - { - "expression": "entity_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "likes_user_id_users_id_fk": { - "name": "likes_user_id_users_id_fk", - "tableFrom": "likes", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.list_items": { - "name": "list_items", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "list_id": { - "name": "list_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "tmdb_id": { - "name": "tmdb_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "media_type": { - "name": "media_type", - "type": "media_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "list_items_list_id_lists_id_fk": { - "name": "list_items_list_id_lists_id_fk", - "tableFrom": "list_items", - "tableTo": "lists", - "columnsFrom": [ - "list_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "list_items_id_list_id_pk": { - "name": "list_items_id_list_id_pk", - "columns": [ - "id", - "list_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.lists": { - "name": "lists", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "banner_url": { - "name": "banner_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "visibility": { - "name": "visibility", - "type": "list_visibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "user_id_idx": { - "name": "user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "lists_user_id_users_id_fk": { - "name": "lists_user_id_users_id_fk", - "tableFrom": "lists", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.magic_tokens": { - "name": "magic_tokens", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "used": { - "name": "used", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": { - "token_user_id_idx": { - "name": "token_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "token_idx": { - "name": "token_idx", - "columns": [ - { - "expression": "token", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "magic_tokens_user_id_users_id_fk": { - "name": "magic_tokens_user_id_users_id_fk", - "tableFrom": "magic_tokens", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.review_replies": { - "name": "review_replies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "reply": { - "name": "reply", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "review_id": { - "name": "review_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "review_replies_user_id_users_id_fk": { - "name": "review_replies_user_id_users_id_fk", - "tableFrom": "review_replies", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "review_replies_review_id_reviews_id_fk": { - "name": "review_replies_review_id_reviews_id_fk", - "tableFrom": "review_replies", - "tableTo": "reviews", - "columnsFrom": [ - "review_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.reviews": { - "name": "reviews", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "tmdb_id": { - "name": "tmdb_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "media_type": { - "name": "media_type", - "type": "media_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "review": { - "name": "review", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "rating": { - "name": "rating", - "type": "real", - "primaryKey": false, - "notNull": true - }, - "has_spoilers": { - "name": "has_spoilers", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "language": { - "name": "language", - "type": "languages", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "season_number": { - "name": "season_number", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "episode_number": { - "name": "episode_number", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "reviews_user_id_users_id_fk": { - "name": "reviews_user_id_users_id_fk", - "tableFrom": "reviews", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.social_links": { - "name": "social_links", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "platform": { - "name": "platform", - "type": "social_platforms", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "url": { - "name": "url", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "social_links_user_id_users_id_fk": { - "name": "social_links_user_id_users_id_fk", - "tableFrom": "social_links", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_platform_unique": { - "name": "user_platform_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id", - "platform" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.subscriptions": { - "name": "subscriptions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "subscription_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "subscription_provider": { - "name": "subscription_provider", - "type": "subscription_provider", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "subscription_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'ACTIVE'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "canceled_at": { - "name": "canceled_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "cancellation_reason": { - "name": "cancellation_reason", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "provider_subscription_id": { - "name": "provider_subscription_id", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "active_subscription_idx": { - "name": "active_subscription_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "where": "\"subscriptions\".\"status\" = $1", - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "subscriptions_user_id_users_id_fk": { - "name": "subscriptions_user_id_users_id_fk", - "tableFrom": "subscriptions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "subscriptions_provider_subscription_id_unique": { - "name": "subscriptions_provider_subscription_id_unique", - "nullsNotDistinct": false, - "columns": [ - "provider_subscription_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_activities": { - "name": "user_activities", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "activity_type": { - "name": "activity_type", - "type": "activity_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "entity_id": { - "name": "entity_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "entity_type": { - "name": "entity_type", - "type": "like_entity", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "metadata": { - "name": "metadata", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "user_activity_idx": { - "name": "user_activity_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "created_at", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "user_activities_user_id_users_id_fk": { - "name": "user_activities_user_id_users_id_fk", - "tableFrom": "user_activities", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_episodes": { - "name": "user_episodes", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "tmdb_id": { - "name": "tmdb_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "season_number": { - "name": "season_number", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "episode_number": { - "name": "episode_number", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "watched_at": { - "name": "watched_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "runtime": { - "name": "runtime", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "user_episodes_user_id_users_id_fk": { - "name": "user_episodes_user_id_users_id_fk", - "tableFrom": "user_episodes", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_episode_unique": { - "name": "user_episode_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id", - "tmdb_id", - "season_number", - "episode_number" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_imports": { - "name": "user_imports", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "items_count": { - "name": "items_count", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "import_status": { - "name": "import_status", - "type": "import_status_enum", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "providers_enum", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "user_imports_user_id_users_id_fk": { - "name": "user_imports_user_id_users_id_fk", - "tableFrom": "user_imports", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_items": { - "name": "user_items", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "tmdb_id": { - "name": "tmdb_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "media_type": { - "name": "media_type", - "type": "media_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "added_at": { - "name": "added_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "user_items_user_id_users_id_fk": { - "name": "user_items_user_id_users_id_fk", - "tableFrom": "user_items", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_items_userid_tmdbid_media_type_unique": { - "name": "user_items_userid_tmdbid_media_type_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id", - "tmdb_id", - "media_type" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "banner_url": { - "name": "banner_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "is_legacy": { - "name": "is_legacy", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "biography": { - "name": "biography", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "username_lower_idx": { - "name": "username_lower_idx", - "columns": [ - { - "expression": "LOWER(\"username\")", - "asc": true, - "isExpression": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - }, - "email_lower_idx": { - "name": "email_lower_idx", - "columns": [ - { - "expression": "LOWER(\"email\")", - "asc": true, - "isExpression": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "users_username_unique": { - "name": "users_username_unique", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - }, - "users_email_unique": { - "name": "users_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_preferences": { - "name": "user_preferences", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "watch_providers_ids": { - "name": "watch_providers_ids", - "type": "integer[]", - "primaryKey": false, - "notNull": false - }, - "watch_region": { - "name": "watch_region", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_preferences_user_id_users_id_fk": { - "name": "user_preferences_user_id_users_id_fk", - "tableFrom": "user_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_preferences_user_id_unique": { - "name": "user_preferences_user_id_unique", - "nullsNotDistinct": false, - "columns": [ - "user_id" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.activity_type": { - "name": "activity_type", - "schema": "public", - "values": [ - "CREATE_LIST", - "ADD_ITEM", - "DELETE_ITEM", - "LIKE_REVIEW", - "LIKE_REPLY", - "LIKE_LIST", - "CREATE_REVIEW", - "CREATE_REPLY", - "FOLLOW_USER", - "WATCH_EPISODE", - "CHANGE_STATUS", - "CREATE_ACCOUNT" - ] - }, - "public.import_item_status": { - "name": "import_item_status", - "schema": "public", - "values": [ - "COMPLETED", - "FAILED", - "NOT_STARTED" - ] - }, - "public.import_status_enum": { - "name": "import_status_enum", - "schema": "public", - "values": [ - "PARTIAL", - "COMPLETED", - "FAILED", - "NOT_STARTED" - ] - }, - "public.languages": { - "name": "languages", - "schema": "public", - "values": [ - "en-US", - "es-ES", - "fr-FR", - "it-IT", - "de-DE", - "pt-BR", - "ja-JP" - ] - }, - "public.like_entity": { - "name": "like_entity", - "schema": "public", - "values": [ - "REVIEW", - "REPLY", - "LIST" - ] - }, - "public.list_visibility": { - "name": "list_visibility", - "schema": "public", - "values": [ - "PUBLIC", - "NETWORK", - "PRIVATE" - ] - }, - "public.media_type": { - "name": "media_type", - "schema": "public", - "values": [ - "TV_SHOW", - "MOVIE" - ] - }, - "public.providers_enum": { - "name": "providers_enum", - "schema": "public", - "values": [ - "MY_ANIME_LIST", - "LETTERBOXD" - ] - }, - "public.social_platforms": { - "name": "social_platforms", - "schema": "public", - "values": [ - "INSTAGRAM", - "TIKTOK", - "YOUTUBE", - "X" - ] - }, - "public.status": { - "name": "status", - "schema": "public", - "values": [ - "WATCHLIST", - "WATCHED", - "WATCHING", - "DROPPED" - ] - }, - "public.subscription_provider": { - "name": "subscription_provider", - "schema": "public", - "values": [ - "STRIPE", - "APPLE" - ] - }, - "public.subscription_status": { - "name": "subscription_status", - "schema": "public", - "values": [ - "ACTIVE", - "CANCELED", - "EXPIRED", - "PENDING_CANCELLATION" - ] - }, - "public.subscription_type": { - "name": "subscription_type", - "schema": "public", - "values": [ - "MEMBER", - "PRO" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file From 9f5019c61bb588318482a56d1bd04930a7f6395a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 23 Feb 2026 23:33:53 -0300 Subject: [PATCH 21/27] refactor: enhance subscription cancellation tests with improved mocking and structure --- ...schedule-subscription-cancellation.spec.ts | 113 ++++++++---------- 1 file changed, 53 insertions(+), 60 deletions(-) diff --git a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts index 84d2f3bb..ce773eaf 100644 --- a/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts +++ b/apps/backend/src/domain/services/subscriptions/schedule-subscription-cancellation.spec.ts @@ -1,9 +1,7 @@ import { randomUUID } from 'node:crypto' -import { getSubscriptionById } from '@/db/repositories/subscription-repository' -import { stripe } from '@/infra/adapters/stripe' +import { describe, expect, it, vi } from 'vitest' import { getSubscriptionById } from '@/infra/db/repositories/subscription-repository' -import type { SubscriptionProvider } from '@/ports/subscription-provider' - +import type { SubscriptionProvider } from '@/infra/ports/subscription-provider' import { makeSubscription } from '@/test/factories/make-subscription' import { makeUser } from '@/test/factories/make-user' import { scheduleCancellation } from './schedule-subscription-cancellation' @@ -13,26 +11,27 @@ function uniqueProviderSubId() { } function mockSubscriptionProvider(periodEnd?: Date): SubscriptionProvider { + const end = periodEnd ?? new Date() return { - getCurrentPeriodEnd: vi - .fn() + getCurrentPeriodEnd: vi.fn().mockResolvedValue(end), scheduleCancelAtPeriodEnd: vi.fn().mockResolvedValue(undefined), cancelImmediately: vi.fn(), } } -vi.mock('@/infra/adapters/stripe', () => ( -{ - update: vi.fn().mockResolvedValue({ + +vi.mock('@/infra/adapters/stripe', () => ({ + stripe: { + subscriptions: { + update: vi.fn().mockResolvedValue({ id: 'sub_123', cancel_at_period_end: true, status: 'active', - , - , -} -)) + }), + }, + }, +})) -describe('scheduleSubscriptionCancellation', () => -{ +describe('scheduleSubscriptionCancellation', () => { it('should schedule subscription cancellation at period end', async () => { const providerSubId = uniqueProviderSubId() const user = await makeUser() @@ -54,58 +53,52 @@ describe('scheduleSubscriptionCancellation', () => providerSubId, expect.any(Date) ) + expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') -expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') - -const subscriptionFromDb = await getSubscriptionById(subscription.id) -expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') -}) - - it('should set canceledAt from provider getCurrentPeriodEnd', async () => -{ - const providerSubId = uniqueProviderSubId() - const periodEnd = new Date('2025-04-09T23:59:59.000Z') - const provider = mockSubscriptionProvider(periodEnd) - - const user = await makeUser() - const subscription = await makeSubscription({ - userId: user.id, - providerSubscriptionId: providerSubId, + const subscriptionFromDb = await getSubscriptionById(subscription.id) + expect(subscriptionFromDb?.status).toBe('PENDING_CANCELLATION') }) - const scheduledCancellation = await scheduleCancellation( - subscription, - 'test', - provider - ) + it('should set canceledAt from provider getCurrentPeriodEnd', async () => { + const providerSubId = uniqueProviderSubId() + const periodEnd = new Date('2025-04-09T23:59:59.000Z') + const provider = mockSubscriptionProvider(periodEnd) - expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') - expect(scheduledCancellation.canceledAt).toEqual(periodEnd) + const user = await makeUser() + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: providerSubId, + }) - const subscriptionFromDb = await getSubscriptionById(subscription.id) - expect(subscriptionFromDb?.canceledAt).toEqual(periodEnd) -} -) + const scheduledCancellation = await scheduleCancellation( + subscription, + 'test', + provider + ) - it('should throw when subscription has no provider subscription id', async () => -{ - const user = await makeUser() - const provider = mockSubscriptionProvider() + expect(scheduledCancellation.status).toBe('PENDING_CANCELLATION') + expect(scheduledCancellation.canceledAt).toEqual(periodEnd) - const subscription = await makeSubscription({ - userId: user.id, - providerSubscriptionId: null, + const subscriptionFromDb = await getSubscriptionById(subscription.id) + expect(subscriptionFromDb?.canceledAt).toEqual(periodEnd) }) - await expect( - scheduleCancellation(subscription, 'test', provider) - ).rejects.toThrow( - 'Cannot schedule cancellation: subscription has no provider subscription id' - ) + it('should throw when subscription has no provider subscription id', async () => { + const user = await makeUser() + const provider = mockSubscriptionProvider() - expect(provider.getCurrentPeriodEnd).not.toHaveBeenCalled() - expect(provider.scheduleCancelAtPeriodEnd).not.toHaveBeenCalled() -} -) -} -) + const subscription = await makeSubscription({ + userId: user.id, + providerSubscriptionId: null, + }) + + await expect( + scheduleCancellation(subscription, 'test', provider) + ).rejects.toThrow( + 'Cannot schedule cancellation: subscription has no provider subscription id' + ) + + expect(provider.getCurrentPeriodEnd).not.toHaveBeenCalled() + expect(provider.scheduleCancelAtPeriodEnd).not.toHaveBeenCalled() + }) +}) From 2468809549c0af2cbb873ffd9ff1a5daa69f9806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Mon, 23 Feb 2026 23:43:27 -0300 Subject: [PATCH 22/27] chore: update subscription-related imports and add new migration for subscription provider --- .../handle-subscription-webhook.ts | 2 +- .../adapters/stripe-subscription-provider.ts | 2 +- ...260224023607_alter_subscriptions_table.sql | 4 + .../meta/20260224023607_snapshot.json | 1928 +++++++++++++++++ .../infra/db/migrations/meta/_journal.json | 7 + .../controllers/subscriptions-controller.ts | 2 +- 6 files changed, 1942 insertions(+), 3 deletions(-) create mode 100644 apps/backend/src/infra/db/migrations/20260224023607_alter_subscriptions_table.sql create mode 100644 apps/backend/src/infra/db/migrations/meta/20260224023607_snapshot.json diff --git a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts index d25c5b13..3b491fc8 100644 --- a/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts +++ b/apps/backend/src/domain/services/subscriptions/handle-subscription-webhook.ts @@ -2,7 +2,7 @@ import type Stripe from 'stripe' import { getSubscriptionByProviderSubscriptionId, updateSubscriptionStatusByProviderSubscriptionId, -} from '@/db/repositories/subscription-repository' +} from '@/infra/db/repositories/subscription-repository' /** * Handles customer.subscription.deleted webhook. diff --git a/apps/backend/src/infra/adapters/stripe-subscription-provider.ts b/apps/backend/src/infra/adapters/stripe-subscription-provider.ts index b8f6813d..a80b26c1 100644 --- a/apps/backend/src/infra/adapters/stripe-subscription-provider.ts +++ b/apps/backend/src/infra/adapters/stripe-subscription-provider.ts @@ -1,5 +1,5 @@ -import { stripe } from '@/adapters/stripe' import { SubscriptionAlreadyCanceledError } from '@/domain/errors/subscription-already-canceled-error' +import { stripe } from '@/infra/adapters/stripe' import type { SubscriptionProvider } from '@/ports/subscription-provider' async function getCurrentPeriodEnd(providerSubscriptionId: string) { diff --git a/apps/backend/src/infra/db/migrations/20260224023607_alter_subscriptions_table.sql b/apps/backend/src/infra/db/migrations/20260224023607_alter_subscriptions_table.sql new file mode 100644 index 00000000..50ef9f71 --- /dev/null +++ b/apps/backend/src/infra/db/migrations/20260224023607_alter_subscriptions_table.sql @@ -0,0 +1,4 @@ +CREATE TYPE "public"."subscription_provider" AS ENUM('STRIPE', 'APPLE');--> statement-breakpoint +ALTER TABLE "subscriptions" ADD COLUMN "subscription_provider" "subscription_provider" NOT NULL;--> statement-breakpoint +ALTER TABLE "subscriptions" ADD COLUMN "provider_subscription_id" varchar;--> statement-breakpoint +ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_provider_subscription_id_unique" UNIQUE("provider_subscription_id"); \ No newline at end of file diff --git a/apps/backend/src/infra/db/migrations/meta/20260224023607_snapshot.json b/apps/backend/src/infra/db/migrations/meta/20260224023607_snapshot.json new file mode 100644 index 00000000..2a864ef8 --- /dev/null +++ b/apps/backend/src/infra/db/migrations/meta/20260224023607_snapshot.json @@ -0,0 +1,1928 @@ +{ + "id": "cc48b773-bd6d-47a8-ba53-f99b62eb6e0f", + "prevId": "e3601253-62b1-49c2-bc92-a849b4d0deb6", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.feedbacks": { + "name": "feedbacks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "feedback_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "screenshot_url": { + "name": "screenshot_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "app_version": { + "name": "app_version", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "device_info": { + "name": "device_info", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "feedbacks_user_id_users_id_fk": { + "name": "feedbacks_user_id_users_id_fk", + "tableFrom": "feedbacks", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.followers": { + "name": "followers", + "schema": "", + "columns": { + "follower_id": { + "name": "follower_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "followed_id": { + "name": "followed_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "idx_followers_follower_id": { + "name": "idx_followers_follower_id", + "columns": [ + { + "expression": "follower_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "idx_followers_followed_id": { + "name": "idx_followers_followed_id", + "columns": [ + { + "expression": "followed_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "followers_follower_id_users_id_fk": { + "name": "followers_follower_id_users_id_fk", + "tableFrom": "followers", + "tableTo": "users", + "columnsFrom": [ + "follower_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "followers_followed_id_users_id_fk": { + "name": "followers_followed_id_users_id_fk", + "tableFrom": "followers", + "tableTo": "users", + "columnsFrom": [ + "followed_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "followers_followed_id_follower_id_pk": { + "name": "followers_followed_id_follower_id_pk", + "columns": [ + "followed_id", + "follower_id" + ] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.import_movies": { + "name": "import_movies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "import_id": { + "name": "import_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "end_date": { + "name": "end_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "item_status": { + "name": "item_status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "import_status": { + "name": "import_status", + "type": "import_item_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "TMDB_ID": { + "name": "TMDB_ID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "__metadata": { + "name": "__metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "import_movies_import_id_user_imports_id_fk": { + "name": "import_movies_import_id_user_imports_id_fk", + "tableFrom": "import_movies", + "tableTo": "user_imports", + "columnsFrom": [ + "import_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.import_series": { + "name": "import_series", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "import_id": { + "name": "import_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "start_date": { + "name": "start_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "end_date": { + "name": "end_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "item_status": { + "name": "item_status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "import_status": { + "name": "import_status", + "type": "import_item_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "TMDB_ID": { + "name": "TMDB_ID", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "watched_episodes": { + "name": "watched_episodes", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "series_episodes": { + "name": "series_episodes", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "__metadata": { + "name": "__metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "import_series_import_id_user_imports_id_fk": { + "name": "import_series_import_id_user_imports_id_fk", + "tableFrom": "import_series", + "tableTo": "user_imports", + "columnsFrom": [ + "import_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.likes": { + "name": "likes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "entity_id": { + "name": "entity_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "entity_type": { + "name": "entity_type", + "type": "like_entity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "idx_entity_id": { + "name": "idx_entity_id", + "columns": [ + { + "expression": "entity_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "likes_user_id_users_id_fk": { + "name": "likes_user_id_users_id_fk", + "tableFrom": "likes", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.list_items": { + "name": "list_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "list_id": { + "name": "list_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "media_type": { + "name": "media_type", + "type": "media_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "list_items_list_id_lists_id_fk": { + "name": "list_items_list_id_lists_id_fk", + "tableFrom": "list_items", + "tableTo": "lists", + "columnsFrom": [ + "list_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "list_items_id_list_id_pk": { + "name": "list_items_id_list_id_pk", + "columns": [ + "id", + "list_id" + ] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lists": { + "name": "lists", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "banner_url": { + "name": "banner_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "visibility": { + "name": "visibility", + "type": "list_visibility", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "user_id_idx": { + "name": "user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "lists_user_id_users_id_fk": { + "name": "lists_user_id_users_id_fk", + "tableFrom": "lists", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.magic_tokens": { + "name": "magic_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "used": { + "name": "used", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "token_user_id_idx": { + "name": "token_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "token_idx": { + "name": "token_idx", + "columns": [ + { + "expression": "token", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "magic_tokens_user_id_users_id_fk": { + "name": "magic_tokens_user_id_users_id_fk", + "tableFrom": "magic_tokens", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.review_replies": { + "name": "review_replies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "reply": { + "name": "reply", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "review_id": { + "name": "review_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "review_replies_user_id_users_id_fk": { + "name": "review_replies_user_id_users_id_fk", + "tableFrom": "review_replies", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "review_replies_review_id_reviews_id_fk": { + "name": "review_replies_review_id_reviews_id_fk", + "tableFrom": "review_replies", + "tableTo": "reviews", + "columnsFrom": [ + "review_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.reviews": { + "name": "reviews", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "media_type": { + "name": "media_type", + "type": "media_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "review": { + "name": "review", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "rating": { + "name": "rating", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "has_spoilers": { + "name": "has_spoilers", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "language": { + "name": "language", + "type": "languages", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "season_number": { + "name": "season_number", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "episode_number": { + "name": "episode_number", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "idx_reviews_user_rating": { + "name": "idx_reviews_user_rating", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "rating", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "reviews_user_id_users_id_fk": { + "name": "reviews_user_id_users_id_fk", + "tableFrom": "reviews", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.social_links": { + "name": "social_links", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "platform": { + "name": "platform", + "type": "social_platforms", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "social_links_user_id_users_id_fk": { + "name": "social_links_user_id_users_id_fk", + "tableFrom": "social_links", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_platform_unique": { + "name": "user_platform_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "platform" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.subscriptions": { + "name": "subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "subscription_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "subscription_provider": { + "name": "subscription_provider", + "type": "subscription_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "subscription_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'ACTIVE'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "canceled_at": { + "name": "canceled_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "cancellation_reason": { + "name": "cancellation_reason", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "provider_subscription_id": { + "name": "provider_subscription_id", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "active_subscription_idx": { + "name": "active_subscription_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "where": "\"subscriptions\".\"status\" = $1", + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "subscriptions_user_id_users_id_fk": { + "name": "subscriptions_user_id_users_id_fk", + "tableFrom": "subscriptions", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "subscriptions_provider_subscription_id_unique": { + "name": "subscriptions_provider_subscription_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_subscription_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_activities": { + "name": "user_activities", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "activity_type": { + "name": "activity_type", + "type": "activity_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "entity_id": { + "name": "entity_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "entity_type": { + "name": "entity_type", + "type": "like_entity", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "user_activity_idx": { + "name": "user_activity_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_activities_user_id_users_id_fk": { + "name": "user_activities_user_id_users_id_fk", + "tableFrom": "user_activities", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_episodes": { + "name": "user_episodes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "season_number": { + "name": "season_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "episode_number": { + "name": "episode_number", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "watched_at": { + "name": "watched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "runtime": { + "name": "runtime", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + } + }, + "indexes": { + "idx_user_episodes_user_id": { + "name": "idx_user_episodes_user_id", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "idx_user_episodes_user_tmdb": { + "name": "idx_user_episodes_user_tmdb", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "tmdb_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_episodes_user_id_users_id_fk": { + "name": "user_episodes_user_id_users_id_fk", + "tableFrom": "user_episodes", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_episode_unique": { + "name": "user_episode_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "tmdb_id", + "season_number", + "episode_number" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_imports": { + "name": "user_imports", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "items_count": { + "name": "items_count", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "import_status": { + "name": "import_status", + "type": "import_status_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "providers_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "user_imports_user_id_users_id_fk": { + "name": "user_imports_user_id_users_id_fk", + "tableFrom": "user_imports", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_items": { + "name": "user_items", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tmdb_id": { + "name": "tmdb_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "media_type": { + "name": "media_type", + "type": "media_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "added_at": { + "name": "added_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "idx_user_items_user_status": { + "name": "idx_user_items_user_status", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "idx_user_items_user_media_status": { + "name": "idx_user_items_user_media_status", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "media_type", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_items_user_id_users_id_fk": { + "name": "user_items_user_id_users_id_fk", + "tableFrom": "user_items", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_items_userid_tmdbid_media_type_unique": { + "name": "user_items_userid_tmdbid_media_type_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "tmdb_id", + "media_type" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_watch_entries": { + "name": "user_watch_entries", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_item_id": { + "name": "user_item_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "watched_at": { + "name": "watched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "user_watch_entries_user_item_idx": { + "name": "user_watch_entries_user_item_idx", + "columns": [ + { + "expression": "user_item_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "user_watch_entries_user_item_id_user_items_id_fk": { + "name": "user_watch_entries_user_item_id_user_items_id_fk", + "tableFrom": "user_watch_entries", + "tableTo": "user_items", + "columnsFrom": [ + "user_item_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "display_name": { + "name": "display_name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "banner_url": { + "name": "banner_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "avatar_url": { + "name": "avatar_url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "is_legacy": { + "name": "is_legacy", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "biography": { + "name": "biography", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "username_lower_idx": { + "name": "username_lower_idx", + "columns": [ + { + "expression": "LOWER(\"username\")", + "asc": true, + "isExpression": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "email_lower_idx": { + "name": "email_lower_idx", + "columns": [ + { + "expression": "LOWER(\"email\")", + "asc": true, + "isExpression": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_username_unique": { + "name": "users_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + }, + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_preferences": { + "name": "user_preferences", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "watch_providers_ids": { + "name": "watch_providers_ids", + "type": "integer[]", + "primaryKey": false, + "notNull": false + }, + "watch_region": { + "name": "watch_region", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "media_types": { + "name": "media_types", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "genre_ids": { + "name": "genre_ids", + "type": "integer[]", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_preferences_user_id_users_id_fk": { + "name": "user_preferences_user_id_users_id_fk", + "tableFrom": "user_preferences", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_preferences_user_id_unique": { + "name": "user_preferences_user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.activity_type": { + "name": "activity_type", + "schema": "public", + "values": [ + "CREATE_LIST", + "ADD_ITEM", + "DELETE_ITEM", + "LIKE_REVIEW", + "LIKE_REPLY", + "LIKE_LIST", + "CREATE_REVIEW", + "CREATE_REPLY", + "FOLLOW_USER", + "WATCH_EPISODE", + "CHANGE_STATUS", + "CREATE_ACCOUNT" + ] + }, + "public.feedback_type": { + "name": "feedback_type", + "schema": "public", + "values": [ + "bug", + "idea" + ] + }, + "public.import_item_status": { + "name": "import_item_status", + "schema": "public", + "values": [ + "COMPLETED", + "FAILED", + "NOT_STARTED" + ] + }, + "public.import_status_enum": { + "name": "import_status_enum", + "schema": "public", + "values": [ + "PARTIAL", + "COMPLETED", + "FAILED", + "NOT_STARTED" + ] + }, + "public.languages": { + "name": "languages", + "schema": "public", + "values": [ + "en-US", + "es-ES", + "fr-FR", + "it-IT", + "de-DE", + "pt-BR", + "ja-JP" + ] + }, + "public.like_entity": { + "name": "like_entity", + "schema": "public", + "values": [ + "REVIEW", + "REPLY", + "LIST" + ] + }, + "public.list_visibility": { + "name": "list_visibility", + "schema": "public", + "values": [ + "PUBLIC", + "NETWORK", + "PRIVATE" + ] + }, + "public.media_type": { + "name": "media_type", + "schema": "public", + "values": [ + "TV_SHOW", + "MOVIE" + ] + }, + "public.providers_enum": { + "name": "providers_enum", + "schema": "public", + "values": [ + "MY_ANIME_LIST", + "LETTERBOXD" + ] + }, + "public.social_platforms": { + "name": "social_platforms", + "schema": "public", + "values": [ + "INSTAGRAM", + "TIKTOK", + "YOUTUBE", + "X" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "WATCHLIST", + "WATCHED", + "WATCHING", + "DROPPED" + ] + }, + "public.subscription_provider": { + "name": "subscription_provider", + "schema": "public", + "values": [ + "STRIPE", + "APPLE" + ] + }, + "public.subscription_status": { + "name": "subscription_status", + "schema": "public", + "values": [ + "ACTIVE", + "CANCELED", + "EXPIRED", + "PENDING_CANCELLATION" + ] + }, + "public.subscription_type": { + "name": "subscription_type", + "schema": "public", + "values": [ + "MEMBER", + "PRO" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/backend/src/infra/db/migrations/meta/_journal.json b/apps/backend/src/infra/db/migrations/meta/_journal.json index 21a5b4e3..41ce70ab 100644 --- a/apps/backend/src/infra/db/migrations/meta/_journal.json +++ b/apps/backend/src/infra/db/migrations/meta/_journal.json @@ -435,6 +435,13 @@ "when": 1771520315168, "tag": "20260219165835_alter_users_add_soft_delete", "breakpoints": true + }, + { + "idx": 62, + "version": "7", + "when": 1771900567551, + "tag": "20260224023607_alter_subscriptions_table", + "breakpoints": true } ] } \ No newline at end of file diff --git a/apps/backend/src/infra/http/controllers/subscriptions-controller.ts b/apps/backend/src/infra/http/controllers/subscriptions-controller.ts index c3ba7340..bcfdcfce 100644 --- a/apps/backend/src/infra/http/controllers/subscriptions-controller.ts +++ b/apps/backend/src/infra/http/controllers/subscriptions-controller.ts @@ -1,9 +1,9 @@ import type { FastifyReply, FastifyRequest } from 'fastify' -import { StripeSubscriptionProvider } from '@/adapters/stripe-subscription-provider' import { DomainError } from '@/domain/errors/domain-error' import { cancelSubscription } from '@/domain/services/subscriptions/cancel-subscription' import { getSubscription } from '@/domain/services/subscriptions/get-subscription' import { scheduleCancellation } from '@/domain/services/subscriptions/schedule-subscription-cancellation' +import { StripeSubscriptionProvider } from '@/infra/adapters/stripe-subscription-provider' import { deleteSubscriptionBodySchema } from '../schemas/subscriptions' const subscriptionProvider = StripeSubscriptionProvider From d7095da2b6a81943d211f31db9f908fc380c1f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Alves?= Date: Tue, 24 Feb 2026 00:00:34 -0300 Subject: [PATCH 23/27] chore: update dependencies in pnpm-lock.yaml and package.json, enhance test imports with improved mocking --- apps/backend/package.json | 2 +- .../imports/publish-import-to-queue.spec.ts | 4 +- apps/web/next-env.d.ts | 2 +- pnpm-lock.yaml | 5016 ++++++++--------- 4 files changed, 2506 insertions(+), 2518 deletions(-) diff --git a/apps/backend/package.json b/apps/backend/package.json index 0dc35119..ea39f06f 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -64,7 +64,7 @@ "drizzle-zod": "^0.8.3", "env-paths": "^3.0.0", "fast-xml-parser": "^5.3.3", - "fastify": "^5.6.2", + "fastify": "^5.7.4", "fastify-type-provider-zod": "^6.1.0", "google-auth-library": "^9.14.0", "https": "^1.0.0", diff --git a/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts b/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts index 1b3870f3..2a373eca 100644 --- a/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts +++ b/apps/backend/src/domain/services/imports/publish-import-to-queue.spec.ts @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, it } from 'vitest' +import { beforeEach, describe, expect, it, vi } from 'vitest' import { config } from '@/config' import { makeManyRawImportMovies } from '@/test/factories/make-import-movies' import { makeManyRawImportSeries } from '@/test/factories/make-import-series' @@ -8,7 +8,7 @@ import { publishToQueue } from './publish-import-to-queue' const mockPublish = vi.fn().mockResolvedValue(undefined) -vi.mock('@/factories/queue-service-factory', () => ({ +vi.mock('@/infra/factories/queue-service-factory', () => ({ queueServiceFactory: () => ({ publish: mockPublish, }), diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts index a3e4680c..c4b7818f 100644 --- a/apps/web/next-env.d.ts +++ b/apps/web/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import './.next/dev/types/routes.d.ts' +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d5fd28d..7513941a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,13 +28,13 @@ importers: dependencies: '@aws-sdk/client-s3': specifier: ^3.962.0 - version: 3.980.0 + version: 3.996.0 '@aws-sdk/client-sqs': specifier: ^3.962.0 - version: 3.980.0 + version: 3.996.0 '@aws-sdk/lib-storage': specifier: ^3.962.0 - version: 3.980.0(@aws-sdk/client-s3@3.980.0) + version: 3.996.0(@aws-sdk/client-s3@3.996.0) '@fastify/cors': specifier: ^11.2.0 version: 11.2.0 @@ -55,7 +55,7 @@ importers: version: 7.2.0 '@fastify/swagger': specifier: ^9.6.1 - version: 9.6.1 + version: 9.7.0 '@fastify/swagger-ui': specifier: ^5.2.4 version: 5.2.5 @@ -79,10 +79,10 @@ importers: version: 0.212.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': specifier: ^2.5.0 - version: 2.5.0(@opentelemetry/api@1.9.0) + version: 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': specifier: ^2.5.0 - version: 2.5.0(@opentelemetry/api@1.9.0) + version: 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-node': specifier: ^0.211.0 version: 0.211.0(@opentelemetry/api@1.9.0) @@ -91,22 +91,22 @@ importers: version: 1.39.0 '@plotwist_app/tmdb': specifier: ^0.2.5 - version: 0.2.5(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) + version: 0.2.5(@swc/core@1.15.13)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) '@react-email/components': specifier: ^1.0.3 - version: 1.0.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.0.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@swc/core': specifier: ^1.15.8 - version: 1.15.11 + version: 1.15.13 '@types/node-cron': specifier: ^3.0.11 version: 3.0.11 '@types/react': specifier: ^19.2.7 - version: 19.2.10 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.10) + version: 19.2.3(@types/react@19.2.14) '@vitest/coverage-v8': specifier: ^4.0.16 version: 4.0.18(vitest@4.0.18) @@ -115,7 +115,7 @@ importers: version: 0.5.16 axios: specifier: ^1.13.2 - version: 1.13.4 + version: 1.13.5 bcryptjs: specifier: ^3.0.3 version: 3.0.3 @@ -139,13 +139,13 @@ importers: version: 3.0.0 fast-xml-parser: specifier: ^5.3.3 - version: 5.3.4 + version: 5.3.7 fastify: - specifier: ^5.6.2 - version: 5.7.2 + specifier: ^5.7.4 + version: 5.7.4 fastify-type-provider-zod: specifier: ^6.1.0 - version: 6.1.0(@fastify/swagger@9.6.1)(fastify@5.7.2)(openapi-types@12.1.3)(zod@4.3.6) + version: 6.1.0(@fastify/swagger@9.7.0)(fastify@5.7.4)(openapi-types@12.1.3)(zod@4.3.6) google-auth-library: specifier: ^9.14.0 version: 9.15.1 @@ -154,7 +154,7 @@ importers: version: 1.0.0 ioredis: specifier: ^5.8.2 - version: 5.9.2 + version: 5.9.3 jsonwebtoken: specifier: ^9.0.2 version: 9.0.3 @@ -166,10 +166,10 @@ importers: version: 4.2.1 openai: specifier: ^6.15.0 - version: 6.17.0(ws@8.19.0)(zod@4.3.6) + version: 6.23.0(ws@8.19.0)(zod@4.3.6) pino: specifier: ^10.1.0 - version: 10.3.0 + version: 10.3.1 pino-pretty: specifier: ^13.1.3 version: 13.1.3 @@ -178,7 +178,7 @@ importers: version: 3.4.8 puppeteer: specifier: ^24.34.0 - version: 24.36.1(typescript@5.9.3) + version: 24.37.5(typescript@5.9.3) react: specifier: ^19.2.3 version: 19.2.4 @@ -187,10 +187,10 @@ importers: version: 19.2.4(react@19.2.4) resend: specifier: ^6.6.0 - version: 6.9.1(@react-email/render@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 6.9.2(@react-email/render@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) stripe: specifier: ^20.1.0 - version: 20.3.0(@types/node@25.1.0) + version: 20.3.1(@types/node@25.3.0) typeid-js: specifier: ^1.2.0 version: 1.2.0 @@ -200,7 +200,7 @@ importers: version: 2.3.11 '@faker-js/faker': specifier: ^10.2.0 - version: 10.2.0 + version: 10.3.0 '@types/adm-zip': specifier: ^0.5.7 version: 0.5.7 @@ -209,13 +209,13 @@ importers: version: 6.0.0 '@types/ioredis-mock': specifier: ^8.2.6 - version: 8.2.6(ioredis@5.9.2) + version: 8.2.6(ioredis@5.9.3) '@types/jsonwebtoken': specifier: ^9.0.6 version: 9.0.10 '@types/node': specifier: ^25.0.3 - version: 25.1.0 + version: 25.3.0 '@vitest/ui': specifier: ^4.0.16 version: 4.0.18(vitest@4.0.18) @@ -224,22 +224,22 @@ importers: version: 11.0.0 drizzle-kit: specifier: ^0.31.8 - version: 0.31.8 + version: 0.31.9 ioredis-mock: specifier: ^8.13.1 - version: 8.13.1(@types/ioredis-mock@8.2.6(ioredis@5.9.2))(ioredis@5.9.2) + version: 8.13.1(@types/ioredis-mock@8.2.6(ioredis@5.9.3))(ioredis@5.9.3) localstack: specifier: ^1.0.0 version: 1.0.0 react-email: specifier: ^5.1.1 - version: 5.2.5 + version: 5.2.8 testcontainers: specifier: ^11.11.0 - version: 11.11.0 + version: 11.12.0 tsup: specifier: ^8.5.1 - version: 8.5.1(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 8.5.1(@swc/core@1.15.13)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -248,13 +248,13 @@ importers: version: 5.9.3 unplugin-swc: specifier: ^1.5.9 - version: 1.5.9(@swc/core@1.15.11)(rollup@4.57.1) + version: 1.5.9(@swc/core@1.15.13)(rollup@4.59.0) vite-tsconfig-paths: specifier: ^6.0.3 - version: 6.0.5(typescript@5.9.3)(vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^4.0.16 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.1.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) zod: specifier: ^4.3.5 version: 4.3.6 @@ -278,100 +278,100 @@ importers: version: 0.7.5 '@hookform/resolvers': specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.71.1(react@19.2.4)) + version: 5.2.2(react-hook-form@7.71.2(react@19.2.4)) '@mdx-js/loader': specifier: ^3.1.1 version: 3.1.1 '@mdx-js/react': specifier: ^3.1.1 - version: 3.1.1(@types/react@19.2.10)(react@19.2.4) + version: 3.1.1(@types/react@19.2.14)(react@19.2.4) '@next/bundle-analyzer': specifier: ^16.1.1 version: 16.1.6 '@next/mdx': specifier: ^16.1.1 - version: 16.1.6(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.10)(react@19.2.4)) + version: 16.1.6(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)) '@number-flow/react': specifier: ^0.5.10 - version: 0.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.5.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@plotwist/ui': specifier: workspace:* version: link:../../packages/ui '@plotwist_app/tmdb': specifier: ^0.2.5 - version: 0.2.5(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) + version: 0.2.5(@swc/core@1.15.13)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) '@radix-ui/react-accordion': specifier: ^1.2.12 - version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-avatar': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-checkbox': specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-context-menu': specifier: ^2.2.16 - version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-hover-card': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) '@radix-ui/react-label': specifier: ^2.1.8 - version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-navigation-menu': specifier: ^1.2.14 - version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-popover': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-radio-group': specifier: ^1.3.8 - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-scroll-area': specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-separator': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-slider': specifier: ^1.3.6 - version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-slot': specifier: ^1.2.4 - version: 1.2.4(@types/react@19.2.10)(react@19.2.4) + version: 1.2.4(@types/react@19.2.14)(react@19.2.4) '@radix-ui/react-tabs': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-toast': specifier: ^1.2.15 - version: 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-tooltip': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@stripe/stripe-js': specifier: ^8.6.0 - version: 8.7.0 + version: 8.8.0 '@tanstack/react-query': specifier: ^5.90.16 - version: 5.90.20(react@19.2.4) + version: 5.90.21(react@19.2.4) '@tanstack/react-table': specifier: ^8.21.3 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-virtual': specifier: ^3.13.16 - version: 3.13.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.13.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/mdx': specifier: ^2.0.13 version: 2.0.13 @@ -380,7 +380,7 @@ importers: version: 2.4.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: specifier: ^1.13.2 - version: 1.13.4 + version: 1.13.5 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -389,7 +389,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) cobe: specifier: ^0.6.5 version: 0.6.5 @@ -398,13 +398,13 @@ importers: version: 4.1.0 dotenv: specifier: ^17.2.3 - version: 17.2.3 + version: 17.3.1 framer-motion: specifier: ^12.23.26 - version: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) i18next: specifier: ^25.7.3 - version: 25.8.0(typescript@5.9.3) + version: 25.8.13(typescript@5.9.3) jose: specifier: ^6.1.3 version: 6.1.3 @@ -419,25 +419,25 @@ importers: version: 1.0.0 next: specifier: ^16.1.1 - version: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-auth: specifier: ^4.24.13 - version: 4.24.13(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(nodemailer@7.0.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 4.24.13(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-view-transitions: specifier: ^0.3.5 - version: 0.3.5(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.3.5(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nextjs-toploader: specifier: ^3.9.17 - version: 3.9.17(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.9.17(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nprogress: specifier: ^0.2.0 version: 0.2.0 nuqs: specifier: ^2.8.6 - version: 2.8.7(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 2.8.8(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.3 version: 19.2.4 @@ -452,7 +452,7 @@ importers: version: 6.5.3(react@19.2.4) react-day-picker: specifier: ^9.13.0 - version: 9.13.0(react@19.2.4) + version: 9.13.2(react@19.2.4) react-dom: specifier: ^19.2.3 version: 19.2.4(react@19.2.4) @@ -461,13 +461,13 @@ importers: version: 5.5.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-hook-form: specifier: ^7.70.0 - version: 7.71.1(react@19.2.4) + version: 7.71.2(react@19.2.4) react-i18next: specifier: ^16.5.1 - version: 16.5.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 16.5.4(i18next@25.8.13(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-intersection-observer: specifier: ^10.0.0 - version: 10.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 10.0.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-masonry-css: specifier: ^1.0.16 version: 1.0.16(react@19.2.4) @@ -479,7 +479,7 @@ importers: version: 5.30.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) recharts: specifier: ^3.6.0 - version: 3.7.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)(redux@5.0.1) + version: 3.7.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)(redux@5.0.1) sharp: specifier: ^0.34.5 version: 0.34.5 @@ -491,16 +491,16 @@ importers: version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) stripe: specifier: ^20.1.0 - version: 20.3.0(@types/node@25.1.0) + version: 20.3.1(@types/node@25.3.0) tailwind-variants: specifier: ^3.2.2 - version: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18) + version: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1) uuid: specifier: ^13.0.0 version: 13.0.0 vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) zod: specifier: ^4.3.5 version: 4.3.6 @@ -516,7 +516,7 @@ importers: version: 10.4.1 '@testing-library/react': specifier: ^16.3.1 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/micro-cors': specifier: ^0.1.6 version: 0.1.6 @@ -525,22 +525,22 @@ importers: version: 0.6.4 '@types/node': specifier: ^25.0.3 - version: 25.1.0 + version: 25.3.0 '@types/nprogress': specifier: ^0.2.3 version: 0.2.3 '@types/react': specifier: ^19.2.7 - version: 19.2.10 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.10) + version: 19.2.3(@types/react@19.2.14) '@types/react-simple-maps': specifier: ^3.0.6 version: 3.0.6 '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.2(vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/coverage-istanbul': specifier: ^4.0.16 version: 4.0.18(vitest@4.0.18) @@ -558,7 +558,7 @@ importers: version: 27.4.0 msw: specifier: ^2.12.7 - version: 2.12.7(@types/node@25.1.0)(typescript@5.9.3) + version: 2.12.10(@types/node@25.3.0)(typescript@5.9.3) orval: specifier: ^7.17.2 version: 7.21.0(openapi-types@12.1.3)(typescript@5.9.3) @@ -567,7 +567,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.16 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.1.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) packages/typescript-config: {} @@ -575,94 +575,94 @@ importers: dependencies: '@hookform/resolvers': specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.71.1(react@19.2.4)) + version: 5.2.2(react-hook-form@7.71.2(react@19.2.4)) '@plotwist/typescript-config': specifier: workspace:* version: link:../typescript-config '@radix-ui/react-accordion': specifier: ^1.2.12 - version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-alert-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-aspect-ratio': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-avatar': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-checkbox': specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-collapsible': specifier: ^1.1.12 - version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-context-menu': specifier: ^2.2.16 - version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-hover-card': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) '@radix-ui/react-label': specifier: ^2.1.8 - version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-menubar': specifier: ^1.1.16 - version: 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-navigation-menu': specifier: ^1.2.14 - version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-popover': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-progress': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-radio-group': specifier: ^1.3.8 - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-scroll-area': specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-separator': specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-slider': specifier: ^1.3.6 - version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-slot': specifier: ^1.2.4 - version: 1.2.4(@types/react@19.2.10)(react@19.2.4) + version: 1.2.4(@types/react@19.2.14)(react@19.2.4) '@radix-ui/react-switch': specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-tabs': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-toast': specifier: ^1.2.15 - version: 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-toggle': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-toggle-group': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-tooltip': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tailwindcss/typography': specifier: ^0.5.19 version: 0.5.19(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) @@ -680,7 +680,7 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -689,7 +689,7 @@ importers: version: 8.6.0(react@19.2.4) framer-motion: specifier: ^12.23.26 - version: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -704,50 +704,50 @@ importers: version: 19.2.4 react-day-picker: specifier: ^9.13.0 - version: 9.13.0(react@19.2.4) + version: 9.13.2(react@19.2.4) react-dom: specifier: ^19.2.3 version: 19.2.4(react@19.2.4) react-hook-form: specifier: ^7.70.0 - version: 7.71.1(react@19.2.4) + version: 7.71.2(react@19.2.4) react-resizable-panels: specifier: ^4.2.1 - version: 4.5.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 4.6.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) recharts: specifier: ^3.6.0 - version: 3.7.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)(redux@5.0.1) + version: 3.7.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)(redux@5.0.1) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tailwind-merge: specifier: ^3.4.0 - version: 3.4.0 + version: 3.5.0 tailwind-scrollbar-hide: specifier: ^4.0.0 version: 4.0.0(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) tailwind-variants: specifier: ^3.2.2 - version: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) zod: specifier: ^4.3.5 version: 4.3.6 devDependencies: '@types/node': specifier: ^25.0.3 - version: 25.1.0 + version: 25.3.0 '@types/react': specifier: ^19.2.7 - version: 19.2.10 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.10) + version: 19.2.3(@types/react@19.2.14) autoprefixer: specifier: ^10.4.23 version: 10.4.24(postcss@8.5.6) @@ -789,11 +789,11 @@ packages: peerDependencies: openapi-types: '>=7' - '@asamuzakjp/css-color@4.1.1': - resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} + '@asamuzakjp/css-color@4.1.2': + resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} - '@asamuzakjp/dom-selector@6.7.7': - resolution: {integrity: sha512-8CO/UQ4tzDd7ula+/CVimJIVWez99UJlbMyIgk8xOnhAVPKLnBZmUFYVgugS441v2ZqUq5EnSh6B0Ua0liSFAA==} + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -824,63 +824,63 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-s3@3.980.0': - resolution: {integrity: sha512-ch8QqKehyn1WOYbd8LyDbWjv84Z9OEj9qUxz8q3IOCU3ftAVkVR0wAuN96a1xCHnpOJcQZo3rOB08RlyKdkGxQ==} + '@aws-sdk/client-s3@3.996.0': + resolution: {integrity: sha512-BZsCeq8Sgqbm6xs8VfjyVVwhQZvxDR45P22dcbNNDFaGkkQ/TbJ5KxER19APR9aK+IC7l4KuLxInqeVab2DFfg==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-sqs@3.980.0': - resolution: {integrity: sha512-ibZ89sI3DRQOXrbHoMd83Dz6y1Qiu+qXPRTyiGV0w1tADFZlCL6G+HdwlvUmuHCkQBMErsztUzbMwil7/AhP6g==} + '@aws-sdk/client-sqs@3.996.0': + resolution: {integrity: sha512-VpjzPdeuhqfJIBy1CkczC5Xu7L53fPNdksUP5PK056MDEy8t+UqvF5Jv0CA/zlZSqhVK9sc2kYX3NjL0RqbKBw==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-sso@3.980.0': - resolution: {integrity: sha512-AhNXQaJ46C1I+lQ+6Kj+L24il5K9lqqIanJd8lMszPmP7bLnmX0wTKK0dxywcvrLdij3zhWttjAKEBNgLtS8/A==} + '@aws-sdk/client-sso@3.996.0': + resolution: {integrity: sha512-QzlZozTam0modnGanLjXBHbHC53mMxH/4XmoA9f6ZjPYaGlCcHPYLcslO6w2w68v+F3qN0kxVldUAcL/edtBBA==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.5': - resolution: {integrity: sha512-IMM7xGfLGW6lMvubsA4j6BHU5FPgGAxoQ/NA63KqNLMwTS+PeMBcx8DPHL12Vg6yqOZnqok9Mu4H2BdQyq7gSA==} + '@aws-sdk/core@3.973.12': + resolution: {integrity: sha512-hFiezao0lCEddPhSQEF6vCu+TepUN3edKxWYbswMoH87XpUvHJmFVX5+zttj4qi33saGiuOaJciswWcN6YSA9g==} engines: {node: '>=20.0.0'} '@aws-sdk/crc64-nvme@3.972.0': resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.3': - resolution: {integrity: sha512-OBYNY4xQPq7Rx+oOhtyuyO0AQvdJSpXRg7JuPNBJH4a1XXIzJQl4UHQTPKZKwfJXmYLpv4+OkcFen4LYmDPd3g==} + '@aws-sdk/credential-provider-env@3.972.10': + resolution: {integrity: sha512-YTWjM78Wiqix0Jv/anbq7+COFOFIBBMLZ+JsLKGwbTZNJ2DG4JNBnLVJAWylPOHwurMws9157pqzU8ODrpBOow==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.5': - resolution: {integrity: sha512-GpvBgEmSZPvlDekd26Zi+XsI27Qz7y0utUx0g2fSTSiDzhnd1FSa1owuodxR0BcUKNL7U2cOVhhDxgZ4iSoPVg==} + '@aws-sdk/credential-provider-http@3.972.12': + resolution: {integrity: sha512-adDRE3iFrgJJ7XhRHkb6RdFDMrA5x64WAWxygI3F6wND+3v5qQ4Uks12vsnEZgduU/+JQBgFB6L4vfwUS+rpBQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.3': - resolution: {integrity: sha512-rMQAIxstP7cLgYfsRGrGOlpyMl0l8JL2mcke3dsIPLWke05zKOFyR7yoJzWCsI/QiIxjRbxpvPiAeKEA6CoYkg==} + '@aws-sdk/credential-provider-ini@3.972.10': + resolution: {integrity: sha512-uAXUMfnQJxJ25qeiX4e3Z36NTm1XT7woajV8BXx2yAUDD4jF6kubqnLEcqtiPzHANxmhta2SXm5PbDwSdhThBw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.3': - resolution: {integrity: sha512-Gc3O91iVvA47kp2CLIXOwuo5ffo1cIpmmyIewcYjAcvurdFHQ8YdcBe1KHidnbbBO4/ZtywGBACsAX5vr3UdoA==} + '@aws-sdk/credential-provider-login@3.972.10': + resolution: {integrity: sha512-7Me+/EkY3kQC1nehBjb9ryc558N+a8R4Dg3rSV3zpiB7iQtvXh4gU3rV14h/dIbn2/VkK9sh55YdXamSjfdb/Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.4': - resolution: {integrity: sha512-UwerdzosMSY7V5oIZm3NsMDZPv2aSVzSkZxYxIOWHBeKTZlUqW7XpHtJMZ4PZpJ+HMRhgP+MDGQx4THndgqJfQ==} + '@aws-sdk/credential-provider-node@3.972.11': + resolution: {integrity: sha512-maPmjL7nOT93a1QdSDzdF/qLbI+jit3oslKp7g+pTbASewkSYax7FwboETdKRxufPfCdrsRzMW2pIJ+QA8e+Bg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.3': - resolution: {integrity: sha512-xkSY7zjRqeVc6TXK2xr3z1bTLm0wD8cj3lAkproRGaO4Ku7dPlKy843YKnHrUOUzOnMezdZ4xtmFc0eKIDTo2w==} + '@aws-sdk/credential-provider-process@3.972.10': + resolution: {integrity: sha512-tk/XxFhk37rKviArOIYbJ8crXiN3Mzn7Tb147jH51JTweNgUOwmqN+s027uqc3d8UeAyUcPUH8Bmfj86SzOhBQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.3': - resolution: {integrity: sha512-8Ww3F5Ngk8dZ6JPL/V5LhCU1BwMfQd3tLdoEuzaewX8FdnT633tPr+KTHySz9FK7fFPcz5qG3R5edVEhWQD4AA==} + '@aws-sdk/credential-provider-sso@3.972.10': + resolution: {integrity: sha512-tIz/O0yV1s77/FjMTWvvzU2vsztap2POlbetheOyRXq+E3PQtLOzCYopasXP+aeO1oerw3PFd9eycLbiwpgZZA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.3': - resolution: {integrity: sha512-62VufdcH5rRfiRKZRcf1wVbbt/1jAntMj1+J0qAd+r5pQRg2t0/P9/Rz16B1o5/0Se9lVL506LRjrhIJAhYBfA==} + '@aws-sdk/credential-provider-web-identity@3.972.10': + resolution: {integrity: sha512-HFlIVx8mm+Au7hkO7Hq/ZkPomjTt26iRj8uWZqEE1cJWMZ2NKvieNiT1ngzWt60Bc2uD51LqQUqiwr5JDgS4iQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/lib-storage@3.980.0': - resolution: {integrity: sha512-cR9rKtiBmkxCuuZV9bjNEz2xYEOqkvLBfV8HtuSmFqu2RogOyY5sAG9kua6N/qrVGNATM7QjFbtmHUBCjJtqnA==} + '@aws-sdk/lib-storage@3.996.0': + resolution: {integrity: sha512-on3PY2dunK6eMeVjkOVAlJtBDXvsHDXVi8nlhvBDdrS5cXc8yVjs72SmbV5rqml7V47Fikv95pdKT+WF9X9FYg==} engines: {node: '>=20.0.0'} peerDependencies: - '@aws-sdk/client-s3': 3.980.0 + '@aws-sdk/client-s3': ^3.996.0 '@aws-sdk/middleware-bucket-endpoint@3.972.3': resolution: {integrity: sha512-fmbgWYirF67YF1GfD7cg5N6HHQ96EyRNx/rDIrTF277/zTWVuPI2qS/ZHgofwR1NZPe/NWvoppflQY01LrbVLg==} @@ -890,8 +890,8 @@ packages: resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.972.3': - resolution: {integrity: sha512-MkNGJ6qB9kpsLwL18kC/ZXppsJbftHVGCisqpEVbTQsum8CLYDX1Bmp/IvhRGNxsqCO2w9/4PwhDKBjG3Uvr4Q==} + '@aws-sdk/middleware-flexible-checksums@3.972.10': + resolution: {integrity: sha512-7e6NIL+lay71PdKmkCeSJPQ6xkmc170Kc1wynoulh9iBEpu2jnVIL4zJ95pjvOg+njS6Og7Bmw2fiKCuXzPGrw==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-host-header@3.972.3': @@ -910,36 +910,36 @@ packages: resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.5': - resolution: {integrity: sha512-3IgeIDiQ15tmMBFIdJ1cTy3A9rXHGo+b9p22V38vA3MozeMyVC8VmCYdDLA0iMWo4VHA9LDJTgCM0+xU3wjBOg==} + '@aws-sdk/middleware-sdk-s3@3.972.12': + resolution: {integrity: sha512-knUtPDxuaFDV7/vhKpzuhF1z8rs7ZZoGXPhu6pet/FmRNgi+vsHjO61mhiAH5ygbId7Nk0sM3G1wxUfSVt0QFA==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-sqs@3.972.5': - resolution: {integrity: sha512-TnGzPJ9dPLqDltOaM0depE4VpAX3FS6xgJXBe2nigLUy9MMwovFGXzw/eGjAg1sDSVxfQ9EpbNkmyBcCoDQ74g==} + '@aws-sdk/middleware-sdk-sqs@3.972.8': + resolution: {integrity: sha512-KhwktzM8+EPoOkh+92WO2Fq6Ibk9GXr9eEh0nBOd/ZO83z7i8a7BF+mTNN6k8+eKAhLerbMWRT196u5JhKe0QA==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-ssec@3.972.3': resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.5': - resolution: {integrity: sha512-TVZQ6PWPwQbahUI8V+Er+gS41ctIawcI/uMNmQtQ7RMcg3JYn6gyKAFKUb3HFYx2OjYlx1u11sETSwwEUxVHTg==} + '@aws-sdk/middleware-user-agent@3.972.12': + resolution: {integrity: sha512-iv9toQZloEJp+dIuOr+1XWGmBMLU9c2qqNtgscfnEBZnUq3qKdBJHmLTKoq3mkLlV+41GrCWn8LrOunc6OlP6g==} engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.980.0': - resolution: {integrity: sha512-/dONY5xc5/CCKzOqHZCTidtAR4lJXWkGefXvTRKdSKMGaYbbKsxDckisd6GfnvPSLxWtvQzwgRGRutMRoYUApQ==} + '@aws-sdk/nested-clients@3.996.0': + resolution: {integrity: sha512-edZwYLgRI0rZlH9Hru9+JvTsR1OAxuCRGEtJohkZneIJ5JIYzvFoMR1gaASjl1aPKRhjkCv8SSAb7hes5a1GGA==} engines: {node: '>=20.0.0'} '@aws-sdk/region-config-resolver@3.972.3': resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.980.0': - resolution: {integrity: sha512-tO2jBj+ZIVM0nEgi1SyxWtaYGpuAJdsrugmWcI3/U2MPWCYsrvKasUo0026NvJJao38wyUq9B8XTG8Xu53j/VA==} + '@aws-sdk/signature-v4-multi-region@3.996.0': + resolution: {integrity: sha512-CLSrCdBoyIXSthaUcDzKw3fzRNbbyA/BawEMQBxsybYTZhGeC9P9p2DXuqTqVvla+PtEXBgRq0/Sgz2fEOBKyg==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.980.0': - resolution: {integrity: sha512-1nFileg1wAgDmieRoj9dOawgr2hhlh7xdvcH57b1NnqfPaVlcqVJyPc6k3TLDUFPY69eEwNxdGue/0wIz58vjA==} + '@aws-sdk/token-providers@3.996.0': + resolution: {integrity: sha512-jzBmlG97hYPdHjFs7G11fBgVArcwUrZX+SbGeQMph7teEWLDqIruKV+N0uzxFJF2GJJJ0UnMaKhv3PcXMltySg==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.973.1': @@ -950,8 +950,8 @@ packages: resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.980.0': - resolution: {integrity: sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==} + '@aws-sdk/util-endpoints@3.996.0': + resolution: {integrity: sha512-EhSBGWSGQ6Jcbt6jRyX1/0EV7rf+6RGbIIskN0MTtHk0k8uj5FAa1FZhLf+1ETfnDTy/BT39t5IUOQiZL5X1jQ==} engines: {node: '>=20.0.0'} '@aws-sdk/util-locate-window@3.965.4': @@ -961,8 +961,8 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.3': resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} - '@aws-sdk/util-user-agent-node@3.972.3': - resolution: {integrity: sha512-gqG+02/lXQtO0j3US6EVnxtwwoXQC5l2qkhLCrqUrqdtcQxV7FDMbm9wLjKqoronSHyELGTjbFKK/xV5q1bZNA==} + '@aws-sdk/util-user-agent-node@3.972.11': + resolution: {integrity: sha512-pQr35pSZANfUb0mJ9H87pziJQ39jW1D7xFRwh36eWfrEclbKoIqrzpOIVz49o1Jq9ZQzOtjS7rQVvt7V4w5awA==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -970,28 +970,28 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.2': - resolution: {integrity: sha512-jGOOV/bV1DhkkUhHiZ3/1GZ67cZyOXaDb7d1rYD6ZiXf5V9tBNOcgqXwRRPvrCbYaFRa1pPMFb3ZjqjWpR3YfA==} + '@aws-sdk/xml-builder@3.972.5': + resolution: {integrity: sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.3': resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} engines: {node: '>=18.0.0'} - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.6': - resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -1081,8 +1081,8 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true @@ -1158,8 +1158,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.28.6': - resolution: {integrity: sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==} + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1224,8 +1224,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.28.6': - resolution: {integrity: sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1302,8 +1302,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.28.5': - resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1314,8 +1314,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1428,8 +1428,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.6': - resolution: {integrity: sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==} + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1506,8 +1506,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.6': - resolution: {integrity: sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==} + '@babel/preset-env@7.29.0': + resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1537,12 +1537,12 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@balena/dockerignore@1.0.2': @@ -1610,36 +1610,36 @@ packages: peerDependencies: commander: ~14.0.0 - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': - resolution: {integrity: sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==} + '@csstools/css-syntax-patches-for-csstree@1.0.28': + resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} @@ -1696,8 +1696,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1714,8 +1714,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1732,8 +1732,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1750,8 +1750,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1768,8 +1768,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1786,8 +1786,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1804,8 +1804,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1822,8 +1822,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1840,8 +1840,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1858,8 +1858,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1876,8 +1876,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1894,8 +1894,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1912,8 +1912,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1930,8 +1930,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1948,8 +1948,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1966,8 +1966,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1984,8 +1984,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1996,8 +1996,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2014,8 +2014,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -2026,8 +2026,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2044,8 +2044,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -2056,8 +2056,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2074,8 +2074,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2092,8 +2092,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2110,8 +2110,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2128,14 +2128,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@exodus/bytes@1.10.0': - resolution: {integrity: sha512-tf8YdcbirXdPnJ+Nd4UN1EXnz+IP2DI45YVEr3vvzcVTOyrApkmIB4zvOQVd3XPr7RXnfBtAx+PXImXOIU0Ajg==} + '@exodus/bytes@1.14.1': + resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -2146,8 +2146,8 @@ packages: '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} - '@faker-js/faker@10.2.0': - resolution: {integrity: sha512-rTXwAsIxpCqzUnZvrxVh3L0QA0NzToqWBLAhV+zDV3MIIwiQhAZHMdPCIaj5n/yADu/tyk12wIPgL6YHGXJP+g==} + '@faker-js/faker@10.3.0': + resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} '@fastify/accept-negotiator@2.0.1': @@ -2162,8 +2162,8 @@ packages: '@fastify/cors@11.2.0': resolution: {integrity: sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==} - '@fastify/deepmerge@3.2.0': - resolution: {integrity: sha512-aO5giNgFN+rD4fMUAkro9nEL7c9gh5Q3lh0ZGKMDAhQAytf22HLicF/qZ2EYTDmH+XL2WvdazwBfOdmp6NiwBg==} + '@fastify/deepmerge@3.2.1': + resolution: {integrity: sha512-N5Oqvltoa2r9z1tbx4xjky0oRR60v+T47Ic4J1ukoVQcptLOrIdRnCSdTGmOmajZuHVKlTnfcmrjyqsGEW1ztA==} '@fastify/error@4.2.0': resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==} @@ -2206,8 +2206,8 @@ packages: '@fastify/swagger-ui@5.2.5': resolution: {integrity: sha512-ky3I0LAkXKX/prwSDpoQ3kscBKsj2Ha6Gp1/JfgQSqyx0bm9F2bE//XmGVGj2cR9l5hUjZYn60/hqn7e+OLgWQ==} - '@fastify/swagger@9.6.1': - resolution: {integrity: sha512-fKlpJqFMWoi4H3EdUkDaMteEYRCfQMEkK0HJJ0eaf4aRlKd8cbq0pVkOfXDXmtvMTXYcnx3E+l023eFDBsA1HA==} + '@fastify/swagger@9.7.0': + resolution: {integrity: sha512-Vp1SC1GC2Hrkd3faFILv86BzUNyFz5N4/xdExqtCgkGASOzn/x+eMe4qXIGq7cdT6wif/P/oa6r1Ruqx19paZA==} '@floating-ui/core@1.7.4': resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} @@ -2256,8 +2256,8 @@ packages: resolution: {integrity: sha512-AoFbSarOqFBYH+1TZ9Ahkm2IWYSi5v0pBk88fpV+5b3qGJukypX8PwvCWADjuyIccKg48/F73a6hTTkBzDQ2UA==} engines: {node: '>=16.0.0'} - '@ibm-cloud/openapi-ruleset@1.33.6': - resolution: {integrity: sha512-q3FnXqiQkSrC7HuLn3u+cMMmAHUvIRFdLCbBSnJCuJPWa+OYoA8gDgtw9KXGkOklwxToXEwmjRBIfeQDoCxt2w==} + '@ibm-cloud/openapi-ruleset@1.33.7': + resolution: {integrity: sha512-xAhFrqqIEl7MIeb7otM33CVFBB8qHkyNp68ac/PJfA8zKg1LkZIJINntRUxC54gKHmz45rUYXNEBVvpyi/N6sg==} engines: {node: '>=16.0.0'} '@img/colour@1.0.0': @@ -2438,18 +2438,14 @@ packages: '@ioredis/commands@1.5.0': resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} @@ -2498,6 +2494,9 @@ packages: '@opentelemetry/api': '>=1.9.0 <2.0.0' drizzle-orm: '>=0.28.0' + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + '@lukeed/ms@2.0.2': resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} engines: {node: '>=8'} @@ -2519,8 +2518,8 @@ packages: '@types/react': '>=16' react: '>=16' - '@mswjs/interceptors@0.40.0': - resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==} + '@mswjs/interceptors@0.41.3': + resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} engines: {node: '>=18'} '@next/bundle-analyzer@16.1.6': @@ -2600,8 +2599,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@number-flow/react@0.5.11': - resolution: {integrity: sha512-xo7QFAfQlKiIRbLjoIjZNXsNQmY+QxkyxkNWy+BCP9u1/SkqyqQ/1pYWa7d175V2r4OdmvCvlAnACSYOP1pTaw==} + '@number-flow/react@0.5.14': + resolution: {integrity: sha512-FGUqjh/P5/ukr0U0ySwb987M0SbRkrnZq70f0wQFncDbXa3SIib4L+FTr5ngvWwGAW8S6b391eTXcfhErZsw4w==} peerDependencies: react: ^18 || ^19 react-dom: ^18 || ^19 @@ -2787,6 +2786,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/resources@2.5.1': + resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-logs@0.211.0': resolution: {integrity: sha512-O5nPwzgg2JHzo59kpQTPUOTzFi0Nv5LxryG27QoXBciX3zWM3z83g+SNOHhiQVYRWFSxoWn1JM2TGD5iNjOwdA==} engines: {node: ^18.19.0 || >=20.6.0} @@ -2799,6 +2804,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.9.0 <1.10.0' + '@opentelemetry/sdk-metrics@2.5.1': + resolution: {integrity: sha512-RKMn3QKi8nE71ULUo0g/MBvq1N4icEBo7cQSKnL3URZT16/YH3nSVgWegOjwx7FRBTrjOIkMJkCUn/ZFIEfn4A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + '@opentelemetry/sdk-node@0.211.0': resolution: {integrity: sha512-+s1eGjoqmPCMptNxcJJD4IxbWJKNLOQFNKhpwkzi2gLkEbCj6LzSHJNhPcLeBrBlBLtlSpibM+FuS7fjZ8SSFQ==} engines: {node: ^18.19.0 || >=20.6.0} @@ -2897,8 +2908,8 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@puppeteer/browsers@2.11.2': - resolution: {integrity: sha512-GBY0+2lI9fDrjgb5dFL9+enKXqyOPok9PXg/69NVkjW3bikbK9RQrNrI3qccQXmDNN7ln4j/yL89Qgvj/tfqrw==} + '@puppeteer/browsers@2.13.0': + resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} engines: {node: '>=18'} hasBin: true @@ -3593,8 +3604,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/components@1.0.6': - resolution: {integrity: sha512-3GwOeq+5yyiAcwSf7TnHi/HWKn22lXbwxQmkkAviSwZLlhsRVxvmWqRxvUVfQk/HclDUG+62+sGz9qjfb2Uxjw==} + '@react-email/components@1.0.8': + resolution: {integrity: sha512-zY81ED6o5MWMzBkr9uZFuT24lWarT+xIbOZxI6C9dsFmCWBczM8IE1BgOI8rhpUK4JcYVDy1uKxYAFqsx2Bc4w==} engines: {node: '>=20.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -3678,8 +3689,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/tailwind@2.0.3': - resolution: {integrity: sha512-URXb/T2WS4RlNGM5QwekYnivuiVUcU87H0y5sqLl6/Oi3bMmgL0Bmw/W9GeJylC+876Vw+E6NkE0uRiUFIQwGg==} + '@react-email/tailwind@2.0.5': + resolution: {integrity: sha512-7Ey+kiWliJdxPMCLYsdDts8ffp4idlP//w4Ui3q/A5kokVaLSNKG8DOg/8qAuzWmRiGwNQVOKBk7PXNlK5W+sg==} engines: {node: '>=20.0.0'} peerDependencies: '@react-email/body': 0.2.1 @@ -3733,8 +3744,8 @@ packages: react-redux: optional: true - '@rolldown/pluginutils@1.0.0-beta.53': - resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} + '@rolldown/pluginutils@1.0.0-rc.3': + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -3745,128 +3756,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] @@ -3888,220 +3899,220 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@smithy/abort-controller@4.2.8': - resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} + '@smithy/abort-controller@4.2.9': + resolution: {integrity: sha512-6YGSygFmck1vMjzSxbjEPKMm1xWUr2+w+F8kWVc8rqKQYd1C5zZftvxGii4ti4Mh5ulIXZtAUoXS88Hhu6fkjQ==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader-native@4.2.1': - resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==} + '@smithy/chunked-blob-reader-native@4.2.2': + resolution: {integrity: sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader@5.2.0': - resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} + '@smithy/chunked-blob-reader@5.2.1': + resolution: {integrity: sha512-y5d4xRiD6TzeP5BWlb+Ig/VFqF+t9oANNhGeMqyzU7obw7FYgTgVi50i5JqBTeKp+TABeDIeeXFZdz65RipNtA==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.4.6': - resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} + '@smithy/config-resolver@4.4.7': + resolution: {integrity: sha512-RISbtc12JKdFRYadt2kW12Cp6XCSU00uFaBZPZqInNVSrRdJFPY/S6nd6/sV7+ySTgGPiKrERtnimEFI6sSweQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.22.0': - resolution: {integrity: sha512-6vjCHD6vaY8KubeNw2Fg3EK0KLGQYdldG4fYgQmA0xSW0dJ8G2xFhSOdrlUakWVoP5JuWHtFODg3PNd/DN3FDA==} + '@smithy/core@3.23.4': + resolution: {integrity: sha512-IH7G3hWxUhd2Z6HtvjZ1EiyDBCRYRr2sngOB9KUWf96XQ8JP2O5ascUH6TouW5YCIMFaVnKADEscM/vUfI3TvA==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.8': - resolution: {integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==} + '@smithy/credential-provider-imds@4.2.9': + resolution: {integrity: sha512-Jf723a38EGAzWHxJHzb9DtBq7lrvdJlkCAPWQdN/oiznovx5yWXCFCVspzDe8JU6b+k9hJXYB5duFZpb+3mB6Q==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@4.2.8': - resolution: {integrity: sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==} + '@smithy/eventstream-codec@4.2.9': + resolution: {integrity: sha512-8/wOb1wm/joXCj6SNHRFnfcNBR4xmumw869UnM+RrjoWeliNcTnOTw2WZXBWoKfszbL/v/AxdijIilqRMst+vA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@4.2.8': - resolution: {integrity: sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==} + '@smithy/eventstream-serde-browser@4.2.9': + resolution: {integrity: sha512-HbD4ptlSKHVfF84F77oqy2kswQR5H9basFILtCvnhtgzvRntiQtqstT1XFENzI7dQzrGD0HfhMjziSCs6EZEFA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@4.3.8': - resolution: {integrity: sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==} + '@smithy/eventstream-serde-config-resolver@4.3.9': + resolution: {integrity: sha512-W2KlYzjD1V7jCUsTxy/HWrWDa9RdnzqY8Aeskaoakrj+9aiZ53YzEC7lNb3JJ0zKFjWoLbXdaSXmftBBR8Wjsw==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@4.2.8': - resolution: {integrity: sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==} + '@smithy/eventstream-serde-node@4.2.9': + resolution: {integrity: sha512-6nMJG2KJJ5cjmPmySomEdpqhGsfneanKCjb5uBJJIM2D6rZhemEpYBtes6zr910LkxWseWTIbWrif0vaOB9NTA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@4.2.8': - resolution: {integrity: sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==} + '@smithy/eventstream-serde-universal@4.2.9': + resolution: {integrity: sha512-RgkumJugvbFVcifYCFeYaFpMOuLiIAcvzKe21EeaM6/KKU/4XYyf8hs/So9GSN6SDe4bqZbwB4g/rr/pIxUZmA==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.9': - resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} + '@smithy/fetch-http-handler@5.3.10': + resolution: {integrity: sha512-qF4EcrEtEf2P6f2kGGuSVe1lan26cn7PsWJBC3vZJ6D16Fm5FSN06udOMVoW6hjzQM3W7VDFwtyUG2szQY50dA==} engines: {node: '>=18.0.0'} - '@smithy/hash-blob-browser@4.2.9': - resolution: {integrity: sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg==} + '@smithy/hash-blob-browser@4.2.10': + resolution: {integrity: sha512-2lZvvcwTaXq6cGOcX72Ej9WU+z3T/C5NOuqIm+zLD3MlExRp9kW/Qa/p66NbBM74X0BdrdvpsMYwlkhtvHrxaQ==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.8': - resolution: {integrity: sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==} + '@smithy/hash-node@4.2.9': + resolution: {integrity: sha512-/iSYAwSIA/SAeLga2YEpPLLOmw3n86RW4/bkhxtY1DSTR9z5HGjbYTzPaBKv2m8a4nK1rqZWchhl41qTaqMLbg==} engines: {node: '>=18.0.0'} - '@smithy/hash-stream-node@4.2.8': - resolution: {integrity: sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w==} + '@smithy/hash-stream-node@4.2.9': + resolution: {integrity: sha512-WFPbY/TysowQuoWR0xOCPT3RH1KMpThUWjx75RAMLkDlTYTANzyPHZiDRslf2e5bTmCYcqCshN7up70Ic/Zqug==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.2.8': - resolution: {integrity: sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==} + '@smithy/invalid-dependency@4.2.9': + resolution: {integrity: sha512-J+0rlwWZKgOYugVgRE5VlVz/UFV+6cIpZkmfWBq1ld1x3htKDdHOutYhZTURIvSVztWn0T3aghCdEzGdXXsSMw==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@4.2.0': - resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + '@smithy/is-array-buffer@4.2.1': + resolution: {integrity: sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==} engines: {node: '>=18.0.0'} - '@smithy/md5-js@4.2.8': - resolution: {integrity: sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ==} + '@smithy/md5-js@4.2.9': + resolution: {integrity: sha512-ZCCWfGj4wvqV+5OS9e/GvR5jlR7j1mMB1UkGE+V7P1USFMwcL4Z4j5mO9nGvQGkfe20KM87ymbvZIcU9tHNlIg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.2.8': - resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} + '@smithy/middleware-content-length@4.2.9': + resolution: {integrity: sha512-9ViCZhFkmLUDyIPeBAsW7h5/Tcix806gWqd/BBqwW6KB8mhgZTTqjRMsyTTmMo2zpF+KckpYQsSiiFrIGHRaFw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.12': - resolution: {integrity: sha512-9JMKHVJtW9RysTNjcBZQHDwB0p3iTP6B1IfQV4m+uCevkVd/VuLgwfqk5cnI4RHcp4cPwoIvxQqN4B1sxeHo8Q==} + '@smithy/middleware-endpoint@4.4.18': + resolution: {integrity: sha512-4OS3TP3IWZysT8KlSG/UwfKdelJmuQ2CqVNfrkjm2Rsm146/DuSTfXiD1ulgWpp9L6lJmPYfWTp7/m4b4dQSdQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.29': - resolution: {integrity: sha512-bmTn75a4tmKRkC5w61yYQLb3DmxNzB8qSVu9SbTYqW6GAL0WXO2bDZuMAn/GJSbOdHEdjZvWxe+9Kk015bw6Cg==} + '@smithy/middleware-retry@4.4.35': + resolution: {integrity: sha512-sz+Th9ofKypOtaboPTcyZtIfCs2LNb84bzxEhPffCElyMorVYDBdeGzxYqSLC6gWaZUqpPSbj5F6TIxYUlSCfQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.9': - resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} + '@smithy/middleware-serde@4.2.10': + resolution: {integrity: sha512-BQsdoi7ma4siJAzD0S6MedNPhiMcTdTLUqEUjrHeT1TJppBKWnwqySg34Oh/uGRhJeBd1sAH2t5tghBvcyD6tw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.8': - resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==} + '@smithy/middleware-stack@4.2.9': + resolution: {integrity: sha512-pid7ksBr7nm0X/3paIlGo9Fh3UK1pQ5yH0007tBmdkVvv+AsBZAOzC2dmLhlzDWKkSB+ZCiiyDArjAW3klkbMg==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.8': - resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} + '@smithy/node-config-provider@4.3.9': + resolution: {integrity: sha512-EjdDTVGnnyJ9y8jXIfkF45UUZs21/Pp8xaMTZySLoC0xI3EhY7jq4co3LQnhh/bB6VVamd9ELpYJWLDw2ANhZA==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.8': - resolution: {integrity: sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==} + '@smithy/node-http-handler@4.4.11': + resolution: {integrity: sha512-kQNJFwzYA9y+Fj3h9t1ToXYOJBobwUVEc6/WX45urJXyErgG0WOsres8Se8BAiFCMe8P06OkzRgakv7bQ5S+6Q==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.8': - resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} + '@smithy/property-provider@4.2.9': + resolution: {integrity: sha512-ibHwLxq4KlbfueoNxMNrZkG+O7V/5XKrewhDGYn0p9DYKCsdsofuWHKdX3QW4zHlAUfLStqdCUSDi/q/9WSjwA==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.8': - resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} + '@smithy/protocol-http@5.3.9': + resolution: {integrity: sha512-PRy4yZqsKI3Eab8TLc16Dj2NzC4dnw/8E95+++Jc+wwlkjBpAq3tNLqkLHMmSvDfxKQ+X5PmmCYt+rM/GcMKPA==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.8': - resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} + '@smithy/querystring-builder@4.2.9': + resolution: {integrity: sha512-/AIDaq0+ehv+QfeyAjCUFShwHIt+FA1IodsV/2AZE5h4PUZcQYv5sjmy9V67UWfsBoTjOPKUFYSRfGoNW9T2UQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.8': - resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} + '@smithy/querystring-parser@4.2.9': + resolution: {integrity: sha512-kZ9AHhrYTea3UoklXudEnyA4duy9KAWERC28+ft8y8HIhR3yGsjv1PFTgzMpB+5L4tQKXNTwFbVJMeRK20vpHQ==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.8': - resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==} + '@smithy/service-error-classification@4.2.9': + resolution: {integrity: sha512-DYYd4xrm9Ozik+ZT4f5ZqSXdzscVHF/tFCzqieIFcLrjRDxWSgRtvtXOohJGoniLfPcBcy5ltR3tp2Lw4/d9ag==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.4.3': - resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==} + '@smithy/shared-ini-file-loader@4.4.4': + resolution: {integrity: sha512-tA5Cm11BHQCk/67y6VPIWydLh/pMY90jqOEWIr/2VAzTOoDwGpwp0C/AuHBc3/xWSOA5m5PXLN+lIOrsnTm/PQ==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.8': - resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} + '@smithy/signature-v4@5.3.9': + resolution: {integrity: sha512-QZKreDINuWf6KIcUUuurjBJiPPSRpMyU3sFPKk6urNAYcKkXhe6Ma+9MBX9e87yDnZfa/cqNMxobkdi9bpJt1A==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.11.1': - resolution: {integrity: sha512-SERgNg5Z1U+jfR6/2xPYjSEHY1t3pyTHC/Ma3YQl6qWtmiL42bvNId3W/oMUWIwu7ekL2FMPdqAmwbQegM7HeQ==} + '@smithy/smithy-client@4.11.7': + resolution: {integrity: sha512-gQP2J3qB/Wmc26gdmB8gA6zq2o2spG5sEU3o7TaTATBJEk29sYGWdEFoGEy91BczSpifTo0DQhVYjZXBEVcrpA==} engines: {node: '>=18.0.0'} - '@smithy/types@4.12.0': - resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} + '@smithy/types@4.12.1': + resolution: {integrity: sha512-ow30Ze/DD02KH2p0eMyIF2+qJzGyNb0kFrnTRtPpuOkQ4hrgvLdaU4YC6r/K8aOrCML4FH0Cmm0aI4503L1Hwg==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.8': - resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} + '@smithy/url-parser@4.2.9': + resolution: {integrity: sha512-gYs8FrnwKoIvL+GyPz6VvweCkrXqHeD+KnOAxB+NFy6mLr4l75lFrn3dZ413DG0K2TvFtN7L43x7r8hyyohYdg==} engines: {node: '>=18.0.0'} - '@smithy/util-base64@4.3.0': - resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + '@smithy/util-base64@4.3.1': + resolution: {integrity: sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-browser@4.2.0': - resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + '@smithy/util-body-length-browser@4.2.1': + resolution: {integrity: sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-node@4.2.1': - resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + '@smithy/util-body-length-node@4.2.2': + resolution: {integrity: sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@4.2.0': - resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + '@smithy/util-buffer-from@4.2.1': + resolution: {integrity: sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==} engines: {node: '>=18.0.0'} - '@smithy/util-config-provider@4.2.0': - resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + '@smithy/util-config-provider@4.2.1': + resolution: {integrity: sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.28': - resolution: {integrity: sha512-/9zcatsCao9h6g18p/9vH9NIi5PSqhCkxQ/tb7pMgRFnqYp9XUOyOlGPDMHzr8n5ih6yYgwJEY2MLEobUgi47w==} + '@smithy/util-defaults-mode-browser@4.3.34': + resolution: {integrity: sha512-m75CH7xaVG8ErlnfXsIBLrgVrApejrvUpohr41CMdeWNcEu/Ouvj9fbNA7oW9Qpr0Awf+BmDRrYx72hEKgY+FQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.31': - resolution: {integrity: sha512-JTvoApUXA5kbpceI2vuqQzRjeTbLpx1eoa5R/YEZbTgtxvIB7AQZxFJ0SEyfCpgPCyVV9IT7we+ytSeIB3CyWA==} + '@smithy/util-defaults-mode-node@4.2.37': + resolution: {integrity: sha512-1LcAt0PV1dletxiGwcw2IJ8vLNhfkir02NTi1i/CFCY2ObtM5wDDjn/8V2dbPrbyoh6OTFH+uayI1rSVRBMT3A==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.2.8': - resolution: {integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==} + '@smithy/util-endpoints@3.2.9': + resolution: {integrity: sha512-9FTqTzKxCFelCKdtHb22BTbrLgw7tTI+D6r/Ci/njI0tzqWLQctS0uEDTzraCR5K6IJItfFp1QmESlBytSpRhQ==} engines: {node: '>=18.0.0'} - '@smithy/util-hex-encoding@4.2.0': - resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + '@smithy/util-hex-encoding@4.2.1': + resolution: {integrity: sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.8': - resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==} + '@smithy/util-middleware@4.2.9': + resolution: {integrity: sha512-pfnZneJ1S9X3TRmg2l3pG11Pvx2BW9O3NFhUN30llrK/yUKu8WbqMTx4/CzED+qKBYw0//ntUT00hvmaG+nLgA==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.8': - resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==} + '@smithy/util-retry@4.2.9': + resolution: {integrity: sha512-79hfhL/oxP40SCXJGfjfE9pjbUVfHhXZFpCWXTHqXSluzaVy7jwWs9Ui7lLbfDBSp+7i+BIwgeVIRerbIRWN6g==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.10': - resolution: {integrity: sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==} + '@smithy/util-stream@4.5.14': + resolution: {integrity: sha512-IOBEiJTOltSx6MAfwkx/GSVM8/UCJxdtw13haP5OEL543lb1DN6TAypsxv+qcj4l/rKcpapbS6zK9MQGBOhoaA==} engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@4.2.0': - resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + '@smithy/util-uri-escape@4.2.1': + resolution: {integrity: sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.2.0': - resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + '@smithy/util-utf8@4.2.1': + resolution: {integrity: sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==} engines: {node: '>=18.0.0'} - '@smithy/util-waiter@4.2.8': - resolution: {integrity: sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==} + '@smithy/util-waiter@4.2.9': + resolution: {integrity: sha512-/PYREwfBaj3fV5V4PfMksYj/WKwrjQ4gW/yo8KLpZSkAdBEkvXd68hovAubrw+n+Q8Rcr9XRn6uzcoQCEhrNFQ==} engines: {node: '>=18.0.0'} - '@smithy/uuid@1.1.0': - resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + '@smithy/uuid@1.1.1': + resolution: {integrity: sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==} engines: {node: '>=18.0.0'} '@socket.io/component-emitter@3.1.2': @@ -4192,8 +4203,8 @@ packages: resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} engines: {node: '>=10.8'} - '@stripe/stripe-js@8.7.0': - resolution: {integrity: sha512-tNUerSstwNC1KuHgX4CASGO0Md3CB26IJzSXmVlSuFvhsBP4ZaEPpY4jxWOn9tfdDscuVT4Kqb8cZ2o9nLCgRQ==} + '@stripe/stripe-js@8.8.0': + resolution: {integrity: sha512-NNYuyW8qmLjyHnpyFgs/23wUrjB8k0xN9YIZFOMLewCa/pIkIji9e9aY/EgdNryEDDRptc6TcPIHRvG1R0ClFw==} engines: {node: '>=12.16'} '@svgr/babel-plugin-add-jsx-attribute@8.0.0': @@ -4274,68 +4285,68 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} - '@swc/core-darwin-arm64@1.15.11': - resolution: {integrity: sha512-QoIupRWVH8AF1TgxYyeA5nS18dtqMuxNwchjBIwJo3RdwLEFiJq6onOx9JAxHtuPwUkIVuU2Xbp+jCJ7Vzmgtg==} + '@swc/core-darwin-arm64@1.15.13': + resolution: {integrity: sha512-ztXusRuC5NV2w+a6pDhX13CGioMLq8CjX5P4XgVJ21ocqz9t19288Do0y8LklplDtwcEhYGTNdMbkmUT7+lDTg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.11': - resolution: {integrity: sha512-S52Gu1QtPSfBYDiejlcfp9GlN+NjTZBRRNsz8PNwBgSE626/FUf2PcllVUix7jqkoMC+t0rS8t+2/aSWlMuQtA==} + '@swc/core-darwin-x64@1.15.13': + resolution: {integrity: sha512-cVifxQUKhaE7qcO/y9Mq6PEhoyvN9tSLzCnnFZ4EIabFHBuLtDDO6a+vLveOy98hAs5Qu1+bb5Nv0oa1Pihe3Q==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.11': - resolution: {integrity: sha512-lXJs8oXo6Z4yCpimpQ8vPeCjkgoHu5NoMvmJZ8qxDyU99KVdg6KwU9H79vzrmB+HfH+dCZ7JGMqMF//f8Cfvdg==} + '@swc/core-linux-arm-gnueabihf@1.15.13': + resolution: {integrity: sha512-t+xxEzZ48enl/wGGy7SRYd7kImWQ/+wvVFD7g5JZo234g6/QnIgZ+YdfIyjHB+ZJI3F7a2IQHS7RNjxF29UkWw==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.11': - resolution: {integrity: sha512-chRsz1K52/vj8Mfq/QOugVphlKPWlMh10V99qfH41hbGvwAU6xSPd681upO4bKiOr9+mRIZZW+EfJqY42ZzRyA==} + '@swc/core-linux-arm64-gnu@1.15.13': + resolution: {integrity: sha512-VndeGvKmTXFn6AGwjy0Kg8i7HccOCE7Jt/vmZwRxGtOfNZM1RLYRQ7MfDLo6T0h1Bq6eYzps3L5Ma4zBmjOnOg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.15.11': - resolution: {integrity: sha512-PYftgsTaGnfDK4m6/dty9ryK1FbLk+LosDJ/RJR2nkXGc8rd+WenXIlvHjWULiBVnS1RsjHHOXmTS4nDhe0v0w==} + '@swc/core-linux-arm64-musl@1.15.13': + resolution: {integrity: sha512-SmZ9m+XqCB35NddHCctvHFLqPZDAs5j8IgD36GoutufDJmeq2VNfgk5rQoqNqKmAK3Y7iFdEmI76QoHIWiCLyw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.15.11': - resolution: {integrity: sha512-DKtnJKIHiZdARyTKiX7zdRjiDS1KihkQWatQiCHMv+zc2sfwb4Glrodx2VLOX4rsa92NLR0Sw8WLcPEMFY1szQ==} + '@swc/core-linux-x64-gnu@1.15.13': + resolution: {integrity: sha512-5rij+vB9a29aNkHq72EXI2ihDZPszJb4zlApJY4aCC/q6utgqFA6CkrfTfIb+O8hxtG3zP5KERETz8mfFK6A0A==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.15.11': - resolution: {integrity: sha512-mUjjntHj4+8WBaiDe5UwRNHuEzLjIWBTSGTw0JT9+C9/Yyuh4KQqlcEQ3ro6GkHmBGXBFpGIj/o5VMyRWfVfWw==} + '@swc/core-linux-x64-musl@1.15.13': + resolution: {integrity: sha512-OlSlaOK9JplQ5qn07WiBLibkOw7iml2++ojEXhhR3rbWrNEKCD7sd8+6wSavsInyFdw4PhLA+Hy6YyDBIE23Yw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.15.11': - resolution: {integrity: sha512-ZkNNG5zL49YpaFzfl6fskNOSxtcZ5uOYmWBkY4wVAvgbSAQzLRVBp+xArGWh2oXlY/WgL99zQSGTv7RI5E6nzA==} + '@swc/core-win32-arm64-msvc@1.15.13': + resolution: {integrity: sha512-zwQii5YVdsfG8Ti9gIKgBKZg8qMkRZxl+OlYWUT5D93Jl4NuNBRausP20tfEkQdAPSRrMCSUZBM6FhW7izAZRg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.11': - resolution: {integrity: sha512-6XnzORkZCQzvTQ6cPrU7iaT9+i145oLwnin8JrfsLG41wl26+5cNQ2XV3zcbrnFEV6esjOceom9YO1w9mGJByw==} + '@swc/core-win32-ia32-msvc@1.15.13': + resolution: {integrity: sha512-hYXvyVVntqRlYoAIDwNzkS3tL2ijP3rxyWQMNKaxcCxxkCDto/w3meOK/OB6rbQSkNw0qTUcBfU9k+T0ptYdfQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.11': - resolution: {integrity: sha512-IQ2n6af7XKLL6P1gIeZACskSxK8jWtoKpJWLZmdXTDj1MGzktUy4i+FvpdtxFmJWNavRWH1VmTr6kAubRDHeKw==} + '@swc/core-win32-x64-msvc@1.15.13': + resolution: {integrity: sha512-XTzKs7c/vYCcjmcwawnQvlHHNS1naJEAzcBckMI5OJlnrcgW8UtcX9NHFYvNjGtXuKv0/9KvqL4fuahdvlNGKw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.15.11': - resolution: {integrity: sha512-iLmLTodbYxU39HhMPaMUooPwO/zqJWvsqkrXv1ZI38rMb048p6N7qtAtTp37sw9NzSrvH6oli8EdDygo09IZ/w==} + '@swc/core@1.15.13': + resolution: {integrity: sha512-0l1gl/72PErwUZuavcRpRAQN9uSst+Nk++niC5IX6lmMWpXoScYx3oq/narT64/sKv/eRiPTaAjBFGDEQiWJIw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -4394,8 +4405,8 @@ packages: '@tanstack/query-core@5.90.20': resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} - '@tanstack/react-query@5.90.20': - resolution: {integrity: sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==} + '@tanstack/react-query@5.90.21': + resolution: {integrity: sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==} peerDependencies: react: ^18 || ^19 @@ -4406,8 +4417,8 @@ packages: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/react-virtual@3.13.18': - resolution: {integrity: sha512-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A==} + '@tanstack/react-virtual@3.13.19': + resolution: {integrity: sha512-KzwmU1IbE0IvCZSm6OXkS+kRdrgW2c2P3Ho3NC+zZXWK6oObv/L+lcV/2VuJ+snVESRlMJ+w/fg4WXI/JzoNGQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -4416,8 +4427,8 @@ packages: resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} - '@tanstack/virtual-core@3.13.18': - resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==} + '@tanstack/virtual-core@3.13.19': + resolution: {integrity: sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==} '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} @@ -4526,8 +4537,8 @@ packages: '@types/docker-modem@3.0.6': resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} - '@types/dockerode@3.3.47': - resolution: {integrity: sha512-ShM1mz7rCjdssXt7Xz0u1/R2BJC7piWa3SJpUBiVjCf2A3XNn4cP6pUVaD8bLanpPVVn4IKzJuw3dOvkJ8IbYw==} + '@types/dockerode@4.0.1': + resolution: {integrity: sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==} '@types/es-aggregate-error@1.0.6': resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} @@ -4579,11 +4590,11 @@ packages: '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - '@types/node@24.10.9': - resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} + '@types/node@24.10.13': + resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} - '@types/node@25.1.0': - resolution: {integrity: sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==} + '@types/node@25.3.0': + resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -4596,8 +4607,8 @@ packages: '@types/react-simple-maps@3.0.6': resolution: {integrity: sha512-hR01RXt6VvsE41FxDd+Bqm1PPGdKbYjCYVtCgh38YeBPt46z3SwmWPWu2L3EdCAP6bd6VYEgztucihRw1C0Klg==} - '@types/react@19.2.10': - resolution: {integrity: sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==} + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -4639,8 +4650,8 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitejs/plugin-react@5.1.2': - resolution: {integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==} + '@vitejs/plugin-react@5.1.4': + resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4693,9 +4704,6 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} - '@zone-eu/mailsplit@5.4.8': - resolution: {integrity: sha512-eEyACj4JZ7sjzRvy26QhLgKEMWwQbsw1+QZnlLX+/gihcNH07lVPOcnwf5U6UAL7gkc//J3jVd76o/WS+taUiA==} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -4717,12 +4725,12 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -4763,8 +4771,8 @@ packages: ajv: optional: true - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -4868,8 +4876,8 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - atomically@2.1.0: - resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} + atomically@2.1.1: + resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} autoprefixer@10.4.24: resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} @@ -4882,14 +4890,14 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - avvio@9.1.0: - resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} + avvio@9.2.0: + resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==} - axios@1.13.4: - resolution: {integrity: sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==} + axios@1.13.5: + resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==} - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -4901,8 +4909,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + babel-plugin-polyfill-corejs3@0.14.0: + resolution: {integrity: sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4917,6 +4925,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} peerDependencies: @@ -4925,8 +4937,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.3: - resolution: {integrity: sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==} + bare-fs@4.5.4: + resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -4941,8 +4953,8 @@ packages: bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + bare-stream@2.8.0: + resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -4962,12 +4974,13 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} hasBin: true - basic-ftp@5.1.0: - resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==} + basic-ftp@5.2.0: + resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} engines: {node: '>=10.0.0'} bcrypt-pbkdf@1.0.2: @@ -4990,14 +5003,14 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bn.js@4.12.2: - resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bowser@2.13.1: - resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -5005,6 +5018,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.3: + resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -5081,8 +5098,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001766: - resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + caniuse-lite@1.0.30001774: + resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==} canvas-confetti@1.9.4: resolution: {integrity: sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==} @@ -5135,8 +5152,8 @@ packages: chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chromium-bidi@13.0.1: - resolution: {integrity: sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==} + chromium-bidi@14.0.0: + resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} peerDependencies: devtools-protocol: '*' @@ -5237,15 +5254,15 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - conf@15.0.2: - resolution: {integrity: sha512-JBSrutapCafTrddF9dH3lc7+T2tBycGF4uPkI4Js+g4vLLEhG6RZcFi3aJd5zntdf5tQxAejJt8dihkoQ/eSJw==} + conf@15.1.0: + resolution: {integrity: sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==} engines: {node: '>=20'} confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} @@ -5532,8 +5549,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - devtools-protocol@0.0.1551306: - resolution: {integrity: sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==} + devtools-protocol@0.0.1566079: + resolution: {integrity: sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -5592,12 +5609,12 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} - drizzle-kit@0.31.8: - resolution: {integrity: sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==} + drizzle-kit@0.31.9: + resolution: {integrity: sha512-GViD3IgsXn7trFyBUUHyTFBpH/FsHTxYJ66qdbVggxef4UBPHRYxQaRzYLTuekYnk9i5FIEL9pbBIwMqX/Uwrg==} hasBin: true drizzle-orm@0.45.1: @@ -5711,8 +5728,8 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - electron-to-chromium@1.5.283: - resolution: {integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==} + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} @@ -5736,10 +5753,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encoding-japanese@2.2.0: - resolution: {integrity: sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==} - engines: {node: '>=8.10.0'} - encoding-sniffer@0.2.1: resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} @@ -5839,8 +5852,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} hasBin: true @@ -5949,8 +5962,8 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-json-stringify@6.2.0: - resolution: {integrity: sha512-Eaf/KNIDwHkzfyeQFNfLXJnQ7cl1XQI3+zRqmPlvtkMigbXnAcasTrvJQmquBSxKfFGeRA6PFog8t+hFmpDoWw==} + fast-json-stringify@6.3.0: + resolution: {integrity: sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==} fast-jwt@6.1.0: resolution: {integrity: sha512-cGK/TXlud8INL49Iv7yRtZy0PHzNJId1shfqNCqdF0gOlWiy+1FPgjxX+ZHp/CYxFYDaoNnxeYEGzcXSkahUEQ==} @@ -5971,12 +5984,12 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.2.5: - resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + fast-xml-parser@5.3.6: + resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} hasBin: true - fast-xml-parser@5.3.4: - resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} + fast-xml-parser@5.3.7: + resolution: {integrity: sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==} hasBin: true fastfall@1.5.1: @@ -5994,8 +6007,8 @@ packages: openapi-types: ^12.1.3 zod: '>=4.1.5' - fastify@5.7.2: - resolution: {integrity: sha512-dBJolW+hm6N/yJVf6J5E1BxOBNkuXNl405nrfeR8SpvGWG3aCC2XDHyiFBdow8Win1kj7sjawQc257JlYY6M/A==} + fastify@5.7.4: + resolution: {integrity: sha512-e6l5NsRdaEP8rdD8VR0ErJASeyaRbzXYpmkrpr2SuvuMq6Si3lvsaVy5C+7gLanEkvjpMDzBXWE5HPeb/hgTxA==} fastparallel@2.4.1: resolution: {integrity: sha512-qUmhxPgNHmvRjZKBFUNI0oZuuH9OlSIOXmJ98lhKPxMZZ7zS/Fi0wRHOihDSz0R1YiIOjxzOY4bq65YTcdBi2Q==} @@ -6033,8 +6046,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-my-way@9.4.0: - resolution: {integrity: sha512-5Ye4vHsypZRYtS01ob/iwHzGRUDELlsoCftI/OZFhcLs1M0tkGPcXldE80TAZC5yYuJMBPJQQ43UHlqbJWiX2w==} + find-my-way@9.5.0: + resolution: {integrity: sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==} engines: {node: '>=20'} find-up@5.0.0: @@ -6074,8 +6087,8 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - framer-motion@12.29.2: - resolution: {integrity: sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==} + framer-motion@12.34.3: + resolution: {integrity: sha512-v81ecyZKYO/DfpTwHivqkxSUBzvceOpoI+wLfgCgoUIKxlFKEXdg0oR9imxwXumT4SFy8vRk9xzJ5l3/Du/55Q==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -6130,8 +6143,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -6162,8 +6175,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.1: - resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -6179,16 +6192,18 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.0: - resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -6264,10 +6279,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} @@ -6316,8 +6327,8 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - i18next@25.8.0: - resolution: {integrity: sha512-urrg4HMFFMQZ2bbKRK7IZ8/CTE7D8H4JRlAwqA2ZwDRFfdd0K/4cdbNNLgfn9mo+I/h9wJu61qJzH7jCFAhUZQ==} + i18next@25.8.13: + resolution: {integrity: sha512-E0vzjBY1yM+nsFrtgkjLhST2NBkirkvOVoQa0MSldhsuZ3jUge7ZNpuwG0Cfc74zwo5ZwRzg3uOgT+McBn32iA==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -6328,10 +6339,6 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -6342,8 +6349,8 @@ packages: immer@10.2.0: resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} - immer@11.1.3: - resolution: {integrity: sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==} + immer@11.1.4: + resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==} immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} @@ -6388,8 +6395,8 @@ packages: '@types/ioredis-mock': ^8 ioredis: ^5 - ioredis@5.9.2: - resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==} + ioredis@5.9.3: + resolution: {integrity: sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==} engines: {node: '>=12.22.0'} ip-address@10.1.0: @@ -6581,8 +6588,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} engines: {node: 20 || >=22} jiti@1.21.7: @@ -6665,8 +6672,8 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsonpath-plus@10.3.0: - resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} + jsonpath-plus@10.4.0: + resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} engines: {node: '>=18.0.0'} hasBin: true @@ -6706,15 +6713,6 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - libbase64@1.3.0: - resolution: {integrity: sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==} - - libmime@5.3.7: - resolution: {integrity: sha512-FlDb3Wtha8P01kTL3P9M+ZDNDWPKPmKHWaU/cG/lg5pfuAwdflVpZE+wm9m7pKmC5ww6s+zTxBKS1p6yl3KpSw==} - - libqp@2.1.1: - resolution: {integrity: sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow==} - light-my-request@6.6.0: resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} @@ -6830,8 +6828,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.5: - resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6863,11 +6861,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} - - mailparser@3.9.1: - resolution: {integrity: sha512-6vHZcco3fWsDMkf4Vz9iAfxvwrKNGbHx0dV1RKVphQ/zaNY34Buc7D37LSa09jeSeybWzYcTPjhiZFxzVRJedA==} + magicast@0.5.2: + resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -6877,8 +6872,8 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} hasBin: true marked@15.0.12: @@ -6890,8 +6885,8 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} @@ -7060,30 +7055,30 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} + minimatch@10.2.2: + resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + minimatch@5.1.7: + resolution: {integrity: sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==} engines: {node: '>=10'} - minimatch@6.2.0: - resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==} + minimatch@6.2.1: + resolution: {integrity: sha512-C5ir1Ql7cVnkJLOtpgK9vf2P4ufJu9Hm9fwTznllGARCWOqBf+UB48yZwQyban6r7Lesm05ZOzO6JyVOzItjZQ==} engines: {node: '>=10'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.6: + resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} mitt@3.0.1: @@ -7092,8 +7087,8 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true @@ -7106,8 +7101,8 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - motion-dom@12.29.2: - resolution: {integrity: sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==} + motion-dom@12.34.3: + resolution: {integrity: sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==} motion-utils@12.29.2: resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==} @@ -7119,8 +7114,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.12.7: - resolution: {integrity: sha512-retd5i3xCZDVWMYjHEVuKTmhqY8lSsxujjVrZiGbbdoxxIBg5S7rCuYy/YQpfrTYIxpd/o0Kyb/3H+1udBMoYg==} + msw@2.12.10: + resolution: {integrity: sha512-G3VUymSE0/iegFnuipujpwyTM2GuZAKXNeerUSrG2+Eg391wW63xFs5ixWsK9MWzr1AGoSkYGmyAzNgbR3+urw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -7241,10 +7236,6 @@ packages: node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - nodemailer@7.0.11: - resolution: {integrity: sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==} - engines: {node: '>=6.0.0'} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -7262,11 +7253,11 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - number-flow@0.5.9: - resolution: {integrity: sha512-o3102c/4qRd6eV4n+rw6B/UP8+FosbhIxj4uA6GsjhryrGZRVtCtKIKEeBiOwUV52cUGJneeu0treELcV7U/lw==} + number-flow@0.5.12: + resolution: {integrity: sha512-CIs21h2JkfYG4rfgERaUNAk0Cz+Ef14fNJfSCbGGhgRgconQc9b7rcCQfi9SZ36kNjVXmsl2BrzDbjGtEgumAA==} - nuqs@2.8.7: - resolution: {integrity: sha512-wxzRUKn9ENnhX2jU5fBjpekaZZOSxmTzUqS4U2yMrpOaPU6ee7VUqSyHx81c/3FRyDFnFETTLjdsA+ZNKq2jhg==} + nuqs@2.8.8: + resolution: {integrity: sha512-LF5sw9nWpHyPWzMMu9oho3r9C5DvkpmBIg4LQN78sexIzGaeRx8DWr0uy3YiFx5i2QGZN1Qqcb+OAtEVRa2bnA==} peerDependencies: '@remix-run/react': '>=2' '@tanstack/react-router': ^1 @@ -7359,8 +7350,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - openai@6.17.0: - resolution: {integrity: sha512-NHRpPEUPzAvFOAFs9+9pC6+HCw/iWsYsKCMPXH5Kw7BpMxqd8g/A07/1o7Gx2TWtCnzevVRyKMRFqyiHyAlqcA==} + openai@6.23.0: + resolution: {integrity: sha512-w6NJofZ12lUQLm5W8RJcqq0HhGE4gZuqVFrBA1q40qx0Uyn/kcrSbOY542C2WHtyTZLz9ucNr4WUO46m8r43YQ==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -7460,9 +7451,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -7508,8 +7499,8 @@ packages: pino-std-serializers@7.1.0: resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} - pino@10.3.0: - resolution: {integrity: sha512-0GNPNzHXBKw6U/InGe79A3Crzyk9bcSyObF9/Gfo9DLEf5qj5RF50RSjsu0W1rZ6ZqRGdzDFCRBQvi9/rSGPtA==} + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} hasBin: true pirates@4.0.7: @@ -7530,6 +7521,9 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postal-mime@2.7.3: + resolution: {integrity: sha512-MjhXadAJaWgYzevi46+3kLak8y6gbg0ku14O1gO/LNOuay8dO+1PtcSGvAdgDR0DoIsSaiIA8y/Ddw6MnrO0Tw==} + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -7594,8 +7588,8 @@ packages: peerDependencies: preact: '>=10' - preact@10.28.3: - resolution: {integrity: sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==} + preact@10.28.4: + resolution: {integrity: sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==} prettier@3.8.1: resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} @@ -7640,9 +7634,9 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - properties-reader@2.3.0: - resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==} - engines: {node: '>=14'} + properties-reader@3.0.1: + resolution: {integrity: sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g==} + engines: {node: '>=18'} property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -7673,12 +7667,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.36.1: - resolution: {integrity: sha512-L7ykMWc3lQf3HS7ME3PSjp7wMIjJeW6+bKfH/RSTz5l6VUDGubnrC2BKj3UvM28Y5PMDFW0xniJOZHBZPpW1dQ==} + puppeteer-core@24.37.5: + resolution: {integrity: sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==} engines: {node: '>=18'} - puppeteer@24.36.1: - resolution: {integrity: sha512-uPiDUyf7gd7Il1KnqfNUtHqntL0w1LapEw5Zsuh8oCK8GsqdxySX1PzdIHKB2Dw273gWY4MW0zC5gy3Re9XlqQ==} + puppeteer@24.37.5: + resolution: {integrity: sha512-3PAOIQLceyEmn1Fi76GkGO2EVxztv5OtdlB1m8hMUZL3f8KDHnlvXbvCXv+Ls7KzF1R0KdKBqLuT/Hhrok12hQ==} engines: {node: '>=18'} hasBin: true @@ -7705,8 +7699,8 @@ packages: peerDependencies: react: '>= 16.3.0' - react-day-picker@9.13.0: - resolution: {integrity: sha512-euzj5Hlq+lOHqI53NiuNhCP8HWgsPf/bBAVijR50hNaY1XwjKjShAnIe8jm8RD2W9IJUvihDIZ+KrmqfFzNhFQ==} + react-day-picker@9.13.2: + resolution: {integrity: sha512-IMPiXfXVIAuR5Yk58DDPBC8QKClrhdXV+Tr/alBrwrHUw0qDDYB1m5zPNuTnnPIr/gmJ4ChMxmtqPdxm8+R4Eg==} engines: {node: '>=18'} peerDependencies: react: '>=16.8.0' @@ -7722,13 +7716,13 @@ packages: react: '>=16.4.0' react-dom: '>=16.4.0' - react-email@5.2.5: - resolution: {integrity: sha512-YaCp5n/0czviN4lFndsYongiI0IJOMFtFoRVIPJc9+WPJejJEvzJO94r31p3Cz9swDuV0RhEhH1W0lJFAXntHA==} + react-email@5.2.8: + resolution: {integrity: sha512-noPcnpl78vsyBnhiKCzxK9Mdsv7ncAYI80osS5kbMgaKH2IgPtPab5BzLJX6INXuiNk5ju+9YRnCjPoPTOHZjA==} engines: {node: '>=20.0.0'} hasBin: true - react-hook-form@7.71.1: - resolution: {integrity: sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==} + react-hook-form@7.71.2: + resolution: {integrity: sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -7749,8 +7743,8 @@ packages: typescript: optional: true - react-intersection-observer@10.0.2: - resolution: {integrity: sha512-lAMzxVWrBko6SLd1jx6l84fVrzJu91hpxHlvD2as2Wec9mDCjdYXwc5xNOFBchpeBir0Y7AGBW+C/AYMa7CSFg==} + react-intersection-observer@10.0.3: + resolution: {integrity: sha512-luICLMbs0zxTO/70Zy7K5jOXkABPEVSAF8T3FdZUlctsrIaPLmx8TZe2SSA+CY2HGWfz2INyNTnp82pxNNsShA==} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -7802,8 +7796,8 @@ packages: '@types/react': optional: true - react-resizable-panels@4.5.6: - resolution: {integrity: sha512-mgjS8lGvNXQWsTahZHyi4x/U/IUWihzxSykUomur7FSbAvPVhHoOgT3uiBfn+hfdYUgOHgxqbKaJQLWqmvh76w==} + react-resizable-panels@4.6.5: + resolution: {integrity: sha512-pmQP6qv9KmsesNMvWVNvVfVJAwYSOWWbAOAtrPR8Cre20+j1NWIlyft0btjtDQE+OepXmI6g3VPrCXQY0oD7+Q==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -7962,8 +7956,8 @@ packages: reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} - resend@6.9.1: - resolution: {integrity: sha512-jFY3qPP2cith1npRXvS7PVdnhbR1CcuzHg65ty5Elv55GKiXhe+nItXuzzoOlKeYJez1iJAo2+8f6ae8sCj0iA==} + resend@6.9.2: + resolution: {integrity: sha512-uIM6CQ08tS+hTCRuKBFbOBvHIGaEhqZe8s4FOgqsVXSbQLAhmNWpmUhG3UAtRnmcwTWFUqnHa/+Vux8YGPyDBA==} engines: {node: '>=20'} peerDependencies: '@react-email/render': '*' @@ -7999,8 +7993,8 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - rettime@0.7.0: - resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} + rettime@0.10.1: + resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} @@ -8009,8 +8003,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8069,8 +8063,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -8198,8 +8192,8 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} @@ -8335,8 +8329,8 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - stripe@20.3.0: - resolution: {integrity: sha512-DYzcmV1MfYhycr1GwjCjeQVYk9Gu8dpxyTlu7qeDCsuguug7oUTxPsUQuZeSf/OPzK7pofqobvOKVqAwlpgf/Q==} + stripe@20.3.1: + resolution: {integrity: sha512-k990yOT5G5rhX3XluRPw5Y8RLdJDW4dzQ29wWT66piHrbnM2KyamJ1dKgPsw4HzGHRWjDiSSdcI2WdxQUPV3aQ==} engines: {node: '>=16'} peerDependencies: '@types/node': '>=16' @@ -8413,8 +8407,8 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwind-merge@3.4.0: - resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} tailwind-scrollbar-hide@4.0.0: resolution: {integrity: sha512-gobtvVcThB2Dxhy0EeYSS1RKQJ5baDFkamkhwBvzvevwX6L4XQfpZ3me9s25Ss1ecFVT5jPYJ50n+7xTBJG9WQ==} @@ -8441,8 +8435,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.1.18: - resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tailwindcss@4.2.1: + resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} @@ -8457,11 +8451,14 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - testcontainers@11.11.0: - resolution: {integrity: sha512-nKTJn3n/gkyGg/3SVkOwX+isPOGSHlfI+CWMobSmvQrsj7YW01aWvl2pYIfV4LMd+C8or783yYrzKSK2JlP+Qw==} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + + testcontainers@11.12.0: + resolution: {integrity: sha512-VWtH+UQejVYYvb53ohEZRbx2naxyDvwO9lQ6A0VgmVE2Oh8r9EF09I+BfmrXpd9N9ntpzhao9di2yNwibSz5KA==} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} @@ -8495,15 +8492,11 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} - tlds@1.261.0: - resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} - hasBin: true + tldts-core@7.0.23: + resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} - tldts-core@7.0.19: - resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} - - tldts@7.0.19: - resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} + tldts@7.0.23: + resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} hasBin: true tmp@0.2.5: @@ -8648,8 +8641,8 @@ packages: tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-fest@5.4.3: - resolution: {integrity: sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==} + type-fest@5.4.4: + resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} engines: {node: '>=20'} typed-array-buffer@1.0.3: @@ -8677,14 +8670,14 @@ packages: peerDependencies: typedoc: 0.28.x - typedoc-plugin-markdown@4.9.0: - resolution: {integrity: sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==} + typedoc-plugin-markdown@4.10.0: + resolution: {integrity: sha512-psrg8Rtnv4HPWCsoxId+MzEN8TVK5jeKCnTbnGAbTBqcDapR9hM41bJT/9eAyKn9C2MDG9Qjh3MkltAYuLDoXg==} engines: {node: '>= 18'} peerDependencies: typedoc: 0.28.x - typedoc@0.28.16: - resolution: {integrity: sha512-x4xW77QC3i5DUFMBp0qjukOTnr/sSg+oEs86nB3LjDslvAmwe/PUGDWbe3GrIqt59oTqoXK5GRK9tAa0sYMiog==} + typedoc@0.28.17: + resolution: {integrity: sha512-ZkJ2G7mZrbxrKxinTQMjFqsCoYY6a5Luwv2GKbTnBCEgV2ihYm5CflA9JnJAwH0pZWavqfYxmDkFHPt4yx2oDQ==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: @@ -8718,8 +8711,11 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici@7.19.2: - resolution: {integrity: sha512-4VQSpGEGsWzk0VYxyB/wVX/Q7qf9t5znLRgs0dzszr9w9Fej/8RVNQ+S20vdXSAyra/bJ7ZQfGv6ZMj7UEbzSg==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -8855,8 +8851,8 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - vite-tsconfig-paths@6.0.5: - resolution: {integrity: sha512-f/WvY6ekHykUF1rWJUAbCU7iS/5QYDIugwpqJA+ttwKbxSbzNlqlE8vZSrsnxNQciUW+z6lvhlXMaEyZn9MSig==} + vite-tsconfig-paths@6.1.1: + resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} peerDependencies: vite: '*' @@ -8942,8 +8938,8 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - webdriver-bidi-protocol@0.4.0: - resolution: {integrity: sha512-U9VIlNRrq94d1xxR9JrCEAx5Gv/2W7ERSv8oWRoNe/QYbfccS0V3h/H6qeNeCRJxXGMhhnkqvwNrvPAYeuP9VA==} + webdriver-bidi-protocol@0.4.1: + resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -9146,26 +9142,26 @@ snapshots: '@apidevtools/json-schema-ref-parser': 14.0.1 '@apidevtools/openapi-schemas': 2.1.0 '@apidevtools/swagger-methods': 3.0.2 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) call-me-maybe: 1.0.2 openapi-types: 12.1.3 - '@asamuzakjp/css-color@4.1.1': + '@asamuzakjp/css-color@4.1.2': dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 11.2.5 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 - '@asamuzakjp/dom-selector@6.7.7': + '@asamuzakjp/dom-selector@6.8.1': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.1.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.5 + lru-cache: 11.2.6 '@asamuzakjp/nwsapi@2.3.9': {} @@ -9220,286 +9216,286 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.980.0': + '@aws-sdk/client-s3@3.996.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.973.5 - '@aws-sdk/credential-provider-node': 3.972.4 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/credential-provider-node': 3.972.11 '@aws-sdk/middleware-bucket-endpoint': 3.972.3 '@aws-sdk/middleware-expect-continue': 3.972.3 - '@aws-sdk/middleware-flexible-checksums': 3.972.3 + '@aws-sdk/middleware-flexible-checksums': 3.972.10 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-location-constraint': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-sdk-s3': 3.972.5 + '@aws-sdk/middleware-sdk-s3': 3.972.12 '@aws-sdk/middleware-ssec': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.5 + '@aws-sdk/middleware-user-agent': 3.972.12 '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/signature-v4-multi-region': 3.980.0 + '@aws-sdk/signature-v4-multi-region': 3.996.0 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.980.0 + '@aws-sdk/util-endpoints': 3.996.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.3 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.22.0 - '@smithy/eventstream-serde-browser': 4.2.8 - '@smithy/eventstream-serde-config-resolver': 4.3.8 - '@smithy/eventstream-serde-node': 4.2.8 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-blob-browser': 4.2.9 - '@smithy/hash-node': 4.2.8 - '@smithy/hash-stream-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/md5-js': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.12 - '@smithy/middleware-retry': 4.4.29 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.28 - '@smithy/util-defaults-mode-node': 4.2.31 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-stream': 4.5.10 - '@smithy/util-utf8': 4.2.0 - '@smithy/util-waiter': 4.2.8 + '@aws-sdk/util-user-agent-node': 3.972.11 + '@smithy/config-resolver': 4.4.7 + '@smithy/core': 3.23.4 + '@smithy/eventstream-serde-browser': 4.2.9 + '@smithy/eventstream-serde-config-resolver': 4.3.9 + '@smithy/eventstream-serde-node': 4.2.9 + '@smithy/fetch-http-handler': 5.3.10 + '@smithy/hash-blob-browser': 4.2.10 + '@smithy/hash-node': 4.2.9 + '@smithy/hash-stream-node': 4.2.9 + '@smithy/invalid-dependency': 4.2.9 + '@smithy/md5-js': 4.2.9 + '@smithy/middleware-content-length': 4.2.9 + '@smithy/middleware-endpoint': 4.4.18 + '@smithy/middleware-retry': 4.4.35 + '@smithy/middleware-serde': 4.2.10 + '@smithy/middleware-stack': 4.2.9 + '@smithy/node-config-provider': 4.3.9 + '@smithy/node-http-handler': 4.4.11 + '@smithy/protocol-http': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 + '@smithy/util-base64': 4.3.1 + '@smithy/util-body-length-browser': 4.2.1 + '@smithy/util-body-length-node': 4.2.2 + '@smithy/util-defaults-mode-browser': 4.3.34 + '@smithy/util-defaults-mode-node': 4.2.37 + '@smithy/util-endpoints': 3.2.9 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-retry': 4.2.9 + '@smithy/util-stream': 4.5.14 + '@smithy/util-utf8': 4.2.1 + '@smithy/util-waiter': 4.2.9 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sqs@3.980.0': + '@aws-sdk/client-sqs@3.996.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.5 - '@aws-sdk/credential-provider-node': 3.972.4 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/credential-provider-node': 3.972.11 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-sdk-sqs': 3.972.5 - '@aws-sdk/middleware-user-agent': 3.972.5 + '@aws-sdk/middleware-sdk-sqs': 3.972.8 + '@aws-sdk/middleware-user-agent': 3.972.12 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.980.0 + '@aws-sdk/util-endpoints': 3.996.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.3 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.22.0 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/md5-js': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.12 - '@smithy/middleware-retry': 4.4.29 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.28 - '@smithy/util-defaults-mode-node': 4.2.31 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/util-user-agent-node': 3.972.11 + '@smithy/config-resolver': 4.4.7 + '@smithy/core': 3.23.4 + '@smithy/fetch-http-handler': 5.3.10 + '@smithy/hash-node': 4.2.9 + '@smithy/invalid-dependency': 4.2.9 + '@smithy/md5-js': 4.2.9 + '@smithy/middleware-content-length': 4.2.9 + '@smithy/middleware-endpoint': 4.4.18 + '@smithy/middleware-retry': 4.4.35 + '@smithy/middleware-serde': 4.2.10 + '@smithy/middleware-stack': 4.2.9 + '@smithy/node-config-provider': 4.3.9 + '@smithy/node-http-handler': 4.4.11 + '@smithy/protocol-http': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 + '@smithy/util-base64': 4.3.1 + '@smithy/util-body-length-browser': 4.2.1 + '@smithy/util-body-length-node': 4.2.2 + '@smithy/util-defaults-mode-browser': 4.3.34 + '@smithy/util-defaults-mode-node': 4.2.37 + '@smithy/util-endpoints': 3.2.9 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-retry': 4.2.9 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.980.0': + '@aws-sdk/client-sso@3.996.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.5 + '@aws-sdk/middleware-user-agent': 3.972.12 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.980.0 + '@aws-sdk/util-endpoints': 3.996.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.3 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.22.0 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.12 - '@smithy/middleware-retry': 4.4.29 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.28 - '@smithy/util-defaults-mode-node': 4.2.31 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/util-user-agent-node': 3.972.11 + '@smithy/config-resolver': 4.4.7 + '@smithy/core': 3.23.4 + '@smithy/fetch-http-handler': 5.3.10 + '@smithy/hash-node': 4.2.9 + '@smithy/invalid-dependency': 4.2.9 + '@smithy/middleware-content-length': 4.2.9 + '@smithy/middleware-endpoint': 4.4.18 + '@smithy/middleware-retry': 4.4.35 + '@smithy/middleware-serde': 4.2.10 + '@smithy/middleware-stack': 4.2.9 + '@smithy/node-config-provider': 4.3.9 + '@smithy/node-http-handler': 4.4.11 + '@smithy/protocol-http': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 + '@smithy/util-base64': 4.3.1 + '@smithy/util-body-length-browser': 4.2.1 + '@smithy/util-body-length-node': 4.2.2 + '@smithy/util-defaults-mode-browser': 4.3.34 + '@smithy/util-defaults-mode-node': 4.2.37 + '@smithy/util-endpoints': 3.2.9 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-retry': 4.2.9 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.5': + '@aws-sdk/core@3.973.12': dependencies: '@aws-sdk/types': 3.973.1 - '@aws-sdk/xml-builder': 3.972.2 - '@smithy/core': 3.22.0 - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/xml-builder': 3.972.5 + '@smithy/core': 3.23.4 + '@smithy/node-config-provider': 4.3.9 + '@smithy/property-provider': 4.2.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/signature-v4': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/util-base64': 4.3.1 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 '@aws-sdk/crc64-nvme@3.972.0': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.3': + '@aws-sdk/credential-provider-env@3.972.10': dependencies: - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.5': + '@aws-sdk/credential-provider-http@3.972.12': dependencies: - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/types': 3.973.1 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/node-http-handler': 4.4.8 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/util-stream': 4.5.10 + '@smithy/fetch-http-handler': 5.3.10 + '@smithy/node-http-handler': 4.4.11 + '@smithy/property-provider': 4.2.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/util-stream': 4.5.14 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.3': + '@aws-sdk/credential-provider-ini@3.972.10': dependencies: - '@aws-sdk/core': 3.973.5 - '@aws-sdk/credential-provider-env': 3.972.3 - '@aws-sdk/credential-provider-http': 3.972.5 - '@aws-sdk/credential-provider-login': 3.972.3 - '@aws-sdk/credential-provider-process': 3.972.3 - '@aws-sdk/credential-provider-sso': 3.972.3 - '@aws-sdk/credential-provider-web-identity': 3.972.3 - '@aws-sdk/nested-clients': 3.980.0 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/credential-provider-env': 3.972.10 + '@aws-sdk/credential-provider-http': 3.972.12 + '@aws-sdk/credential-provider-login': 3.972.10 + '@aws-sdk/credential-provider-process': 3.972.10 + '@aws-sdk/credential-provider-sso': 3.972.10 + '@aws-sdk/credential-provider-web-identity': 3.972.10 + '@aws-sdk/nested-clients': 3.996.0 '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/credential-provider-imds': 4.2.9 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.3': + '@aws-sdk/credential-provider-login@3.972.10': dependencies: - '@aws-sdk/core': 3.973.5 - '@aws-sdk/nested-clients': 3.980.0 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/nested-clients': 3.996.0 '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.4': + '@aws-sdk/credential-provider-node@3.972.11': dependencies: - '@aws-sdk/credential-provider-env': 3.972.3 - '@aws-sdk/credential-provider-http': 3.972.5 - '@aws-sdk/credential-provider-ini': 3.972.3 - '@aws-sdk/credential-provider-process': 3.972.3 - '@aws-sdk/credential-provider-sso': 3.972.3 - '@aws-sdk/credential-provider-web-identity': 3.972.3 + '@aws-sdk/credential-provider-env': 3.972.10 + '@aws-sdk/credential-provider-http': 3.972.12 + '@aws-sdk/credential-provider-ini': 3.972.10 + '@aws-sdk/credential-provider-process': 3.972.10 + '@aws-sdk/credential-provider-sso': 3.972.10 + '@aws-sdk/credential-provider-web-identity': 3.972.10 '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/credential-provider-imds': 4.2.9 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.972.3': + '@aws-sdk/credential-provider-process@3.972.10': dependencies: - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.3': + '@aws-sdk/credential-provider-sso@3.972.10': dependencies: - '@aws-sdk/client-sso': 3.980.0 - '@aws-sdk/core': 3.973.5 - '@aws-sdk/token-providers': 3.980.0 + '@aws-sdk/client-sso': 3.996.0 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/token-providers': 3.996.0 '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.3': + '@aws-sdk/credential-provider-web-identity@3.972.10': dependencies: - '@aws-sdk/core': 3.973.5 - '@aws-sdk/nested-clients': 3.980.0 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/nested-clients': 3.996.0 '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/lib-storage@3.980.0(@aws-sdk/client-s3@3.980.0)': + '@aws-sdk/lib-storage@3.996.0(@aws-sdk/client-s3@3.996.0)': dependencies: - '@aws-sdk/client-s3': 3.980.0 - '@smithy/abort-controller': 4.2.8 - '@smithy/middleware-endpoint': 4.4.12 - '@smithy/smithy-client': 4.11.1 + '@aws-sdk/client-s3': 3.996.0 + '@smithy/abort-controller': 4.2.9 + '@smithy/middleware-endpoint': 4.4.18 + '@smithy/smithy-client': 4.11.7 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 @@ -9509,144 +9505,144 @@ snapshots: dependencies: '@aws-sdk/types': 3.973.1 '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-config-provider': 4.2.0 + '@smithy/node-config-provider': 4.3.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 + '@smithy/util-config-provider': 4.2.1 tslib: 2.8.1 '@aws-sdk/middleware-expect-continue@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.972.3': + '@aws-sdk/middleware-flexible-checksums@3.972.10': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/crc64-nvme': 3.972.0 '@aws-sdk/types': 3.973.1 - '@smithy/is-array-buffer': 4.2.0 - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.10 - '@smithy/util-utf8': 4.2.0 + '@smithy/is-array-buffer': 4.2.1 + '@smithy/node-config-provider': 4.3.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-stream': 4.5.14 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 '@aws-sdk/middleware-host-header@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 '@aws-sdk/middleware-location-constraint@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 '@aws-sdk/middleware-logger@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 '@aws/lambda-invoke-store': 0.2.3 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.5': + '@aws-sdk/middleware-sdk-s3@3.972.12': dependencies: - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/types': 3.973.1 '@aws-sdk/util-arn-parser': 3.972.2 - '@smithy/core': 3.22.0 - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.10 - '@smithy/util-utf8': 4.2.0 + '@smithy/core': 3.23.4 + '@smithy/node-config-provider': 4.3.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/signature-v4': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/util-config-provider': 4.2.1 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-stream': 4.5.14 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-sqs@3.972.5': + '@aws-sdk/middleware-sdk-sqs@3.972.8': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/util-hex-encoding': 4.2.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 '@aws-sdk/middleware-ssec@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.5': + '@aws-sdk/middleware-user-agent@3.972.12': dependencies: - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.980.0 - '@smithy/core': 3.22.0 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@aws-sdk/util-endpoints': 3.996.0 + '@smithy/core': 3.23.4 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.980.0': + '@aws-sdk/nested-clients@3.996.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.5 + '@aws-sdk/core': 3.973.12 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.5 + '@aws-sdk/middleware-user-agent': 3.972.12 '@aws-sdk/region-config-resolver': 3.972.3 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.980.0 + '@aws-sdk/util-endpoints': 3.996.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.3 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.22.0 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.12 - '@smithy/middleware-retry': 4.4.29 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.28 - '@smithy/util-defaults-mode-node': 4.2.31 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 + '@aws-sdk/util-user-agent-node': 3.972.11 + '@smithy/config-resolver': 4.4.7 + '@smithy/core': 3.23.4 + '@smithy/fetch-http-handler': 5.3.10 + '@smithy/hash-node': 4.2.9 + '@smithy/invalid-dependency': 4.2.9 + '@smithy/middleware-content-length': 4.2.9 + '@smithy/middleware-endpoint': 4.4.18 + '@smithy/middleware-retry': 4.4.35 + '@smithy/middleware-serde': 4.2.10 + '@smithy/middleware-stack': 4.2.9 + '@smithy/node-config-provider': 4.3.9 + '@smithy/node-http-handler': 4.4.11 + '@smithy/protocol-http': 5.3.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 + '@smithy/util-base64': 4.3.1 + '@smithy/util-body-length-browser': 4.2.1 + '@smithy/util-body-length-node': 4.2.2 + '@smithy/util-defaults-mode-browser': 4.3.34 + '@smithy/util-defaults-mode-node': 4.2.37 + '@smithy/util-endpoints': 3.2.9 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-retry': 4.2.9 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -9654,47 +9650,47 @@ snapshots: '@aws-sdk/region-config-resolver@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/config-resolver': 4.4.6 - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 + '@smithy/config-resolver': 4.4.7 + '@smithy/node-config-provider': 4.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.980.0': + '@aws-sdk/signature-v4-multi-region@3.996.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.5 + '@aws-sdk/middleware-sdk-s3': 3.972.12 '@aws-sdk/types': 3.973.1 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/signature-v4': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/token-providers@3.980.0': + '@aws-sdk/token-providers@3.996.0': dependencies: - '@aws-sdk/core': 3.973.5 - '@aws-sdk/nested-clients': 3.980.0 + '@aws-sdk/core': 3.973.12 + '@aws-sdk/nested-clients': 3.996.0 '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt '@aws-sdk/types@3.973.1': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 '@aws-sdk/util-arn-parser@3.972.2': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.980.0': + '@aws-sdk/util-endpoints@3.996.0': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-endpoints': 3.2.8 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 + '@smithy/util-endpoints': 3.2.9 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.965.4': @@ -9704,45 +9700,45 @@ snapshots: '@aws-sdk/util-user-agent-browser@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - bowser: 2.13.1 + '@smithy/types': 4.12.1 + bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.972.3': + '@aws-sdk/util-user-agent-node@3.972.11': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.5 + '@aws-sdk/middleware-user-agent': 3.972.12 '@aws-sdk/types': 3.973.1 - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 + '@smithy/node-config-provider': 4.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.2': + '@aws-sdk/xml-builder@3.972.5': dependencies: - '@smithy/types': 4.12.0 - fast-xml-parser: 5.2.5 + '@smithy/types': 4.12.1 + fast-xml-parser: 5.3.6 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.3': {} - '@babel/code-frame@7.28.6': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.6': {} + '@babel/compat-data@7.29.0': {} - '@babel/core@7.28.6': + '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.0 '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -9752,49 +9748,49 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.6': + '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.6 + '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.6)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.28.6)': + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 @@ -9807,55 +9803,55 @@ snapshots: '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.6)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -9868,576 +9864,576 @@ snapshots: '@babel/helper-wrap-function@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helpers@7.28.6': dependencies: '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 - '@babel/parser@7.28.6': + '@babel/parser@7.29.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.6)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.6)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.6)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/types': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.28.6(@babel/core@7.28.6)': + '@babel/preset-env@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-async-generator-functions': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-regenerator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.28.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.6) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.28.6) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.6) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.28.6) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0) core-js-compat: 3.48.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.6)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 esutils: 2.0.3 - '@babel/preset-react@7.28.5(@babel/core@7.28.6)': + '@babel/preset-react@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.6) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)': + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -10445,23 +10441,23 @@ snapshots: '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.6': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 + '@babel/parser': 7.29.0 '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.6': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 @@ -10509,27 +10505,27 @@ snapshots: dependencies: commander: 14.0.3 - '@csstools/color-helpers@5.1.0': {} + '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 5.1.0 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': {} + '@csstools/css-syntax-patches-for-csstree@1.0.28': {} - '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@4.0.0': {} '@date-fns/tz@1.4.1': {} @@ -10582,12 +10578,12 @@ snapshots: '@esbuild-kit/esm-loader@2.6.5': dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.13.1 + get-tsconfig: 4.13.6 '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.2': + '@esbuild/aix-ppc64@0.27.3': optional: true '@esbuild/android-arm64@0.18.20': @@ -10596,7 +10592,7 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.2': + '@esbuild/android-arm64@0.27.3': optional: true '@esbuild/android-arm@0.18.20': @@ -10605,7 +10601,7 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.2': + '@esbuild/android-arm@0.27.3': optional: true '@esbuild/android-x64@0.18.20': @@ -10614,7 +10610,7 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.2': + '@esbuild/android-x64@0.27.3': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -10623,7 +10619,7 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.2': + '@esbuild/darwin-arm64@0.27.3': optional: true '@esbuild/darwin-x64@0.18.20': @@ -10632,7 +10628,7 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.2': + '@esbuild/darwin-x64@0.27.3': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -10641,7 +10637,7 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.2': + '@esbuild/freebsd-arm64@0.27.3': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -10650,7 +10646,7 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.2': + '@esbuild/freebsd-x64@0.27.3': optional: true '@esbuild/linux-arm64@0.18.20': @@ -10659,7 +10655,7 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.2': + '@esbuild/linux-arm64@0.27.3': optional: true '@esbuild/linux-arm@0.18.20': @@ -10668,7 +10664,7 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.2': + '@esbuild/linux-arm@0.27.3': optional: true '@esbuild/linux-ia32@0.18.20': @@ -10677,7 +10673,7 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.2': + '@esbuild/linux-ia32@0.27.3': optional: true '@esbuild/linux-loong64@0.18.20': @@ -10686,7 +10682,7 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.2': + '@esbuild/linux-loong64@0.27.3': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -10695,7 +10691,7 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.2': + '@esbuild/linux-mips64el@0.27.3': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -10704,7 +10700,7 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.2': + '@esbuild/linux-ppc64@0.27.3': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -10713,7 +10709,7 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.2': + '@esbuild/linux-riscv64@0.27.3': optional: true '@esbuild/linux-s390x@0.18.20': @@ -10722,7 +10718,7 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.2': + '@esbuild/linux-s390x@0.27.3': optional: true '@esbuild/linux-x64@0.18.20': @@ -10731,13 +10727,13 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.2': + '@esbuild/linux-x64@0.27.3': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.2': + '@esbuild/netbsd-arm64@0.27.3': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -10746,13 +10742,13 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.2': + '@esbuild/netbsd-x64@0.27.3': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.2': + '@esbuild/openbsd-arm64@0.27.3': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -10761,13 +10757,13 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.2': + '@esbuild/openbsd-x64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.2': + '@esbuild/openharmony-arm64@0.27.3': optional: true '@esbuild/sunos-x64@0.18.20': @@ -10776,7 +10772,7 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.2': + '@esbuild/sunos-x64@0.27.3': optional: true '@esbuild/win32-arm64@0.18.20': @@ -10785,7 +10781,7 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.2': + '@esbuild/win32-arm64@0.27.3': optional: true '@esbuild/win32-ia32@0.18.20': @@ -10794,7 +10790,7 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.2': + '@esbuild/win32-ia32@0.27.3': optional: true '@esbuild/win32-x64@0.18.20': @@ -10803,21 +10799,21 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.2': + '@esbuild/win32-x64@0.27.3': optional: true - '@exodus/bytes@1.10.0': {} + '@exodus/bytes@1.14.1': {} '@exodus/schemasafe@1.3.0': {} - '@faker-js/faker@10.2.0': {} + '@faker-js/faker@10.3.0': {} '@fastify/accept-negotiator@2.0.1': {} '@fastify/ajv-compiler@4.0.5': dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) fast-uri: 3.1.0 '@fastify/busboy@3.2.0': {} @@ -10827,13 +10823,13 @@ snapshots: fastify-plugin: 5.1.0 toad-cache: 3.7.0 - '@fastify/deepmerge@3.2.0': {} + '@fastify/deepmerge@3.2.1': {} '@fastify/error@4.2.0': {} '@fastify/fast-json-stringify-compiler@5.0.3': dependencies: - fast-json-stringify: 6.2.0 + fast-json-stringify: 6.3.0 '@fastify/forwarded@3.0.1': {} @@ -10852,7 +10848,7 @@ snapshots: '@fastify/multipart@9.4.0': dependencies: '@fastify/busboy': 3.2.0 - '@fastify/deepmerge': 3.2.0 + '@fastify/deepmerge': 3.2.1 '@fastify/error': 4.2.0 fastify-plugin: 5.1.0 secure-json-parse: 4.1.0 @@ -10860,10 +10856,10 @@ snapshots: '@fastify/otel@0.16.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.39.0 - minimatch: 10.1.1 + minimatch: 10.2.2 transitivePeerDependencies: - supports-color @@ -10881,7 +10877,7 @@ snapshots: '@fastify/redis@7.2.0': dependencies: fastify-plugin: 5.1.0 - ioredis: 5.9.2 + ioredis: 5.9.3 transitivePeerDependencies: - supports-color @@ -10900,7 +10896,7 @@ snapshots: content-disposition: 1.0.1 fastify-plugin: 5.1.0 fastq: 1.20.1 - glob: 13.0.0 + glob: 13.0.6 '@fastify/swagger-ui@5.2.5': dependencies: @@ -10910,7 +10906,7 @@ snapshots: rfdc: 1.4.1 yaml: 2.8.2 - '@fastify/swagger@9.6.1': + '@fastify/swagger@9.7.0': dependencies: fastify-plugin: 5.1.0 json-schema-resolver: 3.0.0 @@ -10973,14 +10969,14 @@ snapshots: protobufjs: 7.5.4 yargs: 17.7.2 - '@hookform/resolvers@5.2.2(react-hook-form@7.71.1(react@19.2.4))': + '@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.4))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.71.1(react@19.2.4) + react-hook-form: 7.71.2(react@19.2.4) '@ibm-cloud/openapi-ruleset-utilities@1.9.0': {} - '@ibm-cloud/openapi-ruleset@1.33.6': + '@ibm-cloud/openapi-ruleset@1.33.7': dependencies: '@ibm-cloud/openapi-ruleset-utilities': 1.9.0 '@stoplight/spectral-formats': 1.8.2 @@ -10992,7 +10988,7 @@ snapshots: lodash: 4.17.23 loglevel: 1.9.2 loglevel-plugin-prefix: 0.8.4 - minimatch: 6.2.0 + minimatch: 6.2.1 validator: 13.15.26 transitivePeerDependencies: - encoding @@ -11095,42 +11091,36 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/confirm@5.1.21(@types/node@25.1.0)': + '@inquirer/confirm@5.1.21(@types/node@25.3.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.1.0) - '@inquirer/type': 3.0.10(@types/node@25.1.0) + '@inquirer/core': 10.3.2(@types/node@25.3.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) optionalDependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 - '@inquirer/core@10.3.2(@types/node@25.1.0)': + '@inquirer/core@10.3.2(@types/node@25.3.0)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.1.0) + '@inquirer/type': 3.0.10(@types/node@25.3.0) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@inquirer/figures@1.0.15': {} - '@inquirer/type@3.0.10(@types/node@25.1.0)': + '@inquirer/type@3.0.10(@types/node@25.3.0)': optionalDependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@ioredis/as-callback@3.0.0': {} '@ioredis/commands@1.5.0': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -11140,6 +11130,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/cliui@9.0.0': {} + '@istanbuljs/schema@0.1.3': {} '@jridgewell/gen-mapping@0.3.13': @@ -11180,6 +11172,12 @@ snapshots: '@opentelemetry/api': 1.9.0 drizzle-orm: 0.45.1(@opentelemetry/api@1.9.0)(postgres@3.4.8) + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@lukeed/ms@2.0.2': {} '@mdx-js/loader@3.1.1': @@ -11195,7 +11193,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 - acorn: 8.15.0 + acorn: 8.16.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -11204,7 +11202,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.15.0) + recma-jsx: 1.0.1(acorn@8.16.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.1 @@ -11219,13 +11217,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.10)(react@19.2.4)': + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.10 + '@types/react': 19.2.14 react: 19.2.4 - '@mswjs/interceptors@0.40.0': + '@mswjs/interceptors@0.41.3': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -11243,12 +11241,12 @@ snapshots: '@next/env@16.1.6': {} - '@next/mdx@16.1.6(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.10)(react@19.2.4))': + '@next/mdx@16.1.6(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))': dependencies: source-map: 0.7.6 optionalDependencies: '@mdx-js/loader': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.10)(react@19.2.4) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) '@next/swc-darwin-arm64@16.1.6': optional: true @@ -11286,10 +11284,10 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@number-flow/react@0.5.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@number-flow/react@0.5.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: esm-env: 1.2.2 - number-flow: 0.5.9 + number-flow: 0.5.12 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -11524,6 +11522,12 @@ snapshots: '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.39.0 + '@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.39.0 + '@opentelemetry/sdk-logs@0.211.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -11537,6 +11541,12 @@ snapshots: '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics@2.5.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node@0.211.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -11604,9 +11614,9 @@ snapshots: '@orval/core@7.21.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: '@apidevtools/swagger-parser': 12.1.0(openapi-types@12.1.3) - '@ibm-cloud/openapi-ruleset': 1.33.6 + '@ibm-cloud/openapi-ruleset': 1.33.7 '@stoplight/spectral-core': 1.21.0 - acorn: 8.15.0 + acorn: 8.16.0 chalk: 4.1.2 compare-versions: 6.1.1 debug: 4.4.3 @@ -11621,7 +11631,7 @@ snapshots: micromatch: 4.0.8 openapi3-ts: 4.5.0 swagger2openapi: 7.0.8 - typedoc: 0.28.16(typescript@5.9.3) + typedoc: 0.28.17(typescript@5.9.3) transitivePeerDependencies: - encoding - openapi-types @@ -11713,11 +11723,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@plotwist_app/tmdb@0.2.5(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2)': + '@plotwist_app/tmdb@0.2.5(@swc/core@1.15.13)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2)': dependencies: - axios: 1.13.4 + axios: 1.13.5 https: 1.0.0 - tsup: 8.5.1(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + tsup: 8.5.1(@swc/core@1.15.13)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) typescript: 5.9.3 transitivePeerDependencies: - '@microsoft/api-extractor' @@ -11754,13 +11764,13 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@puppeteer/browsers@2.11.2': + '@puppeteer/browsers@2.13.0': dependencies: debug: 4.4.3 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.3 + semver: 7.7.4 tar-fs: 3.1.1 yargs: 17.7.2 transitivePeerDependencies: @@ -11773,698 +11783,698 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-aspect-ratio@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-aspect-ratio@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-context@1.1.2(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-context@1.1.3(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.10)(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) '@radix-ui/react-icons@1.3.2(react@19.2.4)': dependencies: react: 19.2.4 - '@radix-ui/react-id@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.10)(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.10)(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) '@radix-ui/rect': 1.1.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.10)(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: '@radix-ui/rect': 1.1.1 react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.10)(react@19.2.4)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.10)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) '@radix-ui/rect@1.1.1': {} @@ -12489,7 +12499,7 @@ snapshots: dependencies: react: 19.2.4 - '@react-email/components@1.0.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@react-email/components@1.0.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@react-email/body': 0.2.1(react@19.2.4) '@react-email/button': 0.2.1(react@19.2.4) @@ -12509,7 +12519,7 @@ snapshots: '@react-email/render': 2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@react-email/row': 0.0.13(react@19.2.4) '@react-email/section': 0.0.17(react@19.2.4) - '@react-email/tailwind': 2.0.3(@react-email/body@0.2.1(react@19.2.4))(@react-email/button@0.2.1(react@19.2.4))(@react-email/code-block@0.2.1(react@19.2.4))(@react-email/code-inline@0.0.6(react@19.2.4))(@react-email/container@0.0.16(react@19.2.4))(@react-email/heading@0.0.16(react@19.2.4))(@react-email/hr@0.0.12(react@19.2.4))(@react-email/img@0.0.12(react@19.2.4))(@react-email/link@0.0.13(react@19.2.4))(@react-email/preview@0.0.14(react@19.2.4))(@react-email/text@0.1.6(react@19.2.4))(react@19.2.4) + '@react-email/tailwind': 2.0.5(@react-email/body@0.2.1(react@19.2.4))(@react-email/button@0.2.1(react@19.2.4))(@react-email/code-block@0.2.1(react@19.2.4))(@react-email/code-inline@0.0.6(react@19.2.4))(@react-email/container@0.0.16(react@19.2.4))(@react-email/heading@0.0.16(react@19.2.4))(@react-email/hr@0.0.12(react@19.2.4))(@react-email/img@0.0.12(react@19.2.4))(@react-email/link@0.0.13(react@19.2.4))(@react-email/preview@0.0.14(react@19.2.4))(@react-email/text@0.1.6(react@19.2.4))(react@19.2.4) '@react-email/text': 0.1.6(react@19.2.4) react: 19.2.4 transitivePeerDependencies: @@ -12571,11 +12581,11 @@ snapshots: dependencies: react: 19.2.4 - '@react-email/tailwind@2.0.3(@react-email/body@0.2.1(react@19.2.4))(@react-email/button@0.2.1(react@19.2.4))(@react-email/code-block@0.2.1(react@19.2.4))(@react-email/code-inline@0.0.6(react@19.2.4))(@react-email/container@0.0.16(react@19.2.4))(@react-email/heading@0.0.16(react@19.2.4))(@react-email/hr@0.0.12(react@19.2.4))(@react-email/img@0.0.12(react@19.2.4))(@react-email/link@0.0.13(react@19.2.4))(@react-email/preview@0.0.14(react@19.2.4))(@react-email/text@0.1.6(react@19.2.4))(react@19.2.4)': + '@react-email/tailwind@2.0.5(@react-email/body@0.2.1(react@19.2.4))(@react-email/button@0.2.1(react@19.2.4))(@react-email/code-block@0.2.1(react@19.2.4))(@react-email/code-inline@0.0.6(react@19.2.4))(@react-email/container@0.0.16(react@19.2.4))(@react-email/heading@0.0.16(react@19.2.4))(@react-email/hr@0.0.12(react@19.2.4))(@react-email/img@0.0.12(react@19.2.4))(@react-email/link@0.0.13(react@19.2.4))(@react-email/preview@0.0.14(react@19.2.4))(@react-email/text@0.1.6(react@19.2.4))(react@19.2.4)': dependencies: '@react-email/text': 0.1.6(react@19.2.4) react: 19.2.4 - tailwindcss: 4.1.18 + tailwindcss: 4.2.1 optionalDependencies: '@react-email/body': 0.2.1(react@19.2.4) '@react-email/button': 0.2.1(react@19.2.4) @@ -12592,101 +12602,101 @@ snapshots: dependencies: react: 19.2.4 - '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.10)(react@19.2.4)(redux@5.0.1))(react@19.2.4)': + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4)': dependencies: '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 - immer: 11.1.3 + immer: 11.1.4 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: react: 19.2.4 - react-redux: 9.2.0(@types/react@19.2.10)(react@19.2.4)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) - '@rolldown/pluginutils@1.0.0-beta.53': {} + '@rolldown/pluginutils@1.0.0-rc.3': {} - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-freebsd-x64@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true '@selderee/plugin-htmlparser2@0.11.0': @@ -12714,254 +12724,254 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@smithy/abort-controller@4.2.8': + '@smithy/abort-controller@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/chunked-blob-reader-native@4.2.1': + '@smithy/chunked-blob-reader-native@4.2.2': dependencies: - '@smithy/util-base64': 4.3.0 + '@smithy/util-base64': 4.3.1 tslib: 2.8.1 - '@smithy/chunked-blob-reader@5.2.0': + '@smithy/chunked-blob-reader@5.2.1': dependencies: tslib: 2.8.1 - '@smithy/config-resolver@4.4.6': + '@smithy/config-resolver@4.4.7': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 + '@smithy/node-config-provider': 4.3.9 + '@smithy/types': 4.12.1 + '@smithy/util-config-provider': 4.2.1 + '@smithy/util-endpoints': 3.2.9 + '@smithy/util-middleware': 4.2.9 tslib: 2.8.1 - '@smithy/core@3.22.0': - dependencies: - '@smithy/middleware-serde': 4.2.9 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.10 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 + '@smithy/core@3.23.4': + dependencies: + '@smithy/middleware-serde': 4.2.10 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 + '@smithy/util-base64': 4.3.1 + '@smithy/util-body-length-browser': 4.2.1 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-stream': 4.5.14 + '@smithy/util-utf8': 4.2.1 + '@smithy/uuid': 1.1.1 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.8': + '@smithy/credential-provider-imds@4.2.9': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 + '@smithy/node-config-provider': 4.3.9 + '@smithy/property-provider': 4.2.9 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 tslib: 2.8.1 - '@smithy/eventstream-codec@4.2.8': + '@smithy/eventstream-codec@4.2.9': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.12.0 - '@smithy/util-hex-encoding': 4.2.0 + '@smithy/types': 4.12.1 + '@smithy/util-hex-encoding': 4.2.1 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.2.8': + '@smithy/eventstream-serde-browser@4.2.9': dependencies: - '@smithy/eventstream-serde-universal': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/eventstream-serde-universal': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.3.8': + '@smithy/eventstream-serde-config-resolver@4.3.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.2.8': + '@smithy/eventstream-serde-node@4.2.9': dependencies: - '@smithy/eventstream-serde-universal': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/eventstream-serde-universal': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.2.8': + '@smithy/eventstream-serde-universal@4.2.9': dependencies: - '@smithy/eventstream-codec': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/eventstream-codec': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.9': + '@smithy/fetch-http-handler@5.3.10': dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/querystring-builder': 4.2.8 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/querystring-builder': 4.2.9 + '@smithy/types': 4.12.1 + '@smithy/util-base64': 4.3.1 tslib: 2.8.1 - '@smithy/hash-blob-browser@4.2.9': + '@smithy/hash-blob-browser@4.2.10': dependencies: - '@smithy/chunked-blob-reader': 5.2.0 - '@smithy/chunked-blob-reader-native': 4.2.1 - '@smithy/types': 4.12.0 + '@smithy/chunked-blob-reader': 5.2.1 + '@smithy/chunked-blob-reader-native': 4.2.2 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/hash-node@4.2.8': + '@smithy/hash-node@4.2.9': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/types': 4.12.1 + '@smithy/util-buffer-from': 4.2.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@smithy/hash-stream-node@4.2.8': + '@smithy/hash-stream-node@4.2.9': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/types': 4.12.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.8': + '@smithy/invalid-dependency@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@4.2.0': + '@smithy/is-array-buffer@4.2.1': dependencies: tslib: 2.8.1 - '@smithy/md5-js@4.2.8': + '@smithy/md5-js@4.2.9': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/types': 4.12.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@smithy/middleware-content-length@4.2.8': + '@smithy/middleware-content-length@4.2.9': dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.12': + '@smithy/middleware-endpoint@4.4.18': dependencies: - '@smithy/core': 3.22.0 - '@smithy/middleware-serde': 4.2.9 - '@smithy/node-config-provider': 4.3.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-middleware': 4.2.8 + '@smithy/core': 3.23.4 + '@smithy/middleware-serde': 4.2.10 + '@smithy/node-config-provider': 4.3.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 + '@smithy/url-parser': 4.2.9 + '@smithy/util-middleware': 4.2.9 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.29': + '@smithy/middleware-retry@4.4.35': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/uuid': 1.1.0 + '@smithy/node-config-provider': 4.3.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/service-error-classification': 4.2.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-retry': 4.2.9 + '@smithy/uuid': 1.1.1 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.9': + '@smithy/middleware-serde@4.2.10': dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.8': + '@smithy/middleware-stack@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.8': + '@smithy/node-config-provider@4.3.9': dependencies: - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/shared-ini-file-loader': 4.4.4 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.4.8': + '@smithy/node-http-handler@4.4.11': dependencies: - '@smithy/abort-controller': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/querystring-builder': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/abort-controller': 4.2.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/querystring-builder': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/property-provider@4.2.8': + '@smithy/property-provider@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/protocol-http@5.3.8': + '@smithy/protocol-http@5.3.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.8': + '@smithy/querystring-builder@4.2.9': dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-uri-escape': 4.2.0 + '@smithy/types': 4.12.1 + '@smithy/util-uri-escape': 4.2.1 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.8': + '@smithy/querystring-parser@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.8': + '@smithy/service-error-classification@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 - '@smithy/shared-ini-file-loader@4.4.3': + '@smithy/shared-ini-file-loader@4.4.4': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/signature-v4@5.3.8': + '@smithy/signature-v4@5.3.9': dependencies: - '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-uri-escape': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/is-array-buffer': 4.2.1 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 + '@smithy/util-hex-encoding': 4.2.1 + '@smithy/util-middleware': 4.2.9 + '@smithy/util-uri-escape': 4.2.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@smithy/smithy-client@4.11.1': + '@smithy/smithy-client@4.11.7': dependencies: - '@smithy/core': 3.22.0 - '@smithy/middleware-endpoint': 4.4.12 - '@smithy/middleware-stack': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-stream': 4.5.10 + '@smithy/core': 3.23.4 + '@smithy/middleware-endpoint': 4.4.18 + '@smithy/middleware-stack': 4.2.9 + '@smithy/protocol-http': 5.3.9 + '@smithy/types': 4.12.1 + '@smithy/util-stream': 4.5.14 tslib: 2.8.1 - '@smithy/types@4.12.0': + '@smithy/types@4.12.1': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.8': + '@smithy/url-parser@4.2.9': dependencies: - '@smithy/querystring-parser': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/querystring-parser': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/util-base64@4.3.0': + '@smithy/util-base64@4.3.1': dependencies: - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/util-buffer-from': 4.2.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.2.0': + '@smithy/util-body-length-browser@4.2.1': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@4.2.1': + '@smithy/util-body-length-node@4.2.2': dependencies: tslib: 2.8.1 @@ -12970,65 +12980,65 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@4.2.0': + '@smithy/util-buffer-from@4.2.1': dependencies: - '@smithy/is-array-buffer': 4.2.0 + '@smithy/is-array-buffer': 4.2.1 tslib: 2.8.1 - '@smithy/util-config-provider@4.2.0': + '@smithy/util-config-provider@4.2.1': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.28': + '@smithy/util-defaults-mode-browser@4.3.34': dependencies: - '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 + '@smithy/property-provider': 4.2.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.31': + '@smithy/util-defaults-mode-node@4.2.37': dependencies: - '@smithy/config-resolver': 4.4.6 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.11.1 - '@smithy/types': 4.12.0 + '@smithy/config-resolver': 4.4.7 + '@smithy/credential-provider-imds': 4.2.9 + '@smithy/node-config-provider': 4.3.9 + '@smithy/property-provider': 4.2.9 + '@smithy/smithy-client': 4.11.7 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/util-endpoints@3.2.8': + '@smithy/util-endpoints@3.2.9': dependencies: - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 + '@smithy/node-config-provider': 4.3.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.2.0': + '@smithy/util-hex-encoding@4.2.1': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.8': + '@smithy/util-middleware@4.2.9': dependencies: - '@smithy/types': 4.12.0 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/util-retry@4.2.8': + '@smithy/util-retry@4.2.9': dependencies: - '@smithy/service-error-classification': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/service-error-classification': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/util-stream@4.5.10': + '@smithy/util-stream@4.5.14': dependencies: - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/node-http-handler': 4.4.8 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 + '@smithy/fetch-http-handler': 5.3.10 + '@smithy/node-http-handler': 4.4.11 + '@smithy/types': 4.12.1 + '@smithy/util-base64': 4.3.1 + '@smithy/util-buffer-from': 4.2.1 + '@smithy/util-hex-encoding': 4.2.1 + '@smithy/util-utf8': 4.2.1 tslib: 2.8.1 - '@smithy/util-uri-escape@4.2.0': + '@smithy/util-uri-escape@4.2.1': dependencies: tslib: 2.8.1 @@ -13037,18 +13047,18 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.2.0': + '@smithy/util-utf8@4.2.1': dependencies: - '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-buffer-from': 4.2.1 tslib: 2.8.1 - '@smithy/util-waiter@4.2.8': + '@smithy/util-waiter@4.2.9': dependencies: - '@smithy/abort-controller': 4.2.8 - '@smithy/types': 4.12.0 + '@smithy/abort-controller': 4.2.9 + '@smithy/types': 4.12.1 tslib: 2.8.1 - '@smithy/uuid@1.1.0': + '@smithy/uuid@1.1.1': dependencies: tslib: 2.8.1 @@ -13062,9 +13072,9 @@ snapshots: '@standard-schema/utils@0.3.0': {} - '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': + '@stoplight/better-ajv-errors@1.0.3(ajv@8.18.0)': dependencies: - ajv: 8.17.1 + ajv: 8.18.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -13103,7 +13113,7 @@ snapshots: '@stoplight/spectral-core@1.21.0': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) '@stoplight/json': 3.21.7 '@stoplight/path': 1.3.2 '@stoplight/spectral-parsers': 1.0.5 @@ -13112,11 +13122,11 @@ snapshots: '@stoplight/types': 13.6.0 '@types/es-aggregate-error': 1.0.6 '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-errors: 3.0.0(ajv@8.18.0) + ajv-formats: 2.1.1(ajv@8.18.0) es-aggregate-error: 1.0.14 - jsonpath-plus: 10.3.0 + jsonpath-plus: 10.4.0 lodash: 4.17.23 lodash.topath: 4.5.2 minimatch: 3.1.2 @@ -13138,15 +13148,15 @@ snapshots: '@stoplight/spectral-functions@1.10.1': dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) '@stoplight/json': 3.21.7 '@stoplight/spectral-core': 1.21.0 '@stoplight/spectral-formats': 1.8.2 '@stoplight/spectral-runtime': 1.1.4 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) + ajv-errors: 3.0.0(ajv@8.18.0) + ajv-formats: 2.1.1(ajv@8.18.0) lodash: 4.17.23 tslib: 2.8.1 transitivePeerDependencies: @@ -13172,7 +13182,7 @@ snapshots: '@stoplight/spectral-rulesets@1.22.0': dependencies: '@asyncapi/specs': 6.11.1 - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.18.0) '@stoplight/json': 3.21.7 '@stoplight/spectral-core': 1.21.0 '@stoplight/spectral-formats': 1.8.2 @@ -13180,8 +13190,8 @@ snapshots: '@stoplight/spectral-runtime': 1.1.4 '@stoplight/types': 13.20.0 '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-formats: 2.1.1(ajv@8.18.0) json-schema-traverse: 1.0.0 leven: 3.1.0 lodash: 4.17.23 @@ -13225,56 +13235,56 @@ snapshots: '@stoplight/yaml-ast-parser': 0.0.50 tslib: 2.8.1 - '@stripe/stripe-js@8.7.0': {} + '@stripe/stripe-js@8.8.0': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.6)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 - '@svgr/babel-preset@8.1.0(@babel/core@7.28.6)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) '@svgr/core@8.1.0(typescript@5.9.3)': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.9.3) snake-case: 3.0.4 @@ -13284,13 +13294,13 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -13308,11 +13318,11 @@ snapshots: '@svgr/webpack@8.1.0(typescript@5.9.3)': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.28.6) - '@babel/preset-env': 7.28.6(@babel/core@7.28.6) - '@babel/preset-react': 7.28.5(@babel/core@7.28.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) @@ -13320,51 +13330,51 @@ snapshots: - supports-color - typescript - '@swc/core-darwin-arm64@1.15.11': + '@swc/core-darwin-arm64@1.15.13': optional: true - '@swc/core-darwin-x64@1.15.11': + '@swc/core-darwin-x64@1.15.13': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.11': + '@swc/core-linux-arm-gnueabihf@1.15.13': optional: true - '@swc/core-linux-arm64-gnu@1.15.11': + '@swc/core-linux-arm64-gnu@1.15.13': optional: true - '@swc/core-linux-arm64-musl@1.15.11': + '@swc/core-linux-arm64-musl@1.15.13': optional: true - '@swc/core-linux-x64-gnu@1.15.11': + '@swc/core-linux-x64-gnu@1.15.13': optional: true - '@swc/core-linux-x64-musl@1.15.11': + '@swc/core-linux-x64-musl@1.15.13': optional: true - '@swc/core-win32-arm64-msvc@1.15.11': + '@swc/core-win32-arm64-msvc@1.15.13': optional: true - '@swc/core-win32-ia32-msvc@1.15.11': + '@swc/core-win32-ia32-msvc@1.15.13': optional: true - '@swc/core-win32-x64-msvc@1.15.11': + '@swc/core-win32-x64-msvc@1.15.13': optional: true - '@swc/core@1.15.11': + '@swc/core@1.15.13': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.25 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.11 - '@swc/core-darwin-x64': 1.15.11 - '@swc/core-linux-arm-gnueabihf': 1.15.11 - '@swc/core-linux-arm64-gnu': 1.15.11 - '@swc/core-linux-arm64-musl': 1.15.11 - '@swc/core-linux-x64-gnu': 1.15.11 - '@swc/core-linux-x64-musl': 1.15.11 - '@swc/core-win32-arm64-msvc': 1.15.11 - '@swc/core-win32-ia32-msvc': 1.15.11 - '@swc/core-win32-x64-msvc': 1.15.11 + '@swc/core-darwin-arm64': 1.15.13 + '@swc/core-darwin-x64': 1.15.13 + '@swc/core-linux-arm-gnueabihf': 1.15.13 + '@swc/core-linux-arm64-gnu': 1.15.13 + '@swc/core-linux-arm64-musl': 1.15.13 + '@swc/core-linux-x64-gnu': 1.15.13 + '@swc/core-linux-x64-musl': 1.15.13 + '@swc/core-win32-arm64-msvc': 1.15.13 + '@swc/core-win32-ia32-msvc': 1.15.13 + '@swc/core-win32-x64-msvc': 1.15.13 '@swc/counter@0.1.3': {} @@ -13395,7 +13405,7 @@ snapshots: '@tanstack/query-core@5.90.20': {} - '@tanstack/react-query@5.90.20(react@19.2.4)': + '@tanstack/react-query@5.90.21(react@19.2.4)': dependencies: '@tanstack/query-core': 5.90.20 react: 19.2.4 @@ -13406,19 +13416,19 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@tanstack/react-virtual@3.13.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-virtual@3.13.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/virtual-core': 3.13.18 + '@tanstack/virtual-core': 3.13.19 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) '@tanstack/table-core@8.21.3': {} - '@tanstack/virtual-core@3.13.18': {} + '@tanstack/virtual-core@3.13.19': {} '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 '@babel/runtime': 7.28.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -13427,15 +13437,15 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -13443,34 +13453,34 @@ snapshots: '@types/adm-zip@0.5.7': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.0 '@types/bcrypt@6.0.0': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/canvas-confetti@1.9.0': {} @@ -13481,7 +13491,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/d3-array@3.2.2': {} @@ -13532,18 +13542,18 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/ssh2': 1.15.5 - '@types/dockerode@3.3.47': + '@types/dockerode@4.0.1': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/ssh2': 1.15.5 '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/estree-jsx@1.0.5': dependencies: @@ -13557,16 +13567,16 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/ioredis-mock@8.2.6(ioredis@5.9.2)': + '@types/ioredis-mock@8.2.6(ioredis@5.9.3)': dependencies: - ioredis: 5.9.2 + ioredis: 5.9.3 '@types/json-schema@7.0.15': {} '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/mdast@4.0.4': dependencies: @@ -13580,7 +13590,7 @@ snapshots: '@types/micro@7.3.7': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/ms@2.1.0': {} @@ -13592,42 +13602,42 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@24.10.9': + '@types/node@24.10.13': dependencies: undici-types: 7.16.0 - '@types/node@25.1.0': + '@types/node@25.3.0': dependencies: - undici-types: 7.16.0 + undici-types: 7.18.2 '@types/nprogress@0.2.3': {} - '@types/react-dom@19.2.3(@types/react@19.2.10)': + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 '@types/react-simple-maps@3.0.6': dependencies: '@types/d3-geo': 2.0.7 '@types/d3-zoom': 2.0.7 '@types/geojson': 7946.0.16 - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@types/react@19.2.10': + '@types/react@19.2.14': dependencies: csstype: 3.2.3 '@types/sax@1.2.7': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/ssh2-streams@0.1.13': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/ssh2@0.5.52': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@types/ssh2-streams': 0.1.13 '@types/ssh2@1.15.5': @@ -13646,7 +13656,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 optional: true '@uidotdev/usehooks@2.4.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -13656,15 +13666,15 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) - '@rolldown/pluginutils': 1.0.0-beta.53 + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -13677,10 +13687,10 @@ snapshots: istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.1.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -13692,11 +13702,11 @@ snapshots: istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.1.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.0.18': dependencies: @@ -13707,14 +13717,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.12.7(@types/node@25.1.0)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + msw: 2.12.10(@types/node@25.3.0)(typescript@5.9.3) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.18': dependencies: @@ -13742,19 +13752,13 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.1.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@4.0.18': dependencies: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 - '@zone-eu/mailsplit@5.4.8': - dependencies: - libbase64: 1.3.0 - libmime: 5.3.7 - libqp: 2.1.1 - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -13766,41 +13770,41 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-walk@8.3.4: + acorn-walk@8.3.5: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} adm-zip@0.5.16: {} agent-base@7.1.4: {} - ajv-draft-04@1.0.0(ajv@8.17.1): + ajv-draft-04@1.0.0(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-errors@3.0.0(ajv@8.17.1): + ajv-errors@3.0.0(ajv@8.18.0): dependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-formats@2.1.1(ajv@8.17.1): + ajv-formats@2.1.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv@8.17.1: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -13882,7 +13886,7 @@ snapshots: asn1.js@5.4.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 inherits: 2.0.4 minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 @@ -13915,7 +13919,7 @@ snapshots: atomic-sleep@1.0.0: {} - atomically@2.1.0: + atomically@2.1.1: dependencies: stubborn-fs: 2.0.0 when-exit: 2.1.5 @@ -13923,7 +13927,7 @@ snapshots: autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001766 + caniuse-lite: 1.0.30001774 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 @@ -13933,12 +13937,12 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - avvio@9.1.0: + avvio@9.2.0: dependencies: '@fastify/error': 4.2.0 fastq: 1.20.1 - axios@1.13.4: + axios@1.13.5: dependencies: follow-redirects: 1.15.11 form-data: 4.0.5 @@ -13946,29 +13950,29 @@ snapshots: transitivePeerDependencies: - debug - b4a@1.7.3: {} + b4a@1.8.0: {} - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.28.6): + babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.6): + babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.28.6): + babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6) + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -13976,13 +13980,15 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + bare-events@2.8.2: {} - bare-fs@4.5.3: + bare-fs@4.5.4: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) + bare-stream: 2.8.0(bare-events@2.8.2) bare-url: 2.3.2 fast-fifo: 1.3.2 transitivePeerDependencies: @@ -13998,9 +14004,10 @@ snapshots: bare-os: 3.6.2 optional: true - bare-stream@2.7.0(bare-events@2.8.2): + bare-stream@2.8.0(bare-events@2.8.2): dependencies: streamx: 2.23.0 + teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 transitivePeerDependencies: @@ -14017,9 +14024,9 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.0: {} - basic-ftp@5.1.0: {} + basic-ftp@5.2.0: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -14041,11 +14048,11 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - bn.js@4.12.2: {} + bn.js@4.12.3: {} boolbase@1.0.0: {} - bowser@2.13.1: {} + bowser@2.14.1: {} brace-expansion@1.1.12: dependencies: @@ -14056,15 +14063,19 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.3: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001766 - electron-to-chromium: 1.5.283 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001774 + electron-to-chromium: 1.5.302 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -14094,9 +14105,9 @@ snapshots: buildcheck@0.0.7: optional: true - bundle-require@5.1.0(esbuild@0.27.2): + bundle-require@5.1.0(esbuild@0.27.3): dependencies: - esbuild: 0.27.2 + esbuild: 0.27.3 load-tsconfig: 0.2.5 byline@5.0.0: {} @@ -14128,7 +14139,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001766: {} + caniuse-lite@1.0.30001774: {} canvas-confetti@1.9.4: {} @@ -14173,7 +14184,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.19.2 + undici: 7.22.0 whatwg-mimetype: 4.0.0 chokidar@3.6.0: @@ -14194,9 +14205,9 @@ snapshots: chownr@1.1.4: {} - chromium-bidi@13.0.1(devtools-protocol@0.0.1551306): + chromium-bidi@14.0.0(devtools-protocol@0.0.1566079): dependencies: - devtools-protocol: 0.0.1551306 + devtools-protocol: 0.0.1566079 mitt: 3.0.1 zod: 3.25.76 @@ -14232,12 +14243,12 @@ snapshots: cluster-key-slot@1.1.2: {} - cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.10)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: @@ -14286,21 +14297,21 @@ snapshots: concat-map@0.0.1: {} - conf@15.0.2: + conf@15.1.0: dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - atomically: 2.1.0 + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + atomically: 2.1.1 debounce-fn: 6.0.0 dot-prop: 10.1.0 env-paths: 3.0.0 json-schema-typed: 8.0.2 - semver: 7.7.3 + semver: 7.7.4 uint8array-extras: 1.5.0 confbox@0.1.8: {} - confbox@0.2.2: {} + confbox@0.2.4: {} consola@3.4.2: {} @@ -14395,10 +14406,10 @@ snapshots: cssstyle@5.3.7: dependencies: - '@asamuzakjp/css-color': 4.1.1 - '@csstools/css-syntax-patches-for-csstree': 1.0.26 + '@asamuzakjp/css-color': 4.1.2 + '@csstools/css-syntax-patches-for-csstree': 1.0.28 css-tree: 3.1.0 - lru-cache: 11.2.5 + lru-cache: 11.2.6 csstype@3.2.3: {} @@ -14573,7 +14584,7 @@ snapshots: dependencies: dequal: 2.0.3 - devtools-protocol@0.0.1551306: {} + devtools-protocol@0.0.1566079: {} didyoumean@1.2.2: {} @@ -14635,12 +14646,12 @@ snapshots: dot-prop@10.1.0: dependencies: - type-fest: 5.4.3 + type-fest: 5.4.4 dotenv-cli@11.0.0: dependencies: cross-spawn: 7.0.6 - dotenv: 17.2.3 + dotenv: 17.3.1 dotenv-expand: 12.0.3 minimist: 1.2.8 @@ -14650,9 +14661,9 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.2.3: {} + dotenv@17.3.1: {} - drizzle-kit@0.31.8: + drizzle-kit@0.31.9: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 @@ -14685,7 +14696,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - electron-to-chromium@1.5.283: {} + electron-to-chromium@1.5.302: {} embla-carousel-react@8.6.0(react@19.2.4): dependencies: @@ -14705,8 +14716,6 @@ snapshots: emoji-regex@9.2.2: {} - encoding-japanese@2.2.0: {} - encoding-sniffer@0.2.1: dependencies: iconv-lite: 0.6.3 @@ -14721,7 +14730,7 @@ snapshots: engine.io@6.6.5: dependencies: '@types/cors': 2.8.19 - '@types/node': 25.1.0 + '@types/node': 25.3.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -14858,7 +14867,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 + acorn: 8.16.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 @@ -14923,34 +14932,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.2: + esbuild@0.27.3: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 escalade@3.2.0: {} @@ -15065,11 +15074,11 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-json-stringify@6.2.0: + fast-json-stringify@6.3.0: dependencies: '@fastify/merge-json-schemas': 0.2.1 - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) fast-uri: 3.1.0 json-schema-ref-resolver: 3.0.0 rfdc: 1.4.1 @@ -15093,11 +15102,11 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.2.5: + fast-xml-parser@5.3.6: dependencies: strnum: 2.1.2 - fast-xml-parser@5.3.4: + fast-xml-parser@5.3.7: dependencies: strnum: 2.1.2 @@ -15107,30 +15116,30 @@ snapshots: fastify-plugin@5.1.0: {} - fastify-type-provider-zod@6.1.0(@fastify/swagger@9.6.1)(fastify@5.7.2)(openapi-types@12.1.3)(zod@4.3.6): + fastify-type-provider-zod@6.1.0(@fastify/swagger@9.7.0)(fastify@5.7.4)(openapi-types@12.1.3)(zod@4.3.6): dependencies: '@fastify/error': 4.2.0 - '@fastify/swagger': 9.6.1 - fastify: 5.7.2 + '@fastify/swagger': 9.7.0 + fastify: 5.7.4 openapi-types: 12.1.3 zod: 4.3.6 - fastify@5.7.2: + fastify@5.7.4: dependencies: '@fastify/ajv-compiler': 4.0.5 '@fastify/error': 4.2.0 '@fastify/fast-json-stringify-compiler': 5.0.3 '@fastify/proxy-addr': 5.1.0 abstract-logging: 2.0.1 - avvio: 9.1.0 - fast-json-stringify: 6.2.0 - find-my-way: 9.4.0 + avvio: 9.2.0 + fast-json-stringify: 6.3.0 + find-my-way: 9.5.0 light-my-request: 6.6.0 - pino: 10.3.0 + pino: 10.3.1 process-warning: 5.0.0 rfdc: 1.4.1 secure-json-parse: 4.1.0 - semver: 7.7.3 + semver: 7.7.4 toad-cache: 3.7.0 fastparallel@2.4.1: @@ -15171,7 +15180,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-my-way@9.4.0: + find-my-way@9.5.0: dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.1.2 @@ -15186,7 +15195,7 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.57.1 + rollup: 4.59.0 flatted@3.3.3: {} @@ -15213,9 +15222,9 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + framer-motion@12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - motion-dom: 12.29.2 + motion-dom: 12.34.3 motion-utils: 12.29.2 tslib: 2.8.1 optionalDependencies: @@ -15272,7 +15281,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} get-intrinsic@1.3.0: dependencies: @@ -15308,13 +15317,13 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.1: + get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 get-uri@6.0.5: dependencies: - basic-ftp: 5.1.0 + basic-ftp: 5.2.0 data-uri-to-buffer: 6.0.2 debug: 4.4.3 transitivePeerDependencies: @@ -15332,25 +15341,25 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 + minimatch: 9.0.6 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@11.1.0: dependencies: foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.1.1 - minipass: 7.1.2 + jackspeak: 4.2.3 + minimatch: 10.2.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 - path-scurry: 2.0.1 + path-scurry: 2.0.2 - glob@13.0.0: + glob@13.0.6: dependencies: - minimatch: 10.1.1 - minipass: 7.1.2 - path-scurry: 2.0.1 + minimatch: 10.2.2 + minipass: 7.1.3 + path-scurry: 2.0.2 globalthis@1.0.4: dependencies: @@ -15467,15 +15476,13 @@ snapshots: dependencies: '@types/hast': 3.0.4 - he@1.2.0: {} - headers-polyfill@4.0.3: {} help-me@5.0.0: {} html-encoding-sniffer@6.0.0: dependencies: - '@exodus/bytes': 1.10.0 + '@exodus/bytes': 1.14.1 transitivePeerDependencies: - '@noble/hashes' @@ -15535,7 +15542,7 @@ snapshots: human-signals@2.1.0: {} - i18next@25.8.0(typescript@5.9.3): + i18next@25.8.13(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.6 optionalDependencies: @@ -15545,17 +15552,13 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.7.0: - dependencies: - safer-buffer: 2.1.2 - ieee754@1.2.1: {} ignore@5.3.2: {} immer@10.2.0: {} - immer@11.1.3: {} + immer@11.1.4: {} immer@9.0.21: {} @@ -15566,8 +15569,8 @@ snapshots: import-in-the-middle@2.0.6: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 @@ -15592,17 +15595,17 @@ snapshots: internmap@2.0.3: {} - ioredis-mock@8.13.1(@types/ioredis-mock@8.2.6(ioredis@5.9.2))(ioredis@5.9.2): + ioredis-mock@8.13.1(@types/ioredis-mock@8.2.6(ioredis@5.9.3))(ioredis@5.9.3): dependencies: '@ioredis/as-callback': 3.0.0 '@ioredis/commands': 1.5.0 - '@types/ioredis-mock': 8.2.6(ioredis@5.9.2) + '@types/ioredis-mock': 8.2.6(ioredis@5.9.3) fengari: 0.1.5 fengari-interop: 0.1.4(fengari@0.1.5) - ioredis: 5.9.2 - semver: 7.7.3 + ioredis: 5.9.3 + semver: 7.7.4 - ioredis@5.9.2: + ioredis@5.9.3: dependencies: '@ioredis/commands': 1.5.0 cluster-key-slot: 1.1.2 @@ -15773,11 +15776,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.28.6 - '@babel/parser': 7.28.6 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -15798,9 +15801,9 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: + jackspeak@4.2.3: dependencies: - '@isaacs/cliui': 8.0.2 + '@isaacs/cliui': 9.0.0 jiti@1.21.7: {} @@ -15825,8 +15828,8 @@ snapshots: jsdom@27.4.0: dependencies: '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.7.7 - '@exodus/bytes': 1.10.0 + '@asamuzakjp/dom-selector': 6.8.1 + '@exodus/bytes': 1.14.1 cssstyle: 5.3.7 data-urls: 6.0.1 decimal.js: 10.6.0 @@ -15886,7 +15889,7 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonpath-plus@10.3.0: + jsonpath-plus@10.4.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) @@ -15907,7 +15910,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.3 + semver: 7.7.4 jwa@2.0.1: dependencies: @@ -15940,17 +15943,6 @@ snapshots: leven@3.1.0: {} - libbase64@1.3.0: {} - - libmime@5.3.7: - dependencies: - encoding-japanese: 2.2.0 - iconv-lite: 0.6.3 - libbase64: 1.3.0 - libqp: 2.1.1 - - libqp@2.1.1: {} - light-my-request@6.6.0: dependencies: cookie: 1.1.1 @@ -16041,7 +16033,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.5: {} + lru-cache@11.2.6: {} lru-cache@5.1.1: dependencies: @@ -16070,32 +16062,19 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.1: + magicast@0.5.2: dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 source-map-js: 1.2.1 - mailparser@3.9.1: - dependencies: - '@zone-eu/mailsplit': 5.4.8 - encoding-japanese: 2.2.0 - he: 1.2.0 - html-to-text: 9.0.5 - iconv-lite: 0.7.0 - libmime: 5.3.7 - linkify-it: 5.0.0 - nodemailer: 7.0.11 - punycode.js: 2.3.1 - tlds: 1.261.0 - make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 markdown-extensions@2.0.0: {} - markdown-it@14.1.0: + markdown-it@14.1.1: dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -16108,7 +16087,7 @@ snapshots: math-intrinsics@1.1.0: {} - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.3: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 @@ -16131,7 +16110,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -16144,7 +16123,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -16155,7 +16134,7 @@ snapshots: mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 @@ -16169,7 +16148,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -16282,8 +16261,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -16452,39 +16431,39 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.1.1: + minimatch@10.2.2: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.3 minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.6: + minimatch@5.1.7: dependencies: brace-expansion: 2.0.2 - minimatch@6.2.0: + minimatch@6.2.1: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.5: + minimatch@9.0.6: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 5.0.3 minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.3: {} mitt@3.0.1: {} mkdirp-classic@0.5.3: {} - mkdirp@1.0.4: {} + mkdirp@3.0.1: {} mlly@1.8.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 @@ -16495,7 +16474,7 @@ snapshots: module-details-from-path@1.0.4: {} - motion-dom@12.29.2: + motion-dom@12.34.3: dependencies: motion-utils: 12.29.2 @@ -16505,10 +16484,10 @@ snapshots: ms@2.1.3: {} - msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3): + msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.1.0) - '@mswjs/interceptors': 0.40.0 + '@inquirer/confirm': 5.1.21(@types/node@25.3.0) + '@mswjs/interceptors': 0.41.3 '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 cookie: 1.1.1 @@ -16518,11 +16497,11 @@ snapshots: outvariant: 1.4.3 path-to-regexp: 6.3.0 picocolors: 1.1.1 - rettime: 0.7.0 + rettime: 0.10.1 statuses: 2.0.2 strict-event-emitter: 0.5.1 tough-cookie: 6.0.0 - type-fest: 5.4.3 + type-fest: 5.4.4 until-async: 3.0.2 yargs: 17.7.2 optionalDependencies: @@ -16549,44 +16528,42 @@ snapshots: netmask@2.0.2: {} - next-auth@4.24.13(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(nodemailer@7.0.11)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next-auth@4.24.13(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@babel/runtime': 7.28.6 '@panva/hkdf': 1.2.1 cookie: 0.7.2 jose: 4.15.9 - next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) oauth: 0.9.15 openid-client: 5.7.1 - preact: 10.28.3 - preact-render-to-string: 5.2.6(preact@10.28.3) + preact: 10.28.4 + preact-render-to-string: 5.2.6(preact@10.28.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) uuid: 8.3.2 - optionalDependencies: - nodemailer: 7.0.11 next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next-view-transitions@0.3.5(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next-view-transitions@0.3.5(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001766 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001774 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - styled-jsx: 5.1.6(@babel/core@7.28.6)(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) optionalDependencies: '@next/swc-darwin-arm64': 16.1.6 '@next/swc-darwin-x64': 16.1.6 @@ -16602,9 +16579,9 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextjs-toploader@3.9.17(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + nextjs-toploader@3.9.17(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nprogress: 0.2.0 prop-types: 15.8.1 react: 19.2.4 @@ -16617,7 +16594,7 @@ snapshots: astring: 1.9.0 jsep: 1.4.0 optionalDependencies: - jsonpath-plus: 10.3.0 + jsonpath-plus: 10.4.0 lodash.topath: 4.5.2 no-case@3.0.4: @@ -16641,8 +16618,6 @@ snapshots: node-releases@2.0.27: {} - nodemailer@7.0.11: {} - normalize-path@3.0.0: {} normalize-wheel@1.0.1: {} @@ -16657,16 +16632,16 @@ snapshots: dependencies: boolbase: 1.0.0 - number-flow@0.5.9: + number-flow@0.5.12: dependencies: esm-env: 1.2.2 - nuqs@2.8.7(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + nuqs@2.8.8(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): dependencies: '@standard-schema/spec': 1.0.0 react: 19.2.4 optionalDependencies: - next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nypm@0.6.2: dependencies: @@ -16748,7 +16723,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - openai@6.17.0(ws@8.19.0)(zod@4.3.6): + openai@6.23.0(ws@8.19.0)(zod@4.3.6): optionalDependencies: ws: 8.19.0 zod: 4.3.6 @@ -16807,9 +16782,9 @@ snapshots: openapi3-ts: 4.5.0 string-argv: 0.3.2 tsconfck: 2.1.2(typescript@5.9.3) - typedoc: 0.28.16(typescript@5.9.3) - typedoc-plugin-coverage: 4.0.2(typedoc@0.28.16(typescript@5.9.3)) - typedoc-plugin-markdown: 4.9.0(typedoc@0.28.16(typescript@5.9.3)) + typedoc: 0.28.17(typescript@5.9.3) + typedoc-plugin-coverage: 4.0.2(typedoc@0.28.17(typescript@5.9.3)) + typedoc-plugin-markdown: 4.10.0(typedoc@0.28.17(typescript@5.9.3)) transitivePeerDependencies: - encoding - openapi-types @@ -16868,7 +16843,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -16904,12 +16879,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.1: + path-scurry@2.0.2: dependencies: - lru-cache: 11.2.5 - minipass: 7.1.2 + lru-cache: 11.2.6 + minipass: 7.1.3 path-to-regexp@6.3.0: {} @@ -16948,12 +16923,12 @@ snapshots: pino-abstract-transport: 3.0.0 pump: 3.0.3 secure-json-parse: 4.1.0 - sonic-boom: 4.2.0 + sonic-boom: 4.2.1 strip-json-comments: 5.0.3 pino-std-serializers@7.1.0: {} - pino@10.3.0: + pino@10.3.1: dependencies: '@pinojs/redact': 0.4.0 atomic-sleep: 1.0.0 @@ -16964,7 +16939,7 @@ snapshots: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 - sonic-boom: 4.2.0 + sonic-boom: 4.2.1 thread-stream: 4.0.0 pirates@4.0.7: {} @@ -16977,7 +16952,7 @@ snapshots: pkg-types@2.3.0: dependencies: - confbox: 0.2.2 + confbox: 0.2.4 exsolve: 1.0.8 pathe: 2.0.3 @@ -16985,6 +16960,8 @@ snapshots: possible-typed-array-names@1.1.0: {} + postal-mime@2.7.3: {} + postcss-import@15.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -17046,12 +17023,12 @@ snapshots: postgres@3.4.8: {} - preact-render-to-string@5.2.6(preact@10.28.3): + preact-render-to-string@5.2.6(preact@10.28.4): dependencies: - preact: 10.28.3 + preact: 10.28.4 pretty-format: 3.8.0 - preact@10.28.3: {} + preact@10.28.4: {} prettier@3.8.1: {} @@ -17092,9 +17069,12 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 - properties-reader@2.3.0: + properties-reader@3.0.1: dependencies: - mkdirp: 1.0.4 + '@kwsites/file-exists': 1.1.1 + mkdirp: 3.0.1 + transitivePeerDependencies: + - supports-color property-information@7.1.0: {} @@ -17110,7 +17090,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 25.1.0 + '@types/node': 25.3.0 long: 5.3.2 protobufjs@8.0.0: @@ -17125,7 +17105,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 25.1.0 + '@types/node': 25.3.0 long: 5.3.2 proxy-agent@6.5.0: @@ -17152,14 +17132,14 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.36.1: + puppeteer-core@24.37.5: dependencies: - '@puppeteer/browsers': 2.11.2 - chromium-bidi: 13.0.1(devtools-protocol@0.0.1551306) + '@puppeteer/browsers': 2.13.0 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) debug: 4.4.3 - devtools-protocol: 0.0.1551306 + devtools-protocol: 0.0.1566079 typed-query-selector: 2.12.0 - webdriver-bidi-protocol: 0.4.0 + webdriver-bidi-protocol: 0.4.1 ws: 8.19.0 transitivePeerDependencies: - bare-abort-controller @@ -17169,13 +17149,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.36.1(typescript@5.9.3): + puppeteer@24.37.5(typescript@5.9.3): dependencies: - '@puppeteer/browsers': 2.11.2 - chromium-bidi: 13.0.1(devtools-protocol@0.0.1551306) + '@puppeteer/browsers': 2.13.0 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) cosmiconfig: 9.0.0(typescript@5.9.3) - devtools-protocol: 0.0.1551306 - puppeteer-core: 24.36.1 + devtools-protocol: 0.0.1566079 + puppeteer-core: 24.37.5 typed-query-selector: 2.12.0 transitivePeerDependencies: - bare-abort-controller @@ -17204,7 +17184,7 @@ snapshots: countup.js: 2.9.0 react: 19.2.4 - react-day-picker@9.13.0(react@19.2.4): + react-day-picker@9.13.2(react@19.2.4): dependencies: '@date-fns/tz': 1.4.1 date-fns: 4.1.0 @@ -17223,13 +17203,13 @@ snapshots: react-dom: 19.2.4(react@19.2.4) tslib: 2.8.1 - react-email@5.2.5: + react-email@5.2.8: dependencies: - '@babel/parser': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/traverse': 7.29.0 chokidar: 4.0.3 commander: 13.1.0 - conf: 15.0.2 + conf: 15.1.0 debounce: 2.2.0 esbuild: 0.25.12 glob: 11.1.0 @@ -17247,22 +17227,22 @@ snapshots: - supports-color - utf-8-validate - react-hook-form@7.71.1(react@19.2.4): + react-hook-form@7.71.2(react@19.2.4): dependencies: react: 19.2.4 - react-i18next@16.5.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + react-i18next@16.5.4(i18next@25.8.13(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.6 html-parse-stringify: 3.0.1 - i18next: 25.8.0(typescript@5.9.3) + i18next: 25.8.13(typescript@5.9.3) react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: react-dom: 19.2.4(react@19.2.4) typescript: 5.9.3 - react-intersection-observer@10.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-intersection-observer@10.0.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 optionalDependencies: @@ -17274,37 +17254,37 @@ snapshots: dependencies: react: 19.2.4 - react-redux@9.2.0(@types/react@19.2.10)(react@19.2.4)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 redux: 5.0.1 react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.10)(react@19.2.4): + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 - react-style-singleton: 2.2.3(@types/react@19.2.10)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - react-remove-scroll@2.7.2(@types/react@19.2.10)(react@19.2.4): + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.10)(react@19.2.4) - react-style-singleton: 2.2.3(@types/react@19.2.10)(react@19.2.4) + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.10)(react@19.2.4) - use-sidecar: 1.1.3(@types/react@19.2.10)(react@19.2.4) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - react-resizable-panels@4.5.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-resizable-panels@4.6.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -17319,13 +17299,13 @@ snapshots: react-dom: 19.2.4(react@19.2.4) topojson-client: 3.1.0 - react-style-singleton@2.2.3(@types/react@19.2.10)(react@19.2.4): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): dependencies: get-nonce: 1.0.1 react: 19.2.4 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 react-tooltip@5.30.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -17366,7 +17346,7 @@ snapshots: readdir-glob@1.1.3: dependencies: - minimatch: 5.1.6 + minimatch: 5.1.7 readdirp@3.6.0: dependencies: @@ -17378,9 +17358,9 @@ snapshots: real-require@0.2.0: {} - recharts@3.7.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)(redux@5.0.1): + recharts@3.7.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)(redux@5.0.1): dependencies: - '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.10)(react@19.2.4)(redux@5.0.1))(react@19.2.4) + '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4) clsx: 2.1.1 decimal.js-light: 2.5.1 es-toolkit: 1.44.0 @@ -17389,7 +17369,7 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-is: 19.2.4 - react-redux: 9.2.0(@types/react@19.2.10)(react@19.2.4)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 use-sync-external-store: 1.6.0(react@19.2.4) @@ -17404,10 +17384,10 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.15.0): + recma-jsx@1.0.1(acorn@8.16.0): dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -17500,7 +17480,7 @@ snapshots: remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -17527,9 +17507,9 @@ snapshots: reselect@5.1.1: {} - resend@6.9.1(@react-email/render@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): + resend@6.9.2(@react-email/render@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): dependencies: - mailparser: 3.9.1 + postal-mime: 2.7.3 svix: 1.84.1 optionalDependencies: '@react-email/render': 2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -17555,41 +17535,41 @@ snapshots: retry@0.12.0: {} - rettime@0.7.0: {} + rettime@0.10.1: {} reusify@1.1.0: {} rfdc@1.4.1: {} - rollup@4.57.1: + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -17645,7 +17625,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.3: {} + semver@7.7.4: {} set-cookie-parser@2.7.2: {} @@ -17677,7 +17657,7 @@ snapshots: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -17790,7 +17770,7 @@ snapshots: sitemap@9.0.0: dependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 '@types/sax': 1.2.7 arg: 5.0.2 sax: 1.4.4 @@ -17847,7 +17827,7 @@ snapshots: ip-address: 10.1.0 smart-buffer: 4.2.0 - sonic-boom@4.2.0: + sonic-boom@4.2.1: dependencies: atomic-sleep: 1.0.0 @@ -17925,7 +17905,7 @@ snapshots: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -17949,7 +17929,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 string.prototype.trim@1.2.10: @@ -18002,9 +17982,9 @@ snapshots: strip-json-comments@5.0.3: {} - stripe@20.3.0(@types/node@25.1.0): + stripe@20.3.1(@types/node@25.3.0): optionalDependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 strnum@2.1.2: {} @@ -18022,12 +18002,12 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - styled-jsx@5.1.6(@babel/core@7.28.6)(react@19.2.4): + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4): dependencies: client-only: 0.0.1 react: 19.2.4 optionalDependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 sucrase@3.35.1: dependencies: @@ -18084,23 +18064,23 @@ snapshots: tagged-tag@1.0.0: {} - tailwind-merge@3.4.0: {} + tailwind-merge@3.5.0: {} tailwind-scrollbar-hide@4.0.0(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): dependencies: tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) - tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): + tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): dependencies: tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: - tailwind-merge: 3.4.0 + tailwind-merge: 3.5.0 - tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18): + tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1): dependencies: - tailwindcss: 4.1.18 + tailwindcss: 4.2.1 optionalDependencies: - tailwind-merge: 3.4.0 + tailwind-merge: 3.5.0 tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): dependencies: @@ -18134,7 +18114,7 @@ snapshots: - tsx - yaml - tailwindcss@4.1.18: {} + tailwindcss@4.2.1: {} tar-fs@2.1.4: dependencies: @@ -18148,7 +18128,7 @@ snapshots: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.5.3 + bare-fs: 4.5.4 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -18165,17 +18145,25 @@ snapshots: tar-stream@3.1.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - testcontainers@11.11.0: + teex@1.0.1: + dependencies: + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + testcontainers@11.12.0: dependencies: '@balena/dockerignore': 1.0.2 - '@types/dockerode': 3.3.47 + '@types/dockerode': 4.0.1 archiver: 7.0.1 async-lock: 1.4.1 byline: 5.0.0 @@ -18184,20 +18172,20 @@ snapshots: dockerode: 4.0.9 get-port: 7.1.0 proper-lockfile: 4.1.2 - properties-reader: 2.3.0 + properties-reader: 3.0.1 ssh-remote-port-forward: 1.0.4 tar-fs: 3.1.1 tmp: 0.2.5 - undici: 7.19.2 + undici: 7.22.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - supports-color - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 transitivePeerDependencies: - react-native-b4a @@ -18228,13 +18216,11 @@ snapshots: tinyrainbow@3.0.3: {} - tlds@1.261.0: {} - - tldts-core@7.0.19: {} + tldts-core@7.0.23: {} - tldts@7.0.19: + tldts@7.0.23: dependencies: - tldts-core: 7.0.19 + tldts-core: 7.0.23 tmp@0.2.5: {} @@ -18254,7 +18240,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.19 + tldts: 7.0.23 tr46@0.0.3: {} @@ -18288,27 +18274,27 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@swc/core@1.15.11)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.1(@swc/core@1.15.13)(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: - bundle-require: 5.1.0(esbuild@0.27.2) + bundle-require: 5.1.0(esbuild@0.27.3) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3 - esbuild: 0.27.2 + esbuild: 0.27.3 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) resolve-from: 5.0.0 - rollup: 4.57.1 + rollup: 4.59.0 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.15.11 + '@swc/core': 1.15.13 postcss: 8.5.6 typescript: 5.9.3 transitivePeerDependencies: @@ -18319,8 +18305,8 @@ snapshots: tsx@4.21.0: dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.1 + esbuild: 0.27.3 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 @@ -18355,7 +18341,7 @@ snapshots: tweetnacl@0.14.5: {} - type-fest@5.4.3: + type-fest@5.4.4: dependencies: tagged-tag: 1.0.0 @@ -18394,20 +18380,20 @@ snapshots: typed-query-selector@2.12.0: {} - typedoc-plugin-coverage@4.0.2(typedoc@0.28.16(typescript@5.9.3)): + typedoc-plugin-coverage@4.0.2(typedoc@0.28.17(typescript@5.9.3)): dependencies: - typedoc: 0.28.16(typescript@5.9.3) + typedoc: 0.28.17(typescript@5.9.3) - typedoc-plugin-markdown@4.9.0(typedoc@0.28.16(typescript@5.9.3)): + typedoc-plugin-markdown@4.10.0(typedoc@0.28.17(typescript@5.9.3)): dependencies: - typedoc: 0.28.16(typescript@5.9.3) + typedoc: 0.28.17(typescript@5.9.3) - typedoc@0.28.16(typescript@5.9.3): + typedoc@0.28.17(typescript@5.9.3): dependencies: '@gerrit0/mini-shiki': 3.22.0 lunr: 2.3.9 - markdown-it: 14.1.0 - minimatch: 9.0.5 + markdown-it: 14.1.1 + minimatch: 9.0.6 typescript: 5.9.3 yaml: 2.8.2 @@ -18434,7 +18420,9 @@ snapshots: undici-types@7.16.0: {} - undici@7.19.2: {} + undici-types@7.18.2: {} + + undici@7.22.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -18486,10 +18474,10 @@ snapshots: universalify@2.0.1: {} - unplugin-swc@1.5.9(@swc/core@1.15.11)(rollup@4.57.1): + unplugin-swc@1.5.9(@swc/core@1.15.13)(rollup@4.59.0): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@swc/core': 1.15.11 + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@swc/core': 1.15.13 load-tsconfig: 0.2.5 unplugin: 2.3.11 transitivePeerDependencies: @@ -18498,7 +18486,7 @@ snapshots: unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 + acorn: 8.16.0 picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 @@ -18512,20 +18500,20 @@ snapshots: urijs@1.19.11: {} - use-callback-ref@1.3.3(@types/react@19.2.10)(react@19.2.4): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - use-sidecar@1.1.3(@types/react@19.2.10)(react@19.2.4): + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): dependencies: detect-node-es: 1.1.0 react: 19.2.4 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 use-sync-external-store@1.6.0(react@19.2.4): dependencies: @@ -18547,9 +18535,9 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: @@ -18583,35 +18571,35 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-tsconfig-paths@6.0.5(typescript@5.9.3)(vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.27.2 + esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.1 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.1.0 + '@types/node': 25.3.0 fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.1.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@27.4.0)(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(msw@2.12.7(@types/node@25.1.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -18628,11 +18616,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.1.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.1.0 + '@types/node': 25.3.0 '@vitest/ui': 4.0.18(vitest@4.0.18) jsdom: 27.4.0 transitivePeerDependencies: @@ -18654,7 +18642,7 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - webdriver-bidi-protocol@0.4.0: {} + webdriver-bidi-protocol@0.4.1: {} webidl-conversions@3.0.1: {} @@ -18663,8 +18651,8 @@ snapshots: webpack-bundle-analyzer@4.10.1: dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.15.0 - acorn-walk: 8.3.4 + acorn: 8.16.0 + acorn-walk: 8.3.5 commander: 7.2.0 debounce: 1.2.1 escape-string-regexp: 4.0.0 From 1fd8e5cc29b0d62191793d56f945e10c2ae15cd7 Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Tue, 24 Feb 2026 00:31:57 -0300 Subject: [PATCH 24/27] refactor(subscription-form): replace upgrade button with form submission for subscription upgrade --- .../_components/subscription-form.tsx | 40 +++++-------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx index a9de5efb..39bc6380 100644 --- a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx @@ -36,27 +36,6 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { const isPro = user.subscriptionType === 'PRO' const isFree = user.subscriptionType === 'MEMBER' - const handleUpgrade = async () => { - try { - const locale = language.split('-')[0] ?? 'en' - const response = await fetch( - `/api/checkout_sessions?locale=${locale}&email=${user.email}&username=${user.username}&redirect=checkout`, - { method: 'POST' } - ) - - if (response.redirected) { - window.location.href = response.url - } else { - const data = await response.json() - if (data.url) { - window.location.href = data.url - } - } - } catch { - toast.error('Failed to start checkout') - } - } - return (
@@ -116,10 +95,7 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { )} > {!isPro && dictionary.home_prices.pro_plan.recommended && ( - + {dictionary.home_prices.pro_plan.recommended} )} @@ -191,10 +167,16 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) { )}
) : ( - +
+ +
)}
From 96687b4e52503db04494a5994df75b1283adcb76 Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Tue, 24 Feb 2026 11:29:16 -0300 Subject: [PATCH 25/27] feat(i18n): add "current_plan" key to multiple language dictionaries for subscription plans --- apps/web/public/dictionaries/de-DE.json | 1 + apps/web/public/dictionaries/en-US.json | 1 + apps/web/public/dictionaries/es-ES.json | 1 + apps/web/public/dictionaries/fr-FR.json | 1 + apps/web/public/dictionaries/it-IT.json | 1 + apps/web/public/dictionaries/ja-JP.json | 1 + apps/web/public/dictionaries/pt-BR.json | 1 + 7 files changed, 7 insertions(+) diff --git a/apps/web/public/dictionaries/de-DE.json b/apps/web/public/dictionaries/de-DE.json index eee33f13..2ca30d1b 100644 --- a/apps/web/public/dictionaries/de-DE.json +++ b/apps/web/public/dictionaries/de-DE.json @@ -705,6 +705,7 @@ "explore_features": "Entdecken Sie kostenlose Funktionen oder heben Sie Ihre Erfahrung mit Pro auf ein neues Niveau.", "already_in_free": "Sie sind bereits im Free-Plan", "already_in_pro": "Sie sind bereits im PRO-Plan", + "current_plan": "Aktueller Tarif", "biography": "Biografie", "biography_placeholder": "Schreiben Sie eine kurze Beschreibung über sich.", "member_since": "Mitglied seit", diff --git a/apps/web/public/dictionaries/en-US.json b/apps/web/public/dictionaries/en-US.json index 60fa3f42..37ff780a 100644 --- a/apps/web/public/dictionaries/en-US.json +++ b/apps/web/public/dictionaries/en-US.json @@ -706,6 +706,7 @@ "explore_features": "Explore free features or take your experience to a new level with Pro.", "already_in_free": "You are already on the Free plan", "already_in_pro": "You are already on the PRO plan", + "current_plan": "Current plan", "biography": "Biography", "biography_placeholder": "Write a brief description about yourself.", "member_since": "Member since", diff --git a/apps/web/public/dictionaries/es-ES.json b/apps/web/public/dictionaries/es-ES.json index 642c26d3..7787066b 100644 --- a/apps/web/public/dictionaries/es-ES.json +++ b/apps/web/public/dictionaries/es-ES.json @@ -719,6 +719,7 @@ "cancel_subscription": "Cancelar suscripción", "cancel_subscription_confirm_title": "¿Confirmar la cancelación?", "keep_subscription": "Mantener la suscripción", + "current_plan": "Plan actual", "cancel_subscription_confirm_description": "Elige cuándo cancelar. Puedes mantener PRO hasta el final del periodo de facturación.", "cancel_now": "Cancelar ahora", "cancel_subscription_success": "Suscripción cancelada", diff --git a/apps/web/public/dictionaries/fr-FR.json b/apps/web/public/dictionaries/fr-FR.json index 0492dd82..3965c433 100644 --- a/apps/web/public/dictionaries/fr-FR.json +++ b/apps/web/public/dictionaries/fr-FR.json @@ -711,6 +711,7 @@ "explore_features": "Découvrez des fonctionnalités gratuites ou passez à un niveau supérieur avec Pro.", "already_in_free": "Vous êtes déjà sur le plan Free", "already_in_pro": "Vous êtes déjà sur le plan PRO", + "current_plan": "Forfait actuel", "biography": "Biographie", "biography_placeholder": "Écrivez une brève description sur vous.", "member_since": "Membre depuis", diff --git a/apps/web/public/dictionaries/it-IT.json b/apps/web/public/dictionaries/it-IT.json index 19d9f1bb..50da8438 100644 --- a/apps/web/public/dictionaries/it-IT.json +++ b/apps/web/public/dictionaries/it-IT.json @@ -719,6 +719,7 @@ "cancel_subscription": "Annulla abbonamento", "cancel_subscription_confirm_title": "Confermare l'annullamento?", "keep_subscription": "Mantenere l'abbonamento", + "current_plan": "Piano attuale", "cancel_subscription_confirm_description": "Scegli quando annullare. Puoi mantenere PRO fino alla fine del periodo di fatturazione.", "cancel_now": "Annulla ora", "cancel_subscription_success": "Abbonamento annullato", diff --git a/apps/web/public/dictionaries/ja-JP.json b/apps/web/public/dictionaries/ja-JP.json index 06ab3c0f..31cc27ae 100644 --- a/apps/web/public/dictionaries/ja-JP.json +++ b/apps/web/public/dictionaries/ja-JP.json @@ -711,6 +711,7 @@ "explore_features": "無料機能を試すか、Proで体験を新しいレベルに引き上げましょう。", "already_in_free": "無料プランをご利用中です", "already_in_pro": "PROプランをご利用中です", + "current_plan": "現在のプラン", "biography": "バイオグラフィー", "biography_placeholder": "簡単な自己紹介を書いてください。", "member_since": "会員登録日", diff --git a/apps/web/public/dictionaries/pt-BR.json b/apps/web/public/dictionaries/pt-BR.json index d74add13..94a7a710 100644 --- a/apps/web/public/dictionaries/pt-BR.json +++ b/apps/web/public/dictionaries/pt-BR.json @@ -709,6 +709,7 @@ "explore_features": "Explore funcionalidades gratuitas ou leve sua experiência a um novo nível com o Pro.", "already_in_free": "Você já está no plano Free", "already_in_pro": "Você já está no plano PRO", + "current_plan": "Plano atual", "biography": "Biografia", "biography_placeholder": "Escreva uma breve descrição sobre você.", "member_since": "Membro desde", From cecfb8af40a35274ff248485034aca50801b6cb6 Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Tue, 24 Feb 2026 11:29:23 -0300 Subject: [PATCH 26/27] refactor(subscription-form): simplify button rendering for free plan and add badge for recommended pro plan --- .../_components/subscription-form.tsx | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx index 39bc6380..37891b06 100644 --- a/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/subscription-form.tsx @@ -77,15 +77,11 @@ export function SubscriptionForm({ user }: SubscriptionFormProps) {
- + {isFree && ( + + )}
)} + {isPro && dictionary.home_prices.pro_plan.recommended && ( + + {dictionary.current_plan} + + )} +

From 994bd35246467ffd0e0512f1288dbe8b3432f3cf Mon Sep 17 00:00:00 2001 From: LuizGarbini Date: Tue, 24 Feb 2026 11:29:27 -0300 Subject: [PATCH 27/27] refactor(user-dialog): improve layout and styling of tab navigation for user settings --- .../[username]/_components/user-dialog.tsx | 73 ++++++++++--------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx b/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx index 676887af..8188b4f9 100644 --- a/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx +++ b/apps/web/src/app/[lang]/[username]/_components/user-dialog.tsx @@ -65,40 +65,45 @@ export function UserDialog({ user, socialLinks, children }: UserDialogProps) { onValueChange={setTab} className="flex h-full min-h-0 w-full flex-col overflow-hidden sm:flex-row" > -