diff --git a/components/account/home/ResumeSubscriptionDialog.vue b/components/account/home/ResumeSubscriptionDialog.vue new file mode 100644 index 00000000..41ba0730 --- /dev/null +++ b/components/account/home/ResumeSubscriptionDialog.vue @@ -0,0 +1,131 @@ + + + diff --git a/components/account/home/SubscriptionTable.vue b/components/account/home/SubscriptionTable.vue index a4373db8..0b227b8c 100644 --- a/components/account/home/SubscriptionTable.vue +++ b/components/account/home/SubscriptionTable.vue @@ -11,8 +11,25 @@ import type { } from '@rotki/ui-library'; import type { Subscription } from '~/types'; +const pagination = ref(); +const sort = ref[]>([]); +const selectedSubscription = ref(); +const showCancelDialog = ref(false); +const cancelling = ref(false); +const resuming = ref(false); +const resumingSubscription = ref(); + const { t } = useI18n(); +const store = useMainStore(); +const { subscriptions } = storeToRefs(store); + +const { cancelUserSubscription, resumeUserSubscription } = useSubscription(); +const { pause, resume, isActive } = useIntervalFn( + async () => await store.getAccount(), + 60000, +); + const headers: DataTableColumn[] = [ { label: t('common.plan'), @@ -47,15 +64,6 @@ const headers: DataTableColumn[] = [ }, ]; -const store = useMainStore(); -const { subscriptions } = storeToRefs(store); - -const pagination = ref(); -const sort = ref[]>([]); -const selectedSubscription = ref(); -const showCancelDialog = ref(false); -const cancelling = ref(false); - const pending = computed(() => get(subscriptions).filter(sub => sub.pending)); const renewableSubscriptions = computed(() => @@ -101,27 +109,18 @@ const renewLink = computed<{ path: string; query: Record }>(() = } return link; -}, -); - -const { pause, resume, isActive } = useIntervalFn( - async () => await store.getAccount(), - 60000, -); - -watch(pending, (pending) => { - if (pending.length === 0) - pause(); - else if (!get(isActive)) - resume(); }); -onUnmounted(() => pause()); - function isPending(sub: Subscription) { return sub.status === 'Pending'; } +async function resumeSubscription(sub: Subscription): Promise { + set(resuming, true); + await resumeUserSubscription(sub.identifier); + set(resuming, false); +} + function hasAction(sub: Subscription, action: 'renew' | 'cancel') { if (action === 'cancel') return sub.status !== 'Pending' && sub.actions.includes('cancel'); @@ -132,7 +131,10 @@ function hasAction(sub: Subscription, action: 'renew' | 'cancel') { } function displayActions(sub: Subscription) { - return hasAction(sub, 'renew') || hasAction(sub, 'cancel') || isPending(sub); + return hasAction(sub, 'renew') + || hasAction(sub, 'cancel') + || isPending(sub) + || sub.isSoftCanceled; } function getChipStatusColor(status: string): ContextColorsType | undefined { @@ -155,10 +157,19 @@ function confirmCancel(sub: Subscription) { async function cancelSubscription(sub: Subscription) { set(showCancelDialog, false); set(cancelling, true); - await store.cancelSubscription(sub); + await cancelUserSubscription(sub); set(cancelling, false); set(selectedSubscription, undefined); } + +watch(pending, (pending) => { + if (pending.length === 0) + pause(); + else if (!get(isActive)) + resume(); +}); + +onUnmounted(() => pause()); diff --git a/composables/use-subscription.ts b/composables/use-subscription.ts new file mode 100644 index 00000000..ae7ce86b --- /dev/null +++ b/composables/use-subscription.ts @@ -0,0 +1,72 @@ +import { get, set } from '@vueuse/core'; +import { FetchError } from 'ofetch'; +import { useMainStore } from '~/store'; +import { ActionResultResponse, type Subscription } from '~/types'; +import { fetchWithCsrf } from '~/utils/api'; +import { assert } from '~/utils/assert'; + +interface UseSubscriptionReturn { + cancelUserSubscription: (subscription: Subscription) => Promise; + resumeUserSubscription: (identifier: string) => Promise; +} + +export function useSubscription(): UseSubscriptionReturn { + const store = useMainStore(); + const { account, cancellationError, resumeError } = storeToRefs(store); + const { getAccount } = store; + + const resumeUserSubscription = async (identifier: string) => { + const acc = get(account); + assert(acc); + + try { + const response = await fetchWithCsrf( + `/webapi/subscription/${identifier}/resume/`, + { + method: 'PATCH', + }, + ); + const data = ActionResultResponse.parse(response); + if (data.result) + await getAccount(); + } + catch (error: any) { + let message = error.message; + if (error instanceof FetchError && error.status === 404) + message = ActionResultResponse.parse(error.data).message; + + logger.error(error); + set(resumeError, message); + } + }; + + const cancelUserSubscription = async (subscription: Subscription): Promise => { + const acc = get(account); + assert(acc); + + try { + const response = await fetchWithCsrf( + `/webapi/subscription/${subscription.identifier}/`, + { + method: 'DELETE', + }, + ); + const data = ActionResultResponse.parse(response); + if (data.result) + await getAccount(); + } + catch (error: any) { + let message = error.message; + if (error instanceof FetchError && error.status === 404) + message = ActionResultResponse.parse(error.data).message; + + logger.error(error); + set(cancellationError, message); + } + }; + + return { + cancelUserSubscription, + resumeUserSubscription, + }; +} diff --git a/locales/en.json b/locales/en.json index cb2eb7cd..e69c8376 100644 --- a/locales/en.json +++ b/locales/en.json @@ -221,7 +221,24 @@ }, "no_subscriptions_found": "No subscriptions found", "payment_detail": "Payment Details", - "title": "Subscription History" + "title": "Subscription History", + "resume": { + "title": "Resume your rotki subscription", + "actions": { + "yes": "Yes, resume my subscription", + "no": "No, don't resume" + }, + "description": "By confirming, your subscription's billing cycle will resume, and you will be charged according to your selected plan starting from the next billing date. Are you sure you want to resume your subscription?", + "details": { + "plan_name": "Subscription Plan: {plan}", + "billing_cycle": "Billing Cycle: {duration}", + "billing_amount": "Billing Amount: {amount}", + "amount_in_eur": "{amount} €", + "duration_in_months": "every {duration} month|every {duration} months", + "next_billing_date": "Next billing date: {date}" + } + }, + "resume_hint": "Resume the active billing of your subscription from {date}" }, "tabs": { "subscription": "Subscription", @@ -248,6 +265,7 @@ "regenerate": "Regenerate", "renew": "Renew", "reset": "Reset", + "resume": "Resume", "start_now_for_free": "Start now for free", "submit": "Submit", "update": "Update", diff --git a/nuxt.config.ts b/nuxt.config.ts index 2b485f78..ed5047d9 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -117,7 +117,7 @@ export default defineNuxtConfig({ css: [], devtools: { - enabled: !!process.env.CI || !!process.env.TEST, + enabled: process.env.NODE_ENV === 'development' && !(!!process.env.CI || !!process.env.TEST), }, i18n: { diff --git a/package.json b/package.json index 4b54cd62..86669a76 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "rotki.com", "version": "1.23.0", "private": true, - "packageManager": "pnpm@9.12.0", + "packageManager": "pnpm@9.12.1", "type": "module", "scripts": { "dev": "nuxi dev", @@ -34,10 +34,10 @@ "@pinia/nuxt": "0.5.5", "@vuelidate/core": "2.0.3", "@vuelidate/validators": "2.0.4", - "@vueuse/core": "10.11.1", - "@vueuse/math": "10.11.1", - "@vueuse/nuxt": "10.11.1", - "@vueuse/shared": "10.11.1", + "@vueuse/core": "11.1.0", + "@vueuse/math": "11.1.0", + "@vueuse/nuxt": "11.1.0", + "@vueuse/shared": "11.1.0", "braintree-web": "3.109.0", "ethers": "6.13.3", "pinia": "2.2.4", @@ -54,9 +54,9 @@ "@nuxt/content": "2.13.2", "@nuxt/devtools": "1.5.2", "@nuxt/image": "1.8.1", - "@nuxt/test-utils": "3.14.2", + "@nuxt/test-utils": "3.14.3", "@nuxtjs/i18n": "8.5.5", - "@nuxtjs/sitemap": "5.3.5", + "@nuxtjs/sitemap": "6.1.1", "@rotki/eslint-config": "3.2.1", "@rotki/eslint-plugin": "0.5.0", "@rotki/ui-library": "1.3.0", @@ -67,9 +67,9 @@ "@vue/test-utils": "2.4.6", "autoprefixer": "10.4.20", "bumpp": "9.6.1", - "eslint": "9.11.1", + "eslint": "9.12.0", "eslint-plugin-nuxt": "4.0.0", - "happy-dom": "14.12.3", + "happy-dom": "15.7.4", "husky": "9.1.6", "lint-staged": "15.2.10", "msw": "2.4.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2da64ea8..25f52181 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,17 +27,17 @@ importers: specifier: 2.0.4 version: 2.0.4(vue@3.5.11(typescript@5.6.2)) '@vueuse/core': - specifier: 10.11.1 - version: 10.11.1(vue@3.5.11(typescript@5.6.2)) + specifier: 11.1.0 + version: 11.1.0(vue@3.5.11(typescript@5.6.2)) '@vueuse/math': - specifier: 10.11.1 - version: 10.11.1(vue@3.5.11(typescript@5.6.2)) + specifier: 11.1.0 + version: 11.1.0(vue@3.5.11(typescript@5.6.2)) '@vueuse/nuxt': - specifier: 10.11.1 - version: 10.11.1(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + specifier: 11.1.0 + version: 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@vueuse/shared': - specifier: 10.11.1 - version: 10.11.1(vue@3.5.11(typescript@5.6.2)) + specifier: 11.1.0 + version: 11.1.0(vue@3.5.11(typescript@5.6.2)) braintree-web: specifier: 3.109.0 version: 3.109.0 @@ -78,7 +78,7 @@ importers: version: 5.1.0 '@nuxt/content': specifier: 2.13.2 - version: 2.13.2(ioredis@5.4.1)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + version: 2.13.2(ioredis@5.4.1)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@nuxt/devtools': specifier: 1.5.2 version: 1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) @@ -86,23 +86,23 @@ importers: specifier: 1.8.1 version: 1.8.1(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@nuxt/test-utils': - specifier: 3.14.2 - version: 3.14.2(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@14.12.3)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + specifier: 3.14.3 + version: 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@nuxtjs/i18n': specifier: 8.5.5 version: 8.5.5(magicast@0.3.5)(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@nuxtjs/sitemap': - specifier: 5.3.5 - version: 5.3.5(h3@1.13.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + specifier: 6.1.1 + version: 6.1.1(h3@1.13.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@rotki/eslint-config': specifier: 3.2.1 - version: 3.2.1(@rotki/eslint-plugin@0.5.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(@types/eslint@9.6.1)(@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(@vue/compiler-sfc@3.5.11)(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1)) + version: 3.2.1(@rotki/eslint-plugin@0.5.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(@types/eslint@9.6.1)(@typescript-eslint/utils@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(@vue/compiler-sfc@3.5.11)(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1)) '@rotki/eslint-plugin': specifier: 0.5.0 - version: 0.5.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + version: 0.5.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) '@rotki/ui-library': specifier: 1.3.0 - version: 1.3.0(@vueuse/core@10.11.1(vue@3.5.11(typescript@5.6.2)))(@vueuse/shared@10.11.1(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) + version: 1.3.0(@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.2)))(@vueuse/shared@11.1.0(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) '@types/braintree-web': specifier: 3.96.15 version: 3.96.15 @@ -114,7 +114,7 @@ importers: version: 1.5.5 '@vitest/coverage-v8': specifier: 2.1.2 - version: 2.1.2(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1)) + version: 2.1.2(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1)) '@vue/test-utils': specifier: 2.4.6 version: 2.4.6 @@ -125,14 +125,14 @@ importers: specifier: 9.6.1 version: 9.6.1(magicast@0.3.5) eslint: - specifier: 9.11.1 - version: 9.11.1(jiti@2.1.2) + specifier: 9.12.0 + version: 9.12.0(jiti@2.3.2) eslint-plugin-nuxt: specifier: 4.0.0 - version: 4.0.0(eslint@9.11.1(jiti@2.1.2)) + version: 4.0.0(eslint@9.12.0(jiti@2.3.2)) happy-dom: - specifier: 14.12.3 - version: 14.12.3 + specifier: 15.7.4 + version: 15.7.4 husky: specifier: 9.1.6 version: 9.1.6 @@ -144,7 +144,7 @@ importers: version: 2.4.9(typescript@5.6.2) nuxt: specifier: 3.13.2 - version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3) + version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3) postcss: specifier: 8.4.47 version: 8.4.47 @@ -195,10 +195,10 @@ importers: version: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1) vitest: specifier: 2.1.2 - version: 2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) + version: 2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) vitest-environment-nuxt: specifier: 1.0.1 - version: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@14.12.3)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + version: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) vue-tsc: specifier: 2.1.6 version: 2.1.6(typescript@5.6.2) @@ -1042,8 +1042,8 @@ packages: resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.11.1': - resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==} + '@eslint/js@9.12.0': + resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/markdown@6.1.1': @@ -1069,12 +1069,20 @@ packages: '@fontsource/roboto@5.1.0': resolution: {integrity: sha512-cFRRC1s6RqPygeZ8Uw/acwVHqih8Czjt6Q0MwoUoDe9U3m4dH1HmNDRBZyqlMSFwgNAUKgFImncKdmDHyKpwdg==} + '@humanfs/core@0.19.0': + resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.5': + resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + engines: {node: '>=18.18.0'} + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} '@inquirer/confirm@3.2.0': @@ -1279,8 +1287,8 @@ packages: resolution: {integrity: sha512-h4YJ1d32cU7tDKjjhjtIIEck4WF/w3DTQBT348E9Pz85YLttnLqktLM0Ez9Xc2LzCeUgBDQv1el7Ob/zT3KUqg==} hasBin: true - '@nuxt/test-utils@3.14.2': - resolution: {integrity: sha512-n5soEpHom9aL9sMwrBiD3xGR+oXbx+O8zL2NF9aelWOTSzPPNN+Qo3cBEECMc6NYQi1a4LbCKkPjQfbtPvaqkg==} + '@nuxt/test-utils@3.14.3': + resolution: {integrity: sha512-5SoyaR9bQG7xcyj6kSnzFVWvpAdiKSruRkq3KVDKEAbxwHhtyz2Ijqxf8iGE3W9dAM0F+omIvLmjen3ITgd3rA==} engines: {node: '>=18.20.4'} peerDependencies: '@cucumber/cucumber': ^10.3.1 || ^11.0.0 @@ -1336,8 +1344,8 @@ packages: '@nuxtjs/robots@4.1.7': resolution: {integrity: sha512-1rz2oyBNmpfIzqNG9LfGft+H8Wpp1BMmPyNhkm7BuG/jUXTBFaCh6HDeK6Otx2y53Z9JtCDhiIs/JHj/L4WLPw==} - '@nuxtjs/sitemap@5.3.5': - resolution: {integrity: sha512-TfhEImgVHEZaI/vphZdoCaWM2TRBJqprHZPhIQwWYJz+dpQWkfY6z8UpjhmUh6npvbj5kNY9ncLenkw0cDJp9g==} + '@nuxtjs/sitemap@6.1.1': + resolution: {integrity: sha512-wjvaqLm+kecH7K22E9eKzxolfWlcBL3Nw1/UHJUz7UcLMfFNl8T28MMx7xeVKR5oNeFYCHJTWbqNJ+ZXjb727g==} engines: {node: '>=18.0.0'} '@nuxtjs/tailwindcss@6.11.4': @@ -2067,25 +2075,39 @@ packages: '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + '@vueuse/core@11.1.0': + resolution: {integrity: sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==} + '@vueuse/head@2.0.0': resolution: {integrity: sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA==} peerDependencies: vue: '>=2.7 || >=3' - '@vueuse/math@10.11.1': - resolution: {integrity: sha512-fkdaNEOn22Vjz/A3vNWO2+eysunlK74ODmJRosweKMEA07oi5WH/CYQ8oGxu2Fa641fhs4hXS7XxdALsGVYlpw==} + '@vueuse/math@11.1.0': + resolution: {integrity: sha512-pnjB9WBatF5RHHRbMo2P1w/e5m+r0QQJtGcA1cZGrg5yp1itzixLpMZHEmXVWelRTc0Dfn5uyn/sYmBimU1BoA==} '@vueuse/metadata@10.11.1': resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + '@vueuse/metadata@11.1.0': + resolution: {integrity: sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==} + '@vueuse/nuxt@10.11.1': resolution: {integrity: sha512-UiaYSIwOkmUVn8Gl1AqtLWYR12flO+8sEu9X0Y1fNjSR7EWy9jMuiCvOGqwtoeTsqfHrivl0d5HfMzr11GFnMA==} peerDependencies: nuxt: ^3.0.0 + '@vueuse/nuxt@11.1.0': + resolution: {integrity: sha512-ZPYigcqgPPe9vk9nBHLF8p0zshX8qvWV/ox1Y4GdV4k2flPiw7+2THNTpU2NZDBXSOXlhB2sao+paGCsvJm/Qw==} + peerDependencies: + nuxt: ^3.0.0 + '@vueuse/shared@10.11.1': resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + '@vueuse/shared@11.1.0': + resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==} + '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -2426,6 +2448,14 @@ packages: magicast: optional: true + c12@2.0.1: + resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -3383,8 +3413,8 @@ packages: resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.11.1: - resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==} + eslint@9.12.0: + resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3799,9 +3829,9 @@ packages: h3@1.13.0: resolution: {integrity: sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==} - happy-dom@14.12.3: - resolution: {integrity: sha512-vsYlEs3E9gLwA1Hp+w3qzu+RUDFf4VTT8cyKqVICoZ2k7WM++Qyd2LwzyTi5bqMJFiIC/vNpTDYuxdreENRK/g==} - engines: {node: '>=16.0.0'} + happy-dom@15.7.4: + resolution: {integrity: sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==} + engines: {node: '>=18.0.0'} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -4208,6 +4238,10 @@ packages: resolution: {integrity: sha512-cYNjJus5X9J4jLzTaI8rYoIq1k6YySiA1lK4wxSnOrBRXkbVyreZfhoboJhsUmwgU82lpPjj1IoU7Ggrau8r3g==} hasBin: true + jiti@2.3.2: + resolution: {integrity: sha512-9ZLDe7kYLCyWTAP6EIyg3B4ZuHy5W0gdy6y1rgrWrAOpTrUU+vKuKa1+OXB7MBkujyvm6a2b7i0ETHQDbgY98A==} + hasBin: true + js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} @@ -7629,15 +7663,15 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.4.0(eslint@9.11.1(jiti@2.1.2))': + '@eslint-community/eslint-plugin-eslint-comments@4.4.0(eslint@9.12.0(jiti@2.3.2))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) ignore: 5.3.2 - '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1(jiti@2.1.2))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@2.3.2))': dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.1': {} @@ -7672,7 +7706,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.11.1': {} + '@eslint/js@9.12.0': {} '@eslint/markdown@6.1.1': dependencies: @@ -7696,9 +7730,16 @@ snapshots: '@fontsource/roboto@5.1.0': {} + '@humanfs/core@0.19.0': {} + + '@humanfs/node@0.16.5': + dependencies: + '@humanfs/core': 0.19.0 + '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.3.1': {} '@inquirer/confirm@3.2.0': dependencies: @@ -7911,13 +7952,13 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nuxt/content@2.13.2(ioredis@5.4.1)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': + '@nuxt/content@2.13.2(ioredis@5.4.1)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@nuxtjs/mdc': 0.8.3(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) '@vueuse/head': 2.0.0(vue@3.5.11(typescript@5.6.2)) - '@vueuse/nuxt': 10.11.1(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + '@vueuse/nuxt': 10.11.1(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) consola: 3.2.3 defu: 6.1.4 destr: 2.0.3 @@ -8145,11 +8186,11 @@ snapshots: - supports-color - webpack-sources - '@nuxt/test-utils@3.14.2(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@14.12.3)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': + '@nuxt/test-utils@3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3) - c12: 1.11.2(magicast@0.3.5) + c12: 2.0.1(magicast@0.3.5) consola: 3.2.3 defu: 6.1.4 destr: 2.0.3 @@ -8172,20 +8213,20 @@ snapshots: unenv: 1.10.0 unplugin: 1.14.1(webpack-sources@3.2.3) vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1) - vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@14.12.3)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) vue: 3.5.11(typescript@5.6.2) vue-router: 4.4.5(vue@3.5.11(typescript@5.6.2)) optionalDependencies: '@vue/test-utils': 2.4.6 - happy-dom: 14.12.3 - vitest: 2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) + happy-dom: 15.7.4 + vitest: 2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) transitivePeerDependencies: - magicast - rollup - supports-color - webpack-sources - '@nuxt/vite-builder@3.13.2(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': + '@nuxt/vite-builder@3.13.2(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@rollup/plugin-replace': 5.0.7(rollup@4.24.0) @@ -8218,7 +8259,7 @@ snapshots: unplugin: 1.14.1(webpack-sources@3.2.3) vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1) vite-node: 2.1.2(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1) - vite-plugin-checker: 0.8.0(eslint@9.11.1(jiti@2.1.2))(optionator@0.9.4)(stylelint@16.9.0(typescript@5.6.2))(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2)) + vite-plugin-checker: 0.8.0(eslint@9.12.0(jiti@2.3.2))(optionator@0.9.4)(stylelint@16.9.0(typescript@5.6.2))(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2)) vue: 3.5.11(typescript@5.6.2) vue-bundle-renderer: 2.1.1 transitivePeerDependencies: @@ -8341,7 +8382,7 @@ snapshots: - vue - webpack-sources - '@nuxtjs/sitemap@5.3.5(h3@1.13.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': + '@nuxtjs/sitemap@6.1.1(h3@1.13.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: '@nuxt/devtools-kit': 1.5.2(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(webpack-sources@3.2.3) '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) @@ -8612,46 +8653,46 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true - '@rotki/eslint-config@3.2.1(@rotki/eslint-plugin@0.5.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(@types/eslint@9.6.1)(@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(@vue/compiler-sfc@3.5.11)(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))': + '@rotki/eslint-config@3.2.1(@rotki/eslint-plugin@0.5.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(@types/eslint@9.6.1)(@typescript-eslint/utils@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(@vue/compiler-sfc@3.5.11)(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))': dependencies: '@antfu/eslint-define-config': 1.23.0-2 '@antfu/install-pkg': 0.4.1 '@clack/prompts': 0.7.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.12.0(jiti@2.3.2)) '@eslint-types/typescript-eslint': 7.5.0 '@eslint-types/unicorn': 52.0.0 '@eslint/markdown': 6.1.1 - '@stylistic/eslint-plugin': 2.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - '@vitest/eslint-plugin': 1.1.4(@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1)) - eslint: 9.11.1(jiti@2.1.2) - eslint-config-flat-gitignore: 0.3.0(eslint@9.11.1(jiti@2.1.2)) - eslint-config-prettier: 9.1.0(eslint@9.11.1(jiti@2.1.2)) + '@stylistic/eslint-plugin': 2.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + '@vitest/eslint-plugin': 1.1.4(@typescript-eslint/utils@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1)) + eslint: 9.12.0(jiti@2.3.2) + eslint-config-flat-gitignore: 0.3.0(eslint@9.12.0(jiti@2.3.2)) + eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@2.3.2)) eslint-flat-config-utils: 0.4.0 - eslint-merge-processors: 0.1.0(eslint@9.11.1(jiti@2.1.2)) - eslint-plugin-antfu: 2.7.0(eslint@9.11.1(jiti@2.1.2)) - eslint-plugin-format: 0.1.2(eslint@9.11.1(jiti@2.1.2)) + eslint-merge-processors: 0.1.0(eslint@9.12.0(jiti@2.3.2)) + eslint-plugin-antfu: 2.7.0(eslint@9.12.0(jiti@2.3.2)) + eslint-plugin-format: 0.1.2(eslint@9.12.0(jiti@2.3.2)) eslint-plugin-html: 8.1.2 - eslint-plugin-import-x: 4.3.1(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - eslint-plugin-jsonc: 2.16.0(eslint@9.11.1(jiti@2.1.2)) - eslint-plugin-n: 17.10.3(eslint@9.11.1(jiti@2.1.2)) + eslint-plugin-import-x: 4.3.1(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + eslint-plugin-jsonc: 2.16.0(eslint@9.12.0(jiti@2.3.2)) + eslint-plugin-n: 17.10.3(eslint@9.12.0(jiti@2.3.2)) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 3.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)(vue-eslint-parser@9.4.3(eslint@9.11.1(jiti@2.1.2))) - eslint-plugin-prettier: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.11.1(jiti@2.1.2)))(eslint@9.11.1(jiti@2.1.2))(prettier@3.3.3) - eslint-plugin-unicorn: 55.0.0(eslint@9.11.1(jiti@2.1.2)) - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2)) - eslint-plugin-vue: 9.28.0(eslint@9.11.1(jiti@2.1.2)) - eslint-plugin-yml: 1.14.0(eslint@9.11.1(jiti@2.1.2)) - eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.11)(eslint@9.11.1(jiti@2.1.2)) + eslint-plugin-perfectionist: 3.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)(vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.2))) + eslint-plugin-prettier: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.2)))(eslint@9.12.0(jiti@2.3.2))(prettier@3.3.3) + eslint-plugin-unicorn: 55.0.0(eslint@9.12.0(jiti@2.3.2)) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2)) + eslint-plugin-vue: 9.28.0(eslint@9.12.0(jiti@2.3.2)) + eslint-plugin-yml: 1.14.0(eslint@9.12.0(jiti@2.3.2)) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.11)(eslint@9.12.0(jiti@2.3.2)) globals: 15.10.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 prettier: 3.3.3 - vue-eslint-parser: 9.4.3(eslint@9.11.1(jiti@2.1.2)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.2)) yaml-eslint-parser: 1.2.3 optionalDependencies: - '@rotki/eslint-plugin': 0.5.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@rotki/eslint-plugin': 0.5.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) transitivePeerDependencies: - '@types/eslint' - '@typescript-eslint/utils' @@ -8663,24 +8704,24 @@ snapshots: - typescript - vitest - '@rotki/eslint-plugin@0.5.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@rotki/eslint-plugin@0.5.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: - '@typescript-eslint/utils': 8.1.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/utils': 8.1.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) debug: 4.3.6 - eslint: 9.11.1(jiti@2.1.2) - eslint-compat-utils: 0.5.1(eslint@9.11.1(jiti@2.1.2)) + eslint: 9.12.0(jiti@2.3.2) + eslint-compat-utils: 0.5.1(eslint@9.12.0(jiti@2.3.2)) jsonc-eslint-parser: 2.4.0 scule: 1.3.0 - vue-eslint-parser: 9.4.3(eslint@9.11.1(jiti@2.1.2)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.2)) yaml-eslint-parser: 1.2.3 transitivePeerDependencies: - supports-color - typescript - '@rotki/ui-library@1.3.0(@vueuse/core@10.11.1(vue@3.5.11(typescript@5.6.2)))(@vueuse/shared@10.11.1(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))': + '@rotki/ui-library@1.3.0(@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.2)))(@vueuse/shared@11.1.0(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))': dependencies: - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.6.2)) + '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.2)) + '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.2)) vue: 3.5.11(typescript@5.6.2) '@shikijs/core@1.21.0': @@ -8720,10 +8761,10 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@stylistic/eslint-plugin@2.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@stylistic/eslint-plugin@2.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: - '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - eslint: 9.11.1(jiti@2.1.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + eslint: 9.12.0(jiti@2.3.2) eslint-visitor-keys: 4.1.0 espree: 10.2.0 estraverse: 5.3.0 @@ -8818,15 +8859,15 @@ snapshots: '@types/node': 22.7.4 optional: true - '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) '@typescript-eslint/scope-manager': 8.8.0 - '@typescript-eslint/type-utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) '@typescript-eslint/visitor-keys': 8.8.0 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -8836,14 +8877,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@typescript-eslint/parser@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: '@typescript-eslint/scope-manager': 8.8.0 '@typescript-eslint/types': 8.8.0 '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) '@typescript-eslint/visitor-keys': 8.8.0 debug: 4.3.7(supports-color@8.1.1) - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -8859,10 +8900,10 @@ snapshots: '@typescript-eslint/types': 8.8.0 '@typescript-eslint/visitor-keys': 8.8.0 - '@typescript-eslint/type-utils@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@typescript-eslint/type-utils@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) debug: 4.3.7(supports-color@8.1.1) ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: @@ -8905,24 +8946,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.1.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@typescript-eslint/utils@8.1.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) '@typescript-eslint/scope-manager': 8.1.0 '@typescript-eslint/types': 8.1.0 '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.6.2) - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)': + '@typescript-eslint/utils@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) '@typescript-eslint/scope-manager': 8.8.0 '@typescript-eslint/types': 8.8.0 '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) transitivePeerDependencies: - supports-color - typescript @@ -9000,7 +9041,7 @@ snapshots: vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1) vue: 3.5.11(typescript@5.6.2) - '@vitest/coverage-v8@2.1.2(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))': + '@vitest/coverage-v8@2.1.2(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9014,17 +9055,17 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) + vitest: 2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.4(@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))': + '@vitest/eslint-plugin@1.1.4(@typescript-eslint/utils@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))': dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) optionalDependencies: - '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) typescript: 5.6.2 - vitest: 2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) + vitest: 2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1) '@vitest/expect@2.1.2': dependencies: @@ -9247,6 +9288,16 @@ snapshots: - '@vue/composition-api' - vue + '@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.2))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.1.0 + '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + '@vueuse/head@2.0.0(vue@3.5.11(typescript@5.6.2))': dependencies: '@unhead/dom': 1.11.7 @@ -9255,9 +9306,9 @@ snapshots: '@unhead/vue': 1.11.7(vue@3.5.11(typescript@5.6.2)) vue: 3.5.11(typescript@5.6.2) - '@vueuse/math@10.11.1(vue@3.5.11(typescript@5.6.2))': + '@vueuse/math@11.1.0(vue@3.5.11(typescript@5.6.2))': dependencies: - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.6.2)) + '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.2)) vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' @@ -9265,13 +9316,31 @@ snapshots: '@vueuse/metadata@10.11.1': {} - '@vueuse/nuxt@10.11.1(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': + '@vueuse/metadata@11.1.0': {} + + '@vueuse/nuxt@10.11.1(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) '@vueuse/metadata': 10.11.1 local-pkg: 0.5.0 - nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3) + nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3) + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - magicast + - rollup + - supports-color + - vue + - webpack-sources + + '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3)': + dependencies: + '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) + '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.2)) + '@vueuse/metadata': 11.1.0 + local-pkg: 0.5.0 + nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3) vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) transitivePeerDependencies: - '@vue/composition-api' @@ -9288,6 +9357,13 @@ snapshots: - '@vue/composition-api' - vue + '@vueuse/shared@11.1.0(vue@3.5.11(typescript@5.6.2))': + dependencies: + vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -9703,6 +9779,23 @@ snapshots: optionalDependencies: magicast: 0.3.5 + c12@2.0.1(magicast@0.3.5): + dependencies: + chokidar: 4.0.1 + confbox: 0.1.7 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.3 + jiti: 2.3.2 + mlly: 1.7.1 + ohash: 1.1.4 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.2.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + cac@6.7.14: {} cache-content-type@1.0.1: @@ -10526,28 +10619,28 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.11.1(jiti@2.1.2)): + eslint-compat-utils@0.5.1(eslint@9.12.0(jiti@2.3.2)): dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) semver: 7.6.3 - eslint-config-flat-gitignore@0.3.0(eslint@9.11.1(jiti@2.1.2)): + eslint-config-flat-gitignore@0.3.0(eslint@9.12.0(jiti@2.3.2)): dependencies: '@eslint/compat': 1.1.1 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) find-up-simple: 1.0.0 - eslint-config-prettier@9.1.0(eslint@9.11.1(jiti@2.1.2)): + eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) eslint-flat-config-utils@0.4.0: dependencies: pathe: 1.1.2 - eslint-formatting-reporter@0.0.0(eslint@9.11.1(jiti@2.1.2)): + eslint-formatting-reporter@0.0.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) prettier-linter-helpers: 1.0.0 eslint-import-resolver-node@0.3.9: @@ -10558,31 +10651,31 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-merge-processors@0.1.0(eslint@9.11.1(jiti@2.1.2)): + eslint-merge-processors@0.1.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) eslint-parser-plain@0.1.0: {} - eslint-plugin-antfu@2.7.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-antfu@2.7.0(eslint@9.12.0(jiti@2.3.2)): dependencies: '@antfu/utils': 0.7.10 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) - eslint-plugin-es-x@7.8.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-es-x@7.8.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) '@eslint-community/regexpp': 4.11.1 - eslint: 9.11.1(jiti@2.1.2) - eslint-compat-utils: 0.5.1(eslint@9.11.1(jiti@2.1.2)) + eslint: 9.12.0(jiti@2.3.2) + eslint-compat-utils: 0.5.1(eslint@9.12.0(jiti@2.3.2)) - eslint-plugin-format@0.1.2(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-format@0.1.2(eslint@9.12.0(jiti@2.3.2)): dependencies: '@dprint/formatter': 0.3.0 '@dprint/markdown': 0.17.8 '@dprint/toml': 0.6.3 - eslint: 9.11.1(jiti@2.1.2) - eslint-formatting-reporter: 0.0.0(eslint@9.11.1(jiti@2.1.2)) + eslint: 9.12.0(jiti@2.3.2) + eslint-formatting-reporter: 0.0.0(eslint@9.12.0(jiti@2.3.2)) eslint-parser-plain: 0.1.0 prettier: 3.3.3 synckit: 0.9.1 @@ -10591,12 +10684,12 @@ snapshots: dependencies: htmlparser2: 9.1.0 - eslint-plugin-import-x@4.3.1(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2): + eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2): dependencies: - '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) debug: 4.3.7(supports-color@8.1.1) doctrine: 3.0.0 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.1 is-glob: 4.0.3 @@ -10608,23 +10701,23 @@ snapshots: - supports-color - typescript - eslint-plugin-jsonc@2.16.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-jsonc@2.16.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) - eslint: 9.11.1(jiti@2.1.2) - eslint-compat-utils: 0.5.1(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) + eslint: 9.12.0(jiti@2.3.2) + eslint-compat-utils: 0.5.1(eslint@9.12.0(jiti@2.3.2)) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 synckit: 0.6.2 - eslint-plugin-n@17.10.3(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-n@17.10.3(eslint@9.12.0(jiti@2.3.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) enhanced-resolve: 5.17.1 - eslint: 9.11.1(jiti@2.1.2) - eslint-plugin-es-x: 7.8.0(eslint@9.11.1(jiti@2.1.2)) + eslint: 9.12.0(jiti@2.3.2) + eslint-plugin-es-x: 7.8.0(eslint@9.12.0(jiti@2.3.2)) get-tsconfig: 4.8.1 globals: 15.10.0 ignore: 5.3.2 @@ -10633,46 +10726,46 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-nuxt@4.0.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-nuxt@4.0.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - eslint-plugin-vue: 9.28.0(eslint@9.11.1(jiti@2.1.2)) + eslint-plugin-vue: 9.28.0(eslint@9.12.0(jiti@2.3.2)) semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.11.1(jiti@2.1.2)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.2)) transitivePeerDependencies: - eslint - supports-color - eslint-plugin-perfectionist@3.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2)(vue-eslint-parser@9.4.3(eslint@9.11.1(jiti@2.1.2))): + eslint-plugin-perfectionist@3.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2)(vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.2))): dependencies: '@typescript-eslint/types': 8.8.0 - '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) - eslint: 9.11.1(jiti@2.1.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) + eslint: 9.12.0(jiti@2.3.2) minimatch: 9.0.5 natural-compare-lite: 1.4.0 optionalDependencies: - vue-eslint-parser: 9.4.3(eslint@9.11.1(jiti@2.1.2)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.2)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.11.1(jiti@2.1.2)))(eslint@9.11.1(jiti@2.1.2))(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.2)))(eslint@9.12.0(jiti@2.3.2))(prettier@3.3.3): dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.0(eslint@9.11.1(jiti@2.1.2)) + eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@2.3.2)) - eslint-plugin-unicorn@55.0.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-unicorn@55.0.0(eslint@9.12.0(jiti@2.3.2)): dependencies: '@babel/helper-validator-identifier': 7.25.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.38.1 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) esquery: 1.6.0 globals: 15.10.0 indent-string: 4.0.0 @@ -10685,41 +10778,41 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2)): dependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2))(eslint@9.11.1(jiti@2.1.2))(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.2))(typescript@5.6.2) - eslint-plugin-vue@9.28.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-vue@9.28.0(eslint@9.12.0(jiti@2.3.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) - eslint: 9.11.1(jiti@2.1.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) + eslint: 9.12.0(jiti@2.3.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.11.1(jiti@2.1.2)) + vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.14.0(eslint@9.11.1(jiti@2.1.2)): + eslint-plugin-yml@1.14.0(eslint@9.12.0(jiti@2.3.2)): dependencies: debug: 4.3.7(supports-color@8.1.1) - eslint: 9.11.1(jiti@2.1.2) - eslint-compat-utils: 0.5.1(eslint@9.11.1(jiti@2.1.2)) + eslint: 9.12.0(jiti@2.3.2) + eslint-compat-utils: 0.5.1(eslint@9.12.0(jiti@2.3.2)) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.3 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.11)(eslint@9.11.1(jiti@2.1.2)): + eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.11)(eslint@9.12.0(jiti@2.3.2)): dependencies: '@vue/compiler-sfc': 3.5.11 - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) eslint-scope@5.1.1: dependencies: @@ -10740,18 +10833,18 @@ snapshots: eslint-visitor-keys@4.1.0: {} - eslint@9.11.1(jiti@2.1.2): + eslint@9.12.0(jiti@2.3.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@2.1.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.2)) '@eslint-community/regexpp': 4.11.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.6.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.11.1 + '@eslint/js': 9.12.0 '@eslint/plugin-kit': 0.2.0 + '@humanfs/node': 0.16.5 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 - '@nodelib/fs.walk': 1.2.8 + '@humanwhocodes/retry': 0.3.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -10771,16 +10864,14 @@ snapshots: ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 text-table: 0.2.0 optionalDependencies: - jiti: 2.1.2 + jiti: 2.3.2 transitivePeerDependencies: - supports-color @@ -11254,7 +11345,7 @@ snapshots: uncrypto: 0.1.3 unenv: 1.10.0 - happy-dom@14.12.3: + happy-dom@15.7.4: dependencies: entities: 4.5.0 webidl-conversions: 7.0.0 @@ -11628,7 +11719,8 @@ snapshots: is-obj@2.0.0: {} - is-path-inside@3.0.3: {} + is-path-inside@3.0.3: + optional: true is-path-inside@4.0.0: {} @@ -11716,6 +11808,8 @@ snapshots: jiti@2.1.2: {} + jiti@2.3.2: {} + js-beautify@1.15.1: dependencies: config-chain: 1.1.13 @@ -12706,14 +12800,14 @@ snapshots: - vue - webpack-sources - nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3): + nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2))(webpack-sources@3.2.3): dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 1.5.2(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3) '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) - '@nuxt/vite-builder': 3.13.2(@types/node@22.7.4)(eslint@9.11.1(jiti@2.1.2))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + '@nuxt/vite-builder': 3.13.2(@types/node@22.7.4)(eslint@9.12.0(jiti@2.3.2))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(sass@1.79.4)(stylelint@16.9.0(typescript@5.6.2))(terser@5.34.1)(typescript@5.6.2)(vue-tsc@2.1.6(typescript@5.6.2))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) '@unhead/dom': 1.11.7 '@unhead/shared': 1.11.7 '@unhead/ssr': 1.11.7 @@ -14664,7 +14758,7 @@ snapshots: - supports-color - terser - vite-plugin-checker@0.8.0(eslint@9.11.1(jiti@2.1.2))(optionator@0.9.4)(stylelint@16.9.0(typescript@5.6.2))(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2)): + vite-plugin-checker@0.8.0(eslint@9.12.0(jiti@2.3.2))(optionator@0.9.4)(stylelint@16.9.0(typescript@5.6.2))(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vue-tsc@2.1.6(typescript@5.6.2)): dependencies: '@babel/code-frame': 7.25.7 ansi-escapes: 4.3.2 @@ -14682,7 +14776,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) optionator: 0.9.4 stylelint: 16.9.0(typescript@5.6.2) typescript: 5.6.2 @@ -14732,9 +14826,9 @@ snapshots: sass: 1.79.4 terser: 5.34.1 - vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@14.12.3)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3): + vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3): dependencies: - '@nuxt/test-utils': 3.14.2(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@14.12.3)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + '@nuxt/test-utils': 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))(vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' @@ -14756,7 +14850,7 @@ snapshots: - vue-router - webpack-sources - vitest@2.1.2(@types/node@22.7.4)(happy-dom@14.12.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1): + vitest@2.1.2(@types/node@22.7.4)(happy-dom@15.7.4)(msw@2.4.9(typescript@5.6.2))(sass@1.79.4)(terser@5.34.1): dependencies: '@vitest/expect': 2.1.2 '@vitest/mocker': 2.1.2(@vitest/spy@2.1.2)(msw@2.4.9(typescript@5.6.2))(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1)) @@ -14779,7 +14873,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.7.4 - happy-dom: 14.12.3 + happy-dom: 15.7.4 transitivePeerDependencies: - less - lightningcss @@ -14830,10 +14924,10 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.11.1(jiti@2.1.2)): + vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.2)): dependencies: debug: 4.3.7(supports-color@8.1.1) - eslint: 9.11.1(jiti@2.1.2) + eslint: 9.12.0(jiti@2.3.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 diff --git a/server/middleware/csp.ts b/server/middleware/csp.ts index cf89b5cb..f20360dd 100644 --- a/server/middleware/csp.ts +++ b/server/middleware/csp.ts @@ -22,6 +22,11 @@ const ContentPolicy = { type ContentPolicy = (typeof ContentPolicy)[keyof typeof ContentPolicy]; +function developOnlyRules(...rules: string[]): string[] { + // eslint-disable-next-line node/prefer-global/process + return process.env.NODE_ENV === 'development' ? rules : []; +} + const policy: Record = { [ContentPolicy.BASE_URI]: [SELF], [ContentPolicy.BLOCK_ALL_MIXED_CONTENT]: [], @@ -31,6 +36,7 @@ const policy: Record = { 'api.github.com', 'raw.githubusercontent.com/rotki/data/', 'raw.githubusercontent.com/rotki/rotki.com/', + ...developOnlyRules('ws://localhost:4000/ws'), ], [ContentPolicy.DEFAULT_SRC]: [SELF], [ContentPolicy.FONT_SRC]: [SELF, 'data:', 'fonts.gstatic.com'], @@ -41,6 +47,7 @@ const policy: Record = { 'recaptcha.net', 'https://www.google.com/recaptcha/', 'https://recaptcha.google.com', + ...developOnlyRules('http://localhost:3000/__nuxt_devtools__/client/'), ], [ContentPolicy.IMG_SRC]: [ SELF, diff --git a/store/index.ts b/store/index.ts index 4410cfea..6c49e9b4 100644 --- a/store/index.ts +++ b/store/index.ts @@ -45,6 +45,7 @@ export const useMainStore = defineStore('main', () => { const plans = ref(null); const authenticatedOnPlansLoad = ref(false); const cancellationError = ref(''); + const resumeError = ref(''); const logger = useLogger('store'); @@ -277,31 +278,6 @@ export const useMainStore = defineStore('main', () => { return userAccount.subscriptions; }); - const cancelSubscription = async (subscription: Subscription) => { - const acc = get(account); - assert(acc); - - try { - const response = await fetchWithCsrf( - `/webapi/subscription/${subscription.identifier}/`, - { - method: 'DELETE', - }, - ); - const data = ActionResultResponse.parse(response); - if (data.result) - await getAccount(); - } - catch (error: any) { - let message = error.message; - if (error instanceof FetchError && error.status === 404) - message = ActionResultResponse.parse(error.data).message; - - logger.error(error); - set(cancellationError, message); - } - }; - const getPlans = async (): Promise => { if (get(plans) && get(authenticated) === get(authenticatedOnPlansLoad)) { logger.debug('plans already loaded'); @@ -569,7 +545,7 @@ export const useMainStore = defineStore('main', () => { SESSION_TIMEOUT, ); - const logout = async (callApi = false): Promise => { + async function logout(callApi = false): Promise { stopCountdown(); if (callApi) { try { @@ -583,7 +559,7 @@ export const useMainStore = defineStore('main', () => { } set(authenticated, false); set(account, null); - }; + } const refreshSession = () => { if (!isClient) @@ -597,7 +573,6 @@ export const useMainStore = defineStore('main', () => { account, authenticated, cancellationError, - cancelSubscription, changePassword, checkout, checkPendingCryptoPayment, @@ -613,6 +588,7 @@ export const useMainStore = defineStore('main', () => { plans, refreshSession, resendVerificationCode, + resumeError, subscriptions, switchCryptoPlan, updateKeys, diff --git a/types/index.ts b/types/index.ts index 3975d411..f048abbf 100644 --- a/types/index.ts +++ b/types/index.ts @@ -37,8 +37,6 @@ export const Address = z.object({ vatId: z.string(), }); -export type Address = z.infer; - const SubStatus = z.enum([ 'Active', 'Cancelled', @@ -47,13 +45,12 @@ const SubStatus = z.enum([ 'Past Due', ] as const); -export type SubStatus = z.infer; - export const Subscription = z.object({ actions: StringArray, createdDate: z.string(), durationInMonths: z.number().nonnegative(), - identifier: z.string().nonempty(), + identifier: z.string().min(1), + isSoftCanceled: z.boolean().default(false), nextActionDate: z.string(), nextBillingAmount: z.string(), pending: z.boolean().default(false), @@ -65,7 +62,7 @@ export type Subscription = z.infer; export const Payment = z.object({ eurAmount: z.string(), - identifier: z.string().nonempty(), + identifier: z.string().min(1), paidAt: z.string(), plan: z.string(), }); @@ -78,20 +75,20 @@ export const Account = z.object({ apiSecret: z.string(), canUsePremium: z.boolean(), dateNow: z.string(), - email: z.string().nonempty(), + email: z.string().min(1), emailConfirmed: z.boolean(), hasActiveSubscription: z.boolean(), payments: z.array(Payment), subscriptions: z.array(Subscription), - username: z.string().nonempty(), + username: z.string().min(1), vat: z.number(), }); export type Account = z.infer; export const ApiKeys = z.object({ - apiKey: z.string().nonempty(), - apiSecret: z.string().nonempty(), + apiKey: z.string().min(1), + apiSecret: z.string().min(1), }); export type ApiKeys = z.infer; @@ -134,8 +131,6 @@ const PremiumData = z.object({ plans: z.array(Plan), }); -export type PremiumData = z.infer; - export const PremiumResponse = z.object({ result: PremiumData, }); @@ -172,8 +167,8 @@ const CryptoPayment = z.object({ cryptoAddress: z.string(), cryptocurrency: z.string(), decimals: z.number().optional(), - finalPriceInCrypto: z.string().nonempty(), - finalPriceInEur: z.string().nonempty(), + finalPriceInCrypto: z.string().min(1), + finalPriceInEur: z.string().min(1), hoursForPayment: z.number(), iconUrl: z.string().optional(), months: z.number(), @@ -205,19 +200,13 @@ export const PendingCryptoPaymentResponse = z.object({ result: PendingCryptoPayment.optional(), }); -export type PendingCryptoPaymentResponse = z.infer< - typeof PendingCryptoPaymentResponse ->; +export type PendingCryptoPaymentResponse = z.infer; -export const PendingCryptoPaymentResultResponse = z.object({ +z.object({ message: z.string().optional(), result: z.boolean().optional(), }); -export type PendingCryptoPaymentResultResponse = z.infer< - typeof PendingCryptoPaymentResultResponse ->; - export interface CreateCardRequest { paymentMethodNonce: string; } diff --git a/utils/api.ts b/utils/api.ts index 7b7ced62..9868d848 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -93,9 +93,12 @@ export const fetchWithCsrf = $fetch.create({ 'accept': 'application/json', 'content-type': 'application/json', ...(token && { [CSRF_HEADER]: token }), - ...options?.headers, }; + for (const [key, value] of options.headers) { + headers[key] = value; + } + if (import.meta.server || process.env.NODE_ENV === 'test') { const cookieString = event ? event.headers.get('cookie')